查收一份来自南极的 Iceberg 数据治理指南
背景
Apache Iceberg 作为面向超大型湖存储的新一代表格式,由于在元数据管理、数据时效性以及解决传统 Hive 在海量分区操作耗时方面具备显著优势,目前正在被越来越多的企业用户认可。如腾讯云的新一代 Lakehouse 产品数据湖计算 DLC,其底层存储同样基于 Iceberg 深度优化。
作为传统 Hive 数仓的替代, Iceberg 逐渐被广泛应用于数据湖管理和数据仓库构建中。相比传统 Hive,Iceberg 具备完整的 ACID 语义、支持行级数据更新及时间旅行,支持 Schema 演进并且凭借更灵活的文件组织方式,能够支持高效的数据过滤从而达到更优性能。
更进一步,Iceberg 结合流式写入可构建近实时数仓,从而将传统 Hive 离线数仓的数据实时性提高到分钟级。例如在腾讯云数据湖 DLC 产品中,结合 InLong 可实现高达百万级/秒写入的实时入湖应用,从而在不增加成本下满足各种对数据新鲜度有极高要求的业务场景。
Iceberg 治理痛点
虽然原生 Iceberg 能够带来上述事务性、实时更新等好处,但作为一个正在高速迭代中的开源项目,Iceberg 在使用过程中也伴随了一系列的痛点。例如频繁流式写入下带来的小文件问题,以由于 Iceberg 元数据组织方式所导致的 delete-file、matadata 冗余文件随着使用不断增多。
另外要充分发挥 Iceberg 性能优势,旨在提升 Data Skipping 效率、减少对底层对象存储 IO 压力的数据文件编排也必不可少,但遗憾的是目前 Iceberg 对此并未有自适应优化的实现,需要用户根据实际场景进行负载的配置与实现。
本文首先简单总结了几个 Iceberg 的典型治理问题,如您熟悉 Iceberg 运维可快速跳过。
Iceberg 在尤其是流式写入的场景下,由于 commit 机制会产生大量的小文件。
小文件如未得到有效的清理则会严重拖慢上层计算系统的性能。虽然用户可以通过手动任务方式使用 Iceberg 内置的 org.apache.Iceberg.actions.RewriteDataFiles 来实现小文件合并,但仍需配合 delete-after-commit 等配置来进一步实现历史快照清理等一系列动作,如涉及表格过多(如上千张)其维护成本相对较大。
Iceberg 数据治理另一核心问题是随着时间推移将产生大量的冗余数据。
如每次写入 Iceberg 时,除 insert 操作产生数据文件外,delete 操作也会同时产生大量的 equality-delete-file 及 position-delete-file,以及各种过期的 Snapshot 快照文件。一旦这些文件随时间推移再也没有被 Iceberg 元数据所引用到,则成为了实际上业务不需要的孤儿文件。
由于 Iceberg 通常结合对象存储构建海量一体化湖存储,相比传统存算一体的 HDFS 系统,对象存储在吞吐带宽、元数据操作效率上的不足,在大数据量扫描下 Iceberg 将对底层对象存储系统造成大量的 IO 压力。因此调整 Iceberg 表的分布来提高数据在特定字段上的聚集性,以及构建 Bloom Filter、稀疏索引等索引机制过滤当前查询实际无需读取的数据文件,对于 Iceberg 的查询加速非常关键。
除上述三点以外,Iceberg 数据治理还存在需要周期性检验 MetaData 元文件大小、避免过大引起查询引擎 OOM,以及数据优化任务周期性调度与成本控制等一系列挑战。
Iceberg 治理破局
Iceberg 目前在数据治理上的局限,像极了 10 年前的安卓系统。
对于上述 Iceberg 数据治理问题,虽然 Iceberg 提供了小文件合并、过期 Snapshot 删除等功能,社区以也逐渐总结出了一系列最佳实践和解决方案,但目前社区仍缺乏自动化实现。用户需自行规划治理方案以及周期性手动操作,无疑大大增加了用户使用、优化 Iceberg 的门槛的成本,而熟悉 Iceberg 数据治理的人才也较为紧缺。
为解决安卓系统使用一段时间后的垃圾文件膨胀及严重卡顿,各种旨在自动智能清理的手机管家类产品应运而生。如腾讯手机管家曾服务近 10 亿国内安卓用户。
对于 Iceberg ,是否能有屏蔽底层运维复杂性的一站式的 Lakehouse 优化管家?腾讯云数据湖计算 DLC 产品目前已具备成熟的自适应数据优化功能,用户在使用 DLC 托管存储后可开启原生表数据优化功能,DLC 将自动对小文件及 Iceberg 过期快照进行周期性优化,无需用户手动运维。
如国内某大型泛互客户因业务需要,通过腾讯云 InLong 将实时业务数据通过 upsert 方式实时入湖,其 QPS 超过了百万条数据每秒,整体为 Iceberg 带来了巨大的小文件与冗余文件压力。该客户使用了 DLC 数据优化后,通过约 256 CU 的弹性资源即完成了全链路约 2000 张表治理优化的需求,日均稳定运行超 3 万作业数。
DLC Iceberg 洞察
更进一步,DLC 目前推出了 Iceberg 健康度洞察功能,在 DLC 控制台——数据管理——数据库即可查看到相关库表的健康度情况。
此外,还能看到 Iceberg 快照信息、文件信息、数据优化效果可视化展示。
对于每一张 DLC 原生表,可进一步查看健康度明细情况,帮助和提示用户优化。如发现健康度较差的原生表,可按照控制台相关指引开启 DLC 数据优化,后台自动执行任务后将恢复原生表健康度。
具体 DLC 数据优化将会根据内置优化策略周期性执行优化策略,过程无需用户主动参与,相关优化任务信息可在 DLC 的历史任务中查看。
当前 DLC 的 Iceberg 健康度洞察核心检查项如下:
DLC Iceberg 健康度洞察将在原数据优化基础上,进一步通过可视化方式帮助用户了解当前存储系统的健康度和风险情况。如您对 Iceberg 健康度及 DLC 数据优化感兴趣,可进一步通过 DLC 官网文档 获得更多信息。
未来更多工作
Iceberg 数据治理正是当前很多企业用户选型 Iceberg 决策的犹豫不确定因素之一。腾讯云数据湖计算 DLC 产品作为 Serverless Lakehouse 产品,我们深知数据优化作为 Iceberg 的最关键后勤保障,近年来投入了大量资源进行相关的特性开发。在未来,DLC 团队将持续在 Iceberg 治理优化上投入,在稀疏索引、zorder 产品化构建等方面更多的关键产品能力。
同时在不远的将来,我们计划将 DLC 数据优化升级为服务腾讯云数据湖全系列产品的通用组件。届时腾讯云弹性 MapReduce(EMR)用户同样可以使用到与 DLC 一致的 Iceberg 数据治理能力,从而可根据自身业务和架构需要,使用 EMR 或 DLC 产品构建自己的云原生数据湖,而其背后数据湖复杂的治理运维将可通过统一数据优化解决。
此外,DLC 将进一步投入到基于 Iceberg 的统一+开放 Lakehouse 架构建设,支持对包括 Starrocks、Doris 在内的更多计算引擎适配,整体实现 DLC 一份开放的湖存储支持多种上层引擎。用户可根据实际业务场景需求,设计高度灵活的 Lakehouse 应用体系,充分释放 Iceberg 技术和数据价值。
例如,结合腾讯云数据仓库 TCHouse,腾讯云数据湖计算 DLC 即将发布全新 Lakehouse 加速模式,TCHouse 可直接查询 DLC 内部托管湖数据,过程无需经过任何数据复制和同步。TCHouse 作为覆盖云数仓全场景的云原生全托管数据仓库服务,具备极致云原生弹性、高并发查询、高性能执行引擎等优势,TCHouse 在 Lakehouse 加速模式下,基于 DLC 湖存储可提供毫秒级高性能查询,满足各类严苛的低时延业务场景需求,同时用户可享受到 DLC 数据湖灵活性和低成本一体化存储的优势。
评论