什么是 Apache Iceberg?
Apache Iceberg 是一种分布式、社区驱动、Apache 2.0 许可的 100% 开源数据表格式,有助于简化存储在数据湖中的大型数据集的数据处理。数据工程师之所以使用 Apache Iceberg,是因为该技术在任何规模下都快速、高效、可靠,并且会记录数据集如何随时间变化。Apache Iceberg 可轻松与常用的数据处理框架集成,例如 Apache Spark、Apache Flink、Apache Hive、Presto 等。
什么是交易性数据湖?
数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据。数据事务是在单个操作中进行的一系列数据交换。例如,当客户从银行账户提款时,银行在一次数据事务中同时进行多次数据交换,包括验证账户是否有足够的余额、验证身份以及从账户中扣除提款。事务性数据湖是一种数据湖类型,不仅可以大规模存储数据,还支持事务性操作,确保数据的准确性和一致性,并允许您跟踪数据和数据结构如何随着时间的推移而变化。这些特性统称为原子性、一致性、隔离性和耐久性 (ACID):
- 原子性保证每个事务都是完全成功或完全失败的单一事件;不存在中间状态。
- 一致性确保根据数据湖的定义规则,写入的所有数据都是有效的,从而确保数据的准确性和可靠性。
- 隔离性确保多个事务可以同时发生而不会相互干扰,从而确保每个事务独立执行。
- 耐久性意味着事务提交后,数据不会丢失或损坏。发生系统故障(例如停电)时,可以恢复数据。
使用 Apache Iceberg 有哪些好处?
使用 Apache Iceberg 处理事务性数据湖的一些主要好处包括:
- 常用的 SQL:结构化查询语言 (SQL) 是一种常用的查询语言,经常用于各类应用程序。数据分析师和开发人员之所以学习和使用 SQL,是因为它可以很好地与不同的编程语言集成,而且由于在语句中使用常见的英语关键字,因此学习起来也相当容易。通过 Apache Iceberg,任何熟悉结构化查询语言 (SQL) 的人员无需学习新语言即可构建数据湖并执行大多数数据湖操作。
- 数据一致性:Apache Iceberg 提供数据一致性,以确保读取和写入数据的任何用户看到的数据都相同。
- 数据结构:Apache Iceberg 允许轻松更改您的数据结构,也称为架构演变,这意味着用户可以在不中断基础数据的情况下在数据表中添加、重命名或删除列。
- 数据版本控制:Apache Iceberg 支持数据版本控制,允许用户跟踪数据随时间推移而发生的变化。这启用了时间旅行功能,该功能允许用户访问和查询数据的历史版本,并分析数据在更新和删除之间的变化。
- 跨平台支持:Apache Iceberg 支持各种不同的存储系统和查询引擎,包括 Apache Spark、Apache Hive 和 Presto。这使用户可以在各种不同的数据处理环境中轻松使用 Iceberg。
- 增量处理:Iceberg 支持增量处理,它允许用户仅处理自上次运行以来发生变化的数据,也称为 CDC(更改数据捕获)。这可以帮助提高数据处理的效率和性能。
Apache Iceberg 的常见用例有哪些?
Apache Iceberg 适用于许多数据湖用例,包括:
- 数据湖中需要经常删除的数据表,例如在执行数据隐私法时。
- 数据湖中需要记录级别更新的数据表。这在数据结算后需要频繁更新数据集的情况下很有用,例如,销售数据可能会因客户退货等后续事件而发生变化。Iceberg 提供了无需重新发布整个数据集即可更新单个记录的功能。
- 数据湖中具有不可预测变化的数据表,例如维度缓慢变化 (SCD) 表。SCD 的一个示例是客户记录表,其中包含姓名、位置和联系信息,这些信息可能会随着时间的推移以未知的时间间隔发生变化。
- 当与数据湖相关的事务需要保证数据有效性、持久性和可靠性时,可以部署 Apache Iceberg 表格式来确保 ACID 事务。
- 当需要回溯查询数据的历史版本以执行趋势分析、分析一段时间内的数据更改,或者恢复或回滚到以前的版本以纠正问题时。
谁会使用 Apache iceberg?
使用 Apache Iceberg 的角色包括数据工程师、数据管理员、数据分析师和数据科学家。 数据工程师和管理员可以使用 Apache Iceberg 来设计和构建可扩展的数据存储系统。 数据分析师和数据科学家可以使用 Apache Iceberg 高效分析大型数据集。
为什么应该选择 Apache Iceberg?
Apache Iceberg 提供了一种快速、高效的方式来大规模处理大型数据集。它具有以下优势:
- 开源:Apache Iceberg 是一个开源项目,这意味着它可以免费使用并根据您的特定需求进行自定义。它还拥有一个活跃的开发者社区,他们正在不断改进项目并为其添加新功能。
- 可扩展性:Apache Iceberg 旨在高效处理大型数据集。它可以跨多个节点对数据进行分区和组织,这有助于分配工作负载并加快数据处理。
- 性能:Apache Iceberg 具有多种优化查询性能的功能,包括列式存储和压缩技术,如谓词下推和架构演变。
- 灵活性:Apache Iceberg 允许您更改数据的组织方式,使其可以随着时间的推移而发展,无需您重写查询或重建数据结构。它还支持多种数据格式和数据来源,因此可与现有系统集成。
- 可靠性:Apache Iceberg 通过对事务处理的支持来确保数据的一致性和可靠性。您可以跟踪数据随时间推移而发生的变化,并回滚到历史版本以帮助您纠正问题。
哪些 AWS 服务支持 Iceberg?
Apache Iceberg 支持热门的数据处理框架,例如 Apache Spark、Apache Flink、Apache Hive 和 Presto。Amazon Redshift、Amazon Athena、Amazon EMR 和 AWS Glue 等 AWS 服务对包括 Apache Iceberg 在内的事务性数据湖框架提供原生支持。Apache Iceberg 与受支持的 AWS 服务相结合,可以实现事务性数据湖,该数据湖通常基于 S3 中的存储。
- Amazon Redshift 是一项完全托管的、基于人工智能的 SQL 分析和数据仓库服务,可快速、经济高效地推动客户制定业务决策。Amazon Redshift 提供具有零 ETL 功能的大规模并行处理(MPP)、多集群和无服务器架构,可通过数据共享推动近乎实时的分析和 AI/ML 应用场景。客户可以使用 Amazon Redshift 查询数据湖中的 Apache Iceberg 表,通过 AWS Glue Data Catalog 进行访问,并将其与数据仓库中的表连接,以进行全面分析。
- Amazon Athena 是一项基于开源框架的无服务器交互式分析服务,支持开源表和文件格式。Athena 提供了一种简化、灵活的方法来分析包含它的 PB 级数据。Athena 为 Apache Iceberg 表的读取、时间旅行、写入和 DDL 查询提供原生支持,这些表的数据采用 Apache Parquet 格式,为元存储使用 AWS Glue 目录。
- Amazon EMR 是一个大数据解决方案,适用于使用开源框架(如 Apache Spark、Hadoop、Presto 和 Hive)进行 PB 级数据处理、交互分析和机器学习。从 Amazon EMR 6.5.0 开始,您可以在 Amazon EMR 集群上使用 ceberg 表格式的 Apache Spark 3 版本。包括 Spark、Trino、Flink 和 Hive 在内的 EMR 框架支持 Apache Iceberg。
- AWS Glue 是一项无服务器数据集成服务,它简化了发现、准备、移动和集成来自多个来源的数据以进行分析、机器学习(ML)和应用程序开发的工作。 AWS Glue 3.0 及更高版本支持数据湖的 Apache Iceberg 框架。您可以使用 AWS Glue 对 Amazon S3 中的 Iceberg 表执行读写操作,也可以使用 AWS Glue Data Catalog 处理 Iceberg 表。该服务还支持其他操作,包括插入、更新和所有 Spark 查询、Spark 写入。