使用 Apache Iceberg 构建开放数据架构的技术领导者指南
简介
在过去的十年中,数据格局发生了深刻的变化。数据量的增长速度比以往任何时候都快,这得益于使用和生成大量数据的人工智能工作负载。随着最近智能体的兴起,需要访问数据的工具和引擎的数量成倍增加,而与此同时,大多数团队却被要求用更少的资源交付更多成果。最初针对结构化分析进行了优化的传统数据仓库已演变为复杂的技术生态系统,在它们之间可靠地共享数据仍然是最难解决的问题之一。
Apache Iceberg 直接解决了这个问题。它是一种开放表格式,可将数据仓库的可靠性与数据湖的灵活性相结合,同时确保任何兼容的引擎、工具或智能体都可以安全地处理相同的数据,而无需重新格式化或复制。Iceberg 解决了数据工程师长期面临的许多挑战,包括无需停机的架构演变、数据湖上的 ACID 事务、时间旅行功能以及 PB 级的有效元数据管理。
本指南可以作为 Apache Iceberg 的入门介绍。无论您是想从遗留系统迁移、优化现有部署,还是为智能体人工智能设计新的数据架构,您都将了解什么是 Iceberg,为什么它现在比以往任何时候都更重要,以及如何开始在 AWS 上使用 Iceberg。
开放数据架构之旅
从数据仓库到数据湖
几十年来,企业分析建立在数据仓库之上:结构化、管控和高性能,但灵活性有限。到 2000 年代初,基于像 Amazon Simple Storage Service(Amazon S3)这样的云对象存储构建的数据湖作为补充出现,解锁了以原始形式存储任何数据,并从单个存储库为多个分析引擎提供服务的能力。如今,有超过一百万个数据湖在 Amazon S3 上运行,它们仍然是组织大规模管理数据的核心部分。
随着数据湖使用案例扩展到任务关键型分析,组织需要传统数据湖所缺乏或需要昂贵的专用资源才能手动实现的功能,包括 ACID 事务、安全并发写入和架构演变。到 2010 年代末,许多组织同时运行数据仓库和数据湖,经常在它们之间移动数据。
开放表格式的出现
开放表格式通过将类似数据库的功能引入数据湖,解决了这一冲突。至关重要的是,开放表格式实现了互操作性,这意味着任何兼容的工具、引擎或智能体都可以安全地处理相同的数据,而无需重新格式化或复制数据。
开放表格式是湖仓架构的基础,将数据湖与集中式治理层相结合,使其能够像数据仓库一样运行。湖仓架构具有可扩展性、灵活性,并提供共享的数据存储和处理系统。它们能够更轻松地将数据集整合为高质量的数据产品,并具有广泛的分析工具兼容性和集中式访问控制。
Apache Iceberg 是一种开放表格式,使大规模的湖仓架构成为可能。Iceberg 于 2017 年在 Netflix 创建,旨在解决运行 PB 级数据湖的挑战。Iceberg 于 2018 年贡献给 Apache 软件基金会,现在得到所有主要云提供商和数据平台供应商的支持。
Iceberg:专为云而构建,在 S3 上诞生
2017 年,Netflix 运营着世界上最大的数据平台之一。他们的系统每天向 Amazon S3 存入数 PB 的数据,这些数据分成数十万个表和数百万个分区。他们的数据是使用 Apache Hive 表管理的,但是他们的大规模查询速度很慢,写入可能会损坏表,而且并发引擎无法安全地进行协调。 Netflix 工程师决定创建一种专门用于云对象存储的新表格式。该项目变成了 Apache Iceberg,短短几年内,它从内部实验变成了大数据领域最广泛采用的项目之一。
Apache Iceberg 的工作原理
Apache Iceberg 为数据湖带来了数据仓库的可靠性、性能和治理功能。它通过元数据优先架构来实现此目的,该架构改变了分析引擎与数据交互的方式。
元数据是核心创新
开放表格式通过在原始文件之上添加元数据层来改进传统方法。Iceberg 的与众不同之处在于它如何构造元数据以及它所能实现的功能。
Apache Iceberg 将每个表组织成三层:一个用作所有表操作入口点的目录,一个跟踪每个文件和每次更改的元数据层,以及数据文件本身。该目录指向当前的元数据,确保任何兼容的引擎都可以在同一个表上找到并安全地在同一个表上运行,而无需在格式之外进行协调。
每个 Iceberg 表都维护三层元数据:
- 元数据文件捕获表在特定时刻的完整状态,包括架构、分区布局、排序顺序和快照的完整历史记录。
- 清单列表参考清单文件的组,并记录了每次写入操作所引入的更改。
- 清单文件包含有关单个数据文件的详细信息,包括文件位置、行数、分区值以及列级统计信息,例如最小值和最大值。
当用户提交查询时,Iceberg 会首先评估清单元数据。它读取每个清单中的清单级分区摘要和每个文件的列级统计信息,以确定哪些数据文件包含相关记录,并且只打开这些文件。这意味着引擎会完全跳过无关的文件,只扫描重要的数据。在成本与扫描的数据量挂钩的云环境中,这直接转化为成本节约和更快的响应时间。
了解 Amazon Ads 如何利用 Iceberg 在 Amazon S3 上的文件布局优化,将处理时间缩短了 22%,计算成本降低了 20%,存储成本节省了 32%。
ACID 事务
原子性、一致性、隔离性和持久性(ACID)事务使数据湖适合以前需要数据仓库的工作负载。Iceberg 中的每个写入操作都会生成一个新的不可变快照,该快照表示表在给定时刻的状态。读取器始终会看到表的一致状态,即使多个进程同时写入,也不会遇到部分写入的情况。当冲突发生时,Iceberg 会检测到冲突并彻底失败,而不是损坏数据。
时间旅行
由于每次写入都会生成不可变的快照,因此 Iceberg 自然会保留表状态的完整历史记录。这意味着您可以随时查询表的确切状态,从而实现审计跟踪、历史分析和可复现的分析。当错误的写入损坏表时,您可以在几秒钟内回滚到以前的状态,而不是从头开始重新构建。
随着时间的推移,表会累积快照,尽管这些历史记录提供了强大的功能,但它需要积极的管理,例如使旧快照过期和移除孤立文件,以保持表的正常运行状况并控制存储成本。
架构和分区的演变
数据结构很少保持静态。Iceberg 旨在通过元数据而不是数据重写来管理架构和分区更改,从而允许架构以安全、一致和向前兼容的方式演变。无需重新处理现有文件即可添加、移除、重命名或重新键入列。分区策略可以在保持与历史数据的完全兼容性的同时发生变化,从而使您的数据架构能够与业务一起演变。
隐藏的分区
传统的数据湖需要用户知道分区方案才能编写有效的查询,这意味着您必须明确筛选这些派生列。Iceberg 通过使用分区转换自动从源列派生分区值,并根据查询本身的值修剪数据,从而消除了这一要求。用户在原始列上编写自然筛选条件,其余的由 Iceberg 处理。
行级更新和删除操作
Iceberg 支持直接对数据湖表执行 MERGE INTO、UPDATE 和 DELETE 操作,无需重写完整表。这使得流式传输管线、监管删除请求和大规模更正成为可能。
在每层都开放
Apache Iceberg 是一个由社区治理指导的开源项目,不受任何单一供应商的控制。其开放性贯穿架构的每一层:数据以开放的文件格式(Parquet、ORC、Avro)存储,Iceberg REST Catalog 为表发现提供标准化的 API,任何兼容的引擎都可以在不重新格式化或复制的情况下使用相同的表。组织可以自由构建自己的数据架构,而不必担心供应商锁定或承诺使用任何单一的专有格式。
为什么 Apache Iceberg 现在比以往任何时候都重要
在组织为智能体人工智能准备数据基础时,基于开放标准进行构建从未像现在这样重要。智能体需要自主发现、访问和推理数据,而当每个数据来源都需要自定义集成时,他们无法高效地做到这一点。
像 Apache Iceberg 这样的开放表格式为智能体提供了一个一致、结构良好的界面,用于访问和处理大规模数据。诸如 ACID 事务、架构演变、快照隔离和内置时间旅行等功能可确保每个查询,无论是由人工分析师还是自主智能体发起,都能看到完整、一致的数据视图。当与用于智能体与工具通信的模型上下文协议(MCP)等开放协议,以及用于数据移动和处理的 Apache Kafka 和 Apache Spark 等开源框架结合使用时,可以形成一个数据架构,在这种架构中,智能体可以更高效地跨系统运行,而被数据孤岛节流的风险要低得多。
Iceberg 还为组织提供了保持面向未来所需的灵活性。架构可以演变,分区策略可以随着需求的变化而变化,而不会影响下游使用器。而且,由于 Iceberg 是一种 100% 开源、社区驱动型表格式,因此它与单一供应商的路线图无关。随着工作负载的扩展和人工智能格局的持续发展,您可以自由地切换工具和框架,而智能体更有可能可靠地访问高质量的数据。
除了灵活性之外,Iceberg 还可以提供有意义的成本效益。将工作负载整合到受管数据的单个副本上可以消除冗余的 ETL 管线,并降低分散在孤立系统中的重复数据集的存储成本。凭借在 Apache Spark、Apache Flink 和 Presto 等常用处理框架中的原生支持,Iceberg 让组织可以为每项任务选择性能最高的引擎,在不增加成本的情况下加速分析和人工智能计划。
AWS 上的 Apache Iceberg 入门
AWS 提供所有主要云提供商中最广泛的原生 Apache Iceberg 支持,在数据堆栈的每一层都提供与 Iceberg 兼容的服务,因此您可以构建最适合您的业务的开放数据架构。 从流式传输、摄取和专门构建的存储到数据处理、SQL 分析、人工智能/机器学习和治理,您可以为开放 Iceberg 架构奠定开放、高性能和值得信赖的基础。
第一步通常是确定使用案例。对于许多组织来说,这可能如下所示:
- 数据湖现代化:从传统 Hive 表或专有格式迁移到人工智能就绪型 Iceberg 数据湖和湖仓架构,无需停机或重写数据。AWS 提供就地迁移路径,因此您的团队可以在工作负载保持运行的同时逐步实现现代化。
- 人工智能/机器学习基础:为人工智能模型和智能体提供受治理、带版本控制的生产数据访问能力,并内置数据沿袭、精细的访问控制和时间旅行。团队无需构建自定义基础设施,即可重现训练运行、审计智能体行为并在需要时进行回滚。
- 元数据统一和成本降低:停止管理断开连接的目录中的元数据。集中关键元数据,以获得可信、全面的数据资产视图,并消除冗余数据副本和复杂的 ETL 系统。
- PB 级分析:对数 PB 的 Iceberg 数据运行交互式查询,而无需将其移入仓库。由于多个引擎都可以安全地从同一个表中进行读取,因此分析师和数据工程师无需复制数据即可为每个工作负载选择正确的引擎。
下一步
有关构建 Iceberg 架构(包括迁移模式、存储优化、目录配置和治理设置)的分步指南,请参阅 AWS 规范指引:使用 Apache Iceberg on AWS。
适用于 Apache Iceberg 的 AWS 数据和分析服务
注意
找到今天要查找的内容了吗?
请提供您的意见,以便我们改进网页内容的质量