跳至主要内容

Apache Iceberg 与 Delta Lake:功能、差异与使用场景

为您的数据湖选择合适的表格式。本文比较 Apache Iceberg 与 Delta Lake,涵盖其功能、差异及各自适用场景。
Laiba Siddiqui
Laiba Siddiqui

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

大数据处理常常涉及非结构化数据,管理和分析起来颇具挑战。任何环节都可能发生意外删除或其他错误——这对数据完整性构成重大风险。

Apache Iceberg 和 Delta Lake 是主要用于管理大规模数据湖和湖仓的开源表格式。两者都提供架构演进、时光回溯和 ACID 事务等功能,以应对处理海量数据集的挑战。尽管各有优势,但它们的共同目标是:在各数据集中保持数据一致性。

本文将解释 Apache Iceberg 与 Delta Lake 的关键功能、相似点和架构差异,帮助您选择适合需求的工具。

什么是 Apache Iceberg?

Apache Iceberg logo

由 Netflix 开发并捐赠给 Apache 软件基金会的 Iceberg 旨在解决大规模数据湖的管理难题。它是面向大型分析表的高性能格式,能够高效管理和查询海量数据集,其特性弥补了传统数据湖存储方式的诸多局限。

接下来更详细地了解 Apache Iceberg。

Apache Iceberg 的功能

以下是 Apache Iceberg 的一些突出功能,对数据工程师处理数据集非常有帮助。

  • 架构演进: 在传统数据库中,更改数据结构(如添加新列)可能非常麻烦。Iceberg 让这变得简单。例如,您在追踪客户数据并希望添加 loyalty_points 字段时,可以在不影响现有数据或破坏当前查询的情况下完成。此灵活性对需长期演进的数据项目尤为重要。
  • 分区: 它有助于将数据组织为更小且更易管理的块。这样查询更快,因为每次无需遍历全部数据。例如,我有一个庞大的销售记录数据集。Iceberg 可以按日期、地点或其他相关维度自动组织这些数据。
  • 时光回溯:此功能允许您轻松访问历史数据版本。如果有人误删了重要信息,或您需要将当前数据与过去状态对比,便可回到特定时间点。此类时间点查询可简化审计与数据恢复流程。
  • 数据完整性:数据损坏可能由网络问题、存储故障或软件缺陷等多种原因导致。Iceberg 使用数学手段(校验和)来检测哪怕单个位的意外变化,确保您分析的数据与最初存储的数据完全一致。
  • 压缩与优化:随着时间推移,数据系统可能被大量小文件塞满,导致处理变慢。Iceberg 会定期进行清理,通过合并小文件并更高效地组织数据来优化性能。

这些功能使 Iceberg 尤其适合大规模数据分析,特别是在数据频繁变化或需在较长周期以多种方式访问的场景。

查看博文 Apache Iceberg Explained,深入了解这项令人兴奋的技术。

什么是 Delta Lake?

Delta Lake logo

由 Databricks 开发的 Delta Lake 能与 Spark 无缝协作,因此深受已投入 Spark 生态的组织青睐。它是一个开源存储层,将 ACID(原子性、一致性、隔离性、持久性)事务引入 Apache Spark 和大数据工作负载。

基于 Delta Lake 的湖仓通过可扩展的元数据、版本控制与模式约束,简化数据仓库与机器学习流程,从而维护数据质量。

Delta Lake 的功能

以下关键功能使 Delta Lake 成为现代数据处理的良好方案:

  • ACID 事务:传统数据湖常难以保持数据一致性。为克服这一点,Delta Lake 将数据库所具备的 ACID 属性引入数据湖。这意味着即使处理中途发生问题,您也能在不担心数据损坏或不一致的情况下执行复杂操作。
  • 数据版本与时光回溯:随着 GDPR 等数据监管趋严,按时间追踪数据变化变得弥足珍贵。Delta Lake 的时光回溯功能允许您访问并恢复先前版本的数据,这对合规性以及在不同数据集版本间进行实验都很有帮助。
  • 批流一体:传统上,组织需要分别针对批处理(一次处理海量数据)和流处理(实时数据)部署不同系统。Delta Lake 弥合了这一差距,您可以使用同一系统处理两者,从而简化数据架构并构建更灵活的数据管道。
  • 可扩展的元数据处理:当数据规模增长至 PB 级时,管理元数据(关于数据的数据)变得困难。许多系统在处理数百万文件时会显著变慢。然而,Delta Lake 能在大规模下保持性能不降,适用于超大数据湖。
  • 读写优化:性能在大数据场景中至关重要。Delta Lake 通过数据跳过、缓存与压缩来加速读写操作,从而实现更快的查询与更高的计算资源利用率,在云环境中也能节省成本。

