什么是 Apache Iceberg?

Apache Iceberg 是一种开源表格式,专为存储在数据湖中的大型分析数据集而设计。它解决了传统数据湖表格格式存在的许多局限性,为数据湖仓一体架构提供了更高的可靠性、性能和灵活性。不妨将其视为位于数据湖存储(例如 Cloud Storage)之上的智能层,为您的海量数据集提供类似数据库的功能。Iceberg 并非只是管理文件,而是将表作为数据文件的集合进行管理,从而支持架构演化、时间旅行以及更高效的查询规划等功能。这使数据分析师、数据科学家和工程师能够更轻松、更高效地处理数据湖中的数据,并增加他们的分析工作负载。

Apache Iceberg 有哪些用途?

Apache Iceberg 在现代数据架构中有多种用途,尤其适用于基于数据湖的架构。其主要应用场景包括:

  • 实现可靠的数据湖:Iceberg 可确保操作符合原子性、一致性、隔离性和持久性 (ACID) 原则。这有助于防止传统基于文件的方法可能导致的数据损坏和数据不一致问题。
  • 支持架构演变:与常因架构更改而出现问题的旧表格式不同,Iceberg 支持无缝且安全的架构演变。您可以添加、删除或重命名列,而不会中断正在进行的查询,也无需执行代价高昂的数据迁移。
  • 提供时间旅行功能:Iceberg 会保留表快照的历史记录,让用户能够查询特定时间点的数据。这在审核、调试和重现分析时非常宝贵。
  • 优化查询性能:Iceberg 的元数据管理使查询引擎能够高效跳过不必要的数据文件,显著加快查询执行速度,尤其在处理大型数据集时效果更佳。
  • 促进数据治理:表版本控制和元数据管理等功能可提供清晰的数据变更审核记录,从而增强数据治理和合规性。
  • 构建数据湖仓一体:Iceberg 是构建数据湖仓一体的基础组件,它将数据湖的规模和灵活性与数据仓库的数据管理能力相结合。它支持在同一数据上运行分析和更多运营工作负载。
  • 提高机器学习中的数据可靠性:Iceberg 提供的一致且具备版本控制的数据集对于训练和部署可靠的机器学习模型至关重要。数据科学家可以使用历史数据快照轻松重现实验。

Apache Iceberg 如何运作?

从根本上讲,Apache Iceberg 的工作原理是引入一个元数据层,该层位于数据湖中的实际数据文件之上。与传统的基于文件的系统相比,此元数据以更有条理、更可靠的方式跟踪表的结构和内容。下面是其主要机制的详细说明:

  1. 元数据管理:Iceberg 维护元数据文件,这些文件描述了表的架构、分区和数据文件的位置。这些元数据文件通常与数据一起存储在数据湖中。
  2. 目录:Iceberg 依赖于目录来跟踪每个表的当前元数据位置。此目录可以是 Hive Metastore 等服务、基于文件系统的实现,或云原生目录服务。
  3. 表快照:每次对表进行更改(例如添加数据、删除数据或架构演化)时,Iceberg 都会创建表元数据的新快照。这些快照不可更改,并提供表状态的历史记录。
  4. 清单列表和清单文件:每个快照都指向一个清单列表,而清单列表则列出了一个或多个清单文件。清单文件包含有关各个数据文件的元数据,包括其位置、分区值和统计信息(如行数和值范围)。
  5. 数据文件:这些是实际的 Parquet、ORC 或 Avro 文件,用于将数据存储在数据湖中。Iceberg 的元数据会跟踪这些文件及其在表内的组织方式。

Apache Iceberg 架构

