Apache Iceberg简介
作者 Charles Mahler / 开发者
2024年5月9日
导航至
什么是Apache Iceberg?
Apache Iceberg 是一种用于大规模分析的开源表格式。它通过提供一种高性能、更高效的方式来管理大规模数据,从而克服了传统表存储解决方案的限制。Iceberg允许对数据进行细粒度控制,支持诸如模式演变、时间旅行和事务支持等特性,这些特性对于现代数据架构至关重要。
Netflix最初推出Iceberg项目是为了解决其庞大数据仓库的挑战,并提高现有表格格式性能和可扩展性。随后,该项目被开源,并被包括Airbnb、Adobe、LinkedIn等在内的众多公司采用。
Apache Iceberg 的优势
优化查询性能
Apache Iceberg 采用多种技术来提高性能。以下是主要方法的概述
- 文件分区 - 数据可以在多个字段上分区,包括复杂的嵌套数据结构。这有助于减少查询需要扫描的数据量。
- 谓词下推 - 通过支持谓词下推,Iceberg 允许在存储级别进行数据过滤,而无需查询引擎将数据加载到内存中,从而减少数据传输和处理时间。
- 增量扫描 - Iceberg 允许进行增量扫描,这仅读取自上次查询以来发生更改的文件部分。这有助于通过减少需要重新处理的数据来提高重复或频繁查询的性能。
- 压缩 - Iceberg 自动压缩和调整文件大小,以减少碎片化和不必要的访问。
元数据管理
Iceberg 提供集中式元数据管理,通过维护大型数据集的一致视图,简化了数据治理和管理。这种方法确保元数据始终是最新的且可访问的,从而降低了大规模管理数据的复杂性和开销。
大数据生态系统集成
Apache Iceberg 与 Apache Spark、Apache Flink 和 Presto 等流行的数据处理框架无缝工作。这种兼容性使开发者能够在无需重大更改的情况下将 Iceberg 集成到现有数据管道中,从而简化了采用和实施过程。
架构演变支持
Apache Iceberg 的一个关键特性是其对高效架构演变的支持。它允许对表的架构进行添加、删除和更新,而不会破坏现有数据,确保数据即使在底层架构发生变化时也保持可访问和可查询。
ACID 事务支持
Iceberg 将 ACID 保证引入大数据,为大型数据集提供事务支持。此功能确保在多个操作中数据完整性和一致性,这对于需要严格数据精度和可靠性的应用程序至关重要。在大组织中,尤其如此,因为许多系统可能会同时查询或更新数据。
Apache Iceberg 应用场景
数据湖
Apache Iceberg 对 数据湖 来说是理想的,提供了一种结构化和高效的方式来管理大量原始数据。其功能支持可扩展的数据存储、优化的查询性能和无缝的架构演变,使企业能够利用数据湖进行洞察分析。
数据湖屋
Iceberg 还可用于创建数据湖屋,通过融合数据仓库和数据湖的最佳特性。它提供对数据湖屋架构中预期的 ACID 事务和性能优化的支持。
数据治理
凭借其集中式元数据管理和事务支持,Apache Iceberg 在数据治理中发挥着关键作用。它确保所有数据操作中的数据完整性、合规性和安全性,成为组织实施有效数据治理策略的有价值工具。
Apache Iceberg 关键概念和功能
Apache Iceberg 引入了一些关键概念和功能,旨在显著提高数据管理和访问方式,以支持分析。以下是这些功能的深入了解
表元数据
冰山使用元数据文件树来跟踪表和分区。冰山维护一个目录,指向这些文件,作为独立于底层数据层的元数据层。表元数据使冰山具有快照、时间旅行和原子事务支持等功能。
分区
冰山的分区系统是一个动态且高度可配置的特性,它通过根据特定列值组织数据,将数据分成更易管理的小块来提高查询性能。与传统的静态分区不同,冰山支持多列分区,并允许自定义分区策略,如分桶或范围分区。这种灵活性使用户能够根据特定的查询模式定制分区方案,从而在查询过程中显著减少扫描的数据量。
数据可以根据日期进行分区,以确保对特定时间段的查询更高效。冰山的分区系统无需重写数据集即可进化,便于在查询模式发生变化时进行维护和调整。
时间旅行
冰山中的时间旅行功能允许用户查询特定时间点存在的数据,为合规性、审计和历史数据分析提供了显著的好处。这一功能是通过冰山的快照管理实现的,它维护了表在不同时间点的状态历史。用户可以轻松回滚到或查询这些快照,从而分析历史数据、跟踪时间变化或从意外数据修改或删除中恢复。
时间旅行促进了各种用例,从跟踪数据随时间的变化进行趋势分析到在事件发生后进行法医调查。通过提供一种简单访问历史数据状态的方法,冰山使组织能够满足合规性要求、进行深入的数据分析并确保数据完整性和可靠性。
使用Apache Iceberg的公司
Adobe
Adobe体验平台团队使用Iceberg作为其数据湖架构的一部分,这使客户能够构建实时个性化体验。Adobe的平台使用lambda架构为客户、合作伙伴和内部用户处理PB级的数据。Adobe在其内部解决方案无法解决类似问题后迁移到了Iceberg。
Netflix
Netflix内部创建了Iceberg来解决Apache Hive的问题。这些问题包括查询正确性问题、无法提供稳定的原子事务、难以更改数据格式以及较差的写入性能。Netflix意识到许多其他公司也存在类似问题,并在2018年将Iceberg捐赠给了Apache基金会。它于2020年成为顶级项目。
Airbnb
Airbnb采用了Apache Iceberg作为其从遗留数据仓库迁移的一部分。原始数据仓库使用Hive作为元数据存储,当数据分区的数量增加时,这成为了一个性能瓶颈。这需要聚合数据并减少保留期,限制了数据分析的洞察力。Airbnb通过从Hive迁移到Iceberg来解决这些问题。