课程 Big Data Fundamentals with PySpark 深入讲解基于 Spark 的现代数据处理,是了解这项强大技术的极佳入门与复习。

Apache Iceberg 与 Delta Lake:相似点

由于 Apache Iceberg 和 Delta Lake 都管理海量数据,我们先来看它们的基本相似之处。

ACID 事务与数据一致性

两种工具都可通过 ACID 事务与版本控制实现完整的数据一致性。不过,Iceberg 采用读取时合并(merge-on-read)方法,而 Delta Lake 采用写入时合并(merge-on-write)策略。

因此,两者在性能与数据管理上的处理方式不同。Iceberg 可提供完整的架构演进支持,而 Delta Lake 更注重强制模式合规。

对时光回溯的支持

时光回溯功能允许用户查询历史版本数据,这使其在审计、调试甚至复现实验方面极具价值。Iceberg 与 Delta Lake 均支持时光回溯,您可以放心访问过往数据状态。

开源属性

Apache Iceberg 和 Delta Lake 都是开源技术。这意味着任何人都可以免费使用并参与改进。此外,开源还意味着您不被某一家厂商产品锁定——可按需自由切换或组合工具。由于代码公开,您甚至可以针对自身需求进行优化。

Similarities between Apache Iceberg and Delta Lake

Apache Iceberg 与 Delta Lake 的主要共性。作者使用 napkin.ai 制作的图片。

Iceberg vs Delta Lake:核心架构差异

尽管 Iceberg 与 Delta Lake 有相似之处,但其架构存在差异。如下所示:

事务模型

Iceberg 和 Delta Lake 都能保障数据湖中的数据可靠性,但实现机制不同。 Iceberg 通过快照实现原子事务,确保更改要么完整提交,要么回滚。 而 Delta Lake 通过事务日志确保只有已验证的更改才会提交到表中,从而在数据更新中提供可靠性。

元数据管理

Apache Iceberg 采用分层元数据结构,包括清单文件、清单列表和元数据文件。此设计通过消除列举文件、重命名等高成本操作来简化查询处理。

而 Delta Lake 采用基于事务的方式,在日志中记录每次事务。为提升查询效率并简化日志管理,它会定期将这些日志合并为 Parquet 检查点文件,以捕获完整的表状态。

文件格式兼容性

Iceberg 对文件格式较为灵活,可原生支持 Parquet、ORC 和 Avro 文件。如果您拥有不同格式的数据,或希望将来切换格式而不更改整个系统,这将非常有用。

Delta Lake 主要以 Parquet 格式存储数据,因为 Parquet 在分析型查询方面效率很高。它专注于单一格式,以便针对该类型文件实现最佳性能。

性能与可扩展性

Iceberg 与 Delta Lake 都能扩展数据湖,但策略不同。Iceberg 侧重通过分区、压缩等高级数据组织提升表现;而 Delta Lake 则通过 Delta Engine、自动压缩与索引能力强调高性能。

Apache Iceberg and Delta Lake core differences

Apache Iceberg 与 Delta Lake 的核心差异。作者使用 napkin.ai 制作的图片。

Apache Iceberg 的使用场景

凭借其独特功能,Apache Iceberg 迅速成为现代数据湖管理的首选方案。我们来看看其主要使用场景,以理解其优势。

云原生数据湖