Apache Iceberg 的架构涉及多个协同工作的关键组件:

  • 数据湖存储:这是底层存储层,例如 Cloud Storage,用于存储实际数据文件(采用 Parquet、ORC 或 Avro 等格式)和 Iceberg 元数据文件。
  • Iceberg 目录:此组件负责管理 Iceberg 表的元数据指针。它充当中央注册表,用于跟踪每个表当前的元数据版本。常见的目录实现方式包括:
  • Hive Metastore一种广泛使用的元数据库,通常与基于 Hadoop 的系统一起使用。
  • 文件系统目录:这是一种简单的实现方式,目录信息直接存储在数据湖文件系统中。
  • 云原生目录服务:由云服务提供商提供的托管式服务,用于存储和管理元数据。
  • Iceberg 元数据:由几层元数据文件组成,用于跟踪表的结构和数据:
  • 表元数据文件:此文件指向当前清单列表,并包含有关表的高级信息,例如其架构和分区规范。
  • 清单文件列表:此文件列出了包含表特定快照中数据文件元数据的清单文件。
  • 清单文件:这些文件包含有关各个数据文件的详细信息,包括其位置、分区值和统计信息。
  • 查询引擎和处理框架:这些工具与 Iceberg 表交互以读取和写入数据。这些引擎利用 Iceberg 的元数据来优化查询规划和执行。
  • 计算资源:这是运行查询引擎和处理框架的基础架构(例如虚拟机和容器)。

Apache Iceberg 和数据湖

Apache Iceberg 通过添加可靠且高性能的表格格式,显著增强了数据湖的功能。在不使用 Iceberg 等表格格式的传统数据湖中,数据通常只是一些文件的集合。这可能导致多个挑战:

  • 缺乏架构演化:更改数据结构可能既复杂又容易出错
  • 读取不一致:并发写入操作可能导致查询同时读取旧数据与新数据
  • 查询性能低:如果查询引擎缺乏元数据引导,通常需要扫描大量数据
  • 数据管理难度高:时间旅行和版本控制等功能无法轻松使用

Iceberg 通过在数据湖之上提供结构化层来解决这些限制。它为数据湖引入类似数据库的功能,使其转变为功能更强大、更易管理的数据湖仓一体。通过将表作为包含丰富元数据的文件集合进行管理,Iceberg 可实现以下功能:

  • 可靠且一致的数据访问:ACID 属性可确保数据完整性
  • 高效的查询处理:元数据驱动的数据跳过和过滤功能可加快查询速度
  • 灵活的数据管理:架构演化和时间旅行功能可简化数据维护和分析
  • 互操作性:Iceberg 旨在与数据湖中常用的各种查询引擎和处理框架兼容

利用 Google Cloud 解决业务难题

新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。
与 Google Cloud 销售专员联系,详细讨论您的独特挑战。

Apache Iceberg 面临的挑战

虽然 Apache Iceberg 具有显著优势,但也有一些需要考虑的挑战:

复杂性提升

引入 Iceberg 会在数据湖中增加一层抽象,从而可能提高整个系统的复杂性。理解和管理元数据层需要专业知识。

目录依赖项

Iceberg 依赖于目录服务(如 Hive Metastore)来管理表元数据位置。目录的可用性和性能可能会影响整个系统。

学习曲线

团队需要了解与 Iceberg 相关的概念和最佳实践,这可能需要培训和技能提升。

潜在开销

虽然 Iceberg 在许多情况下能优化查询性能,但其元数据管理本身会带来一定开销,尤其在处理非常小的数据集或极其简单的查询时更为明显。

工具成熟度

虽然 Iceberg 生态系统发展迅速,但与更成熟的数据仓储技术相比,某些工具和集成可能仍不够完善。

迁移工作量

将现有数据湖迁移至 Iceberg 可能是一项庞大的工程,可能需要重写数据并调整现有数据流水线。

Google Cloud 和 Apache Iceberg

Google Cloud 提供了一个可靠的环境,可用于利用 Apache Iceberg。多项 Google Cloud 服务可与 Iceberg 顺畅集成,让用户能够构建功能强大且可扩缩的数据湖仓一体解决方案。

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。