以下原因使 Iceberg 成为构建云规模数据湖的组织的热门之选:

  • 强大的架构演进: 支持添加、删除或修改列而不影响现有查询。例如,若需新增字段以追踪用户偏好,您无需重建整个数据集或更新所有查询。
  • 性能: 通过数据聚类与元数据管理等高级技术优化查询性能,能够快速裁剪无关数据文件,减少扫描量并提升查询速度。
  • 可扩展性: 管理数十亿文件与 PB 级数据。此外,其分区演进功能允许您在无停机与低成本迁移的情况下调整数据组织方式。

复杂数据模型

处理复杂数据模型的团队会发现 Iceberg 尤其有用,原因包括:

  • 架构灵活性: 支持嵌套数据类型(struct、list、map)以表示复杂关系。例如,电商平台可在单表中存储订单详情,包括商品与客户数据的嵌套结构。
  • 时光回溯查询: 通过维护数据快照,您可以查询过去任意时间点的数据状态。这对出于合规而重构任意时刻的数据状态,或基于历史快照重跑分析,价值极高。

与工具集成

Iceberg 与多样化工具兼容,使其在数据生态中具备通用性。以下是一些关键集成:

Iceberg 可与以下工具无缝协作:

  • Apache Spark:用于大规模数据处理与机器学习。
  • Trino :用于跨多数据源的快速分布式 SQL 查询。
  • Apache Flink :用于实时流处理与批计算。

以下主要云服务商对 Iceberg 提供原生支持:

Iceberg 还为多种编程语言提供客户端库,例如:

  • SQL:对 Iceberg 表执行标准 SQL 查询。
  • Python:通过 PySpark 或 pyiceberg 等库进行数据操作。
  • Java :利用原生 Java API 执行底层操作与定制集成。

Apache Iceberg technical architecture

Apache Iceberg 表格式规范。图片来源:Iceberg 文档。

Delta Lake 的使用场景

Delta Lake 能解决常见难题并简化数据管理。以下是其真正发挥作用的一些关键情境。

批流一体的工作负载

借助 Delta Lake,您无需针对不同数据类型搭建独立系统。单一系统即可处理全部数据:您可以实时向表中写入新数据,并立即用于分析,这意味着数据始终保持最新。

您可以构建一个同时处理历史与增量数据的工作流,降低整体系统复杂度、简化运维。此统一方法能让数据管道更简洁。

面向数据湖的 ACID 事务

Delta Lake 通过 ACID 事务为数据湖带来强可靠性。例如:

  • 医院可以维护准确、最新的患者记录,以提供适当的护理并遵守隐私法规。
  • 银行可以确保所有金融交易被准确记录,且不会被意外更改。
  • 零售门店可以在大量并发更新的情况下仍保持精准库存,避免售卖缺货商品等问题。

Delta Lake 通过确保所有更改要么完全应用要么完全不应用来实现这种可靠性;此外,确保数据始终在有效状态之间转换,并且不同操作互不干扰。

Apache Spark 生态

Delta Lake 还能与 Apache Spark 无缝协作,这对许多组织是巨大优势。如果您已在使用 Spark,引入 Delta Lake 十分简单,无需对现有架构做重大调整。团队可继续使用熟悉的 Spark 工具与 SQL 命令。

由此,您的 Spark 作业在处理海量数据时会更快。其通过更高效地组织数据与智能索引来实现加速。

Apache Iceberg vs Delta Lake:总结

我们来总结 Apache Iceberg 与 Delta Lake 的关键差异,帮助您快速理解它们的格式优势与核心功能。

功能

Apache Iceberg

Delta Lake

ACID 事务

是

是

时光回溯

是

是

数据版本

是

是

文件格式

Parquet、ORC、Avro

Parquet

架构演进

完整

部分

与其他引擎的集成

Apache Spark、Trino、Flink

主要为 Apache Spark

云兼容性

AWS、GCP、Azure

AWS、GCP

查询引擎

Spark、Trino、Flink

Spark

编程语言

SQL、Python、Java

SQL、Python

注意:最佳选择取决于您的需求、可扩展性要求以及长期数据战略。

结论

在 Apache Iceberg 与 Delta Lake 之间进行选择时,请考虑您的具体用例与现有技术栈。Iceberg 在文件格式与查询引擎上的灵活性,使其非常适合云原生环境;而 Delta Lake 与 Apache Spark 的深度集成,则适合深度投入 Spark 生态的组织。

您也可查看以下 DataCamp 资源,夯实现有的数据知识:

  1. Understanding Data Engineering 课程,掌握基本概念
  2. Database Design 与 Data Warehousing 课程,高效构建大规模数据
  3. Modern Data Architecture 课程,学习当前最佳实践与趋势

祝您学习顺利!

FAQs

读取时合并(Merge-on-Read)与写入时合并(Merge-on-Write)的主要区别是什么?

读取时合并(Iceberg 采用)在查询时从现有文件读取并应用更改。写入时合并(Delta Lake 采用)在写入过程中将更新合并到基础数据中,以更快读取为代价带来较慢写入。

Apache Iceberg 和 Delta Lake 能处理 PB 级数据吗?

是的,Apache Iceberg 与 Delta Lake 都能高效处理 PB 级数据集。它们通过分区、元数据管理与压缩等高级功能优化大数据湖的性能。

在查询深度嵌套数据结构时,Apache Iceberg 和 Delta Lake 的表现如何?

Apache Iceberg 在查询深度嵌套数据结构方面表现出色。它支持如 Parquet 等面向表的存储格式,这些格式针对嵌套数据进行了优化。另一方面,Delta Lake 也支持嵌套数据,但其性能可能随查询复杂度和数据集大小而变化。

Apache Iceberg 与 Delta Lake 能在同一数据湖架构中协同工作吗?

是的,Apache Iceberg 与 Delta Lake 可在同一数据湖中共存。可根据需求在不同用例中分别使用。例如,您可以将 Delta Lake 用于围绕 Apache Spark 的工作负载,而将 Iceberg 用于对多样查询引擎更灵活的集成。

在非 Spark 引擎中使用 Delta Lake 是否存在局限?

Delta Lake 与 Apache Spark 深度集成,尽管也能与 Presto 或 Hive 等其他引擎协作,但这些集成仍在演进中。其性能可能不如与 Spark 的优化程度,从而在 Spark 生态之外的效果受限。

Iceberg 与 Delta Lake 如何应对数据湖中的小文件问题?

Apache Iceberg 与 Delta Lake 都通过压缩来解决小文件问题。Iceberg 会定期合并小文件以优化查询性能,而 Delta Lake 则在写入过程中使用自动压缩整合文件。这样可减少大量小文件带来的开销,从而提升性能。

为什么 Databricks 收购了 Tabular(Iceberg 背后的公司)?

Databricks 收购 Tabular 旨在增强其在 Apache Iceberg 方面的能力,Iceberg 最初由 Tabular 的创始人创建。此次收购旨在提升 Delta Lake 与 Iceberg 的兼容性与互操作性,最终推动形成结合两个开源项目优势的统一湖仓格式。

收购 Tabular 对 Delta Lake 与 Iceberg 用户意味着什么?

此次收购意味着 Databricks 将积极推动 Delta Lake 与 Iceberg 在兼容性方面更趋一致。用户将受益于更好的集成,Delta Lake UniForm 已成为实现 Delta Lake、Iceberg 与 Apache Hudi 互操作的平台。这让用户能够跨不同格式工作,而不被单一方案锁定。

Databricks 会继续同时支持 Delta Lake 与 Iceberg 吗?

是的,Databricks 已表示将同时支持这两种格式。通过收购 Tabular 并引入 Apache Iceberg 的原始创建者,Databricks 期望促进 Iceberg 与 Delta Lake 社区的协作。其目标是开发一个面向湖仓格式互操作的开放统一标准,为用户提供更多选择与灵活性。

Laiba Siddiqui

作者

Laiba Siddiqui

我是内容策略专家,热衷于将复杂主题化繁为简。我曾帮助 Splunk、Hackernoon 和 Tiiny Host 等公司为其受众打造兼具吸引力与信息量的内容。

主题