亚马逊AWS官方博客

AWS Glue for Apache Spark:原生支持 Apache Hudi、Delta Lake 和 Apache Iceberg(第 1 部分)

AWS Glue 是一种无服务器的、可扩展的数据集成服务,可用于更轻松地发现、准备、移动和集成来自多个来源的数据。AWS Glue 提供了一个可扩展的架构,使得用户能够应对不同的数据处理使用场景。

一个常见的使用场景是使用 AWS Glue 提取、转换、加载(ETL,Extract, Transform, and Load)作业,在 Amazon Simple Storage Service(Amazon S3)上构建数据湖。通过数据湖,您可以摆脱商业智能(BI)工具定义的专有数据格式以及有限的专有存储容量。此外,数据湖可帮助您打破数据孤岛,实现最大程度的端到端数据洞察力。随着数据湖规模的增长及其使用上的成熟,需要采用事务上一致的方式来确保更新了文件,这样会花费大量的精力来使数据保持最新。

AWS Glue 客户现在可以使用以下开源数据湖存储框架:Apache Hudi、Linux Foundation Delta Lake 和 Apache Iceberg。这些数据湖框架帮助您存储数据并将数据传送给应用程序和框架。尽管 Apache Parquet、CSV 和 JSON 等常用数据文件格式可以存储大数据,但数据湖框架会将分布式大数据文件捆绑成表格式结构,否则这些文件将难于管理。这使数据湖表框架成为了数据湖上数据库的构建结构。

我们宣布在 AWS Glue for Spark 上正式提供对 Apache Hudi、Linux Foundation Delta Lake 和 Apache Iceberg 的原生支持。推出此功能后,再也无需安装单独的连接器或关联依赖项,也无需管理版本,并简化了在 AWS Glue for Apache Spark 中使用这些框架所需的配置步骤。借助这些开源数据湖框架,您可以使用 ACID(Atomicity, Consistency, Isolation, Durability,原子性、一致性、隔离性、持久性)事务、更新插入和删除来简化在 Amazon S3 上构建的数据湖中的增量数据处理。

这篇文章说明了 AWS Glue for Apache Spark 如何使用 Hudi、Delta 和 Iceberg 数据集表,并描述了有关 AWS Glue Studio 笔记本的典型使用场景。

在 Glue for Apache Spark 中启用 Hudi、Delta 和 Iceberg

您可以通过指定新的作业参数 --datalake-formats 来使用 Hudi、Delta 或 Iceberg。例如,如果要使用 Hudi,则需要将键指定为 --datalake-formats,将值指定为 hudi。如果设置此选项,AWS Glue 会自动将所需的 JAR 文件添加到运行时 Java 类路径中,这就是您需要的一切。您无需构建和配置所需的库或安装单独的连接器。通过此选项可以使用以下库版本。

AWS Glue 版本 Hudi Delta Lake Iceberg
AWS Glue 3.0 0.10.1 1.0.0 0.13.1
AWS Glue 4.0 0.12.1 2.1.0 1.0.0

如果要使用上述库的其他版本,可以选择以下任一选项:

如果您选择上述任一选项,则需要确保未指定 --datalake-formats 作业参数。有关更多信息,请参阅 Process Apache Hudi, Delta Lake, Apache Iceberg datasets at scale, part 1: AWS Glue Studio Notebook(大规模处理 Apache Hudi、Delta Lake、Apache Iceberg 数据集,第 1 部分:AWS Glue Studio 笔记本)。

先决条件

要继续本教程,您需要预先创建以下 AWS 资源:

在 AWS Glue Studio 笔记本上处理 Hudi、Delta 和 Iceberg 数据集

AWS Glue Studio 笔记本提供了只需最少设置的无服务器笔记本。数据工程师和开发人员利用它能够以交互式方式,快速探索和处理他们的数据集。要在 AWS Glue Studio 笔记本中开始使用 Hudi、Delta 或 Iceberg,您可以通过 %%configure 魔法命令指定参数并将 AWS Glue 版本设置为 3.0,如下所示:

# Use Glue version 3.0
%glue_version 3.0

# Configure '--datalake-formats' Job parameter
%%configure
{
  "--datalake-formats": "your_comma_separated_formats"
}

有关更多信息,请参阅 GitHub 存储库中提供的示例笔记本:

在这篇文章中,我们以 Iceberg DataFrame 为例。

以下部分说明如何使用 AWS Glue Studio 笔记本创建 Iceberg 表并将记录附加到表中。

启动 Jupyter notebook 来处理 Iceberg 表

完成以下步骤可启动 AWS Glue Studio 笔记本:

  1. 下载 Jupyter notebook 文件
  2. 在 AWS Glue 控制台上,在导航面板中选择 Jobs(作业)。
  3. Create job(创建作业)下,选择 Jupyter Notebook

  1. 选择 Upload and edit an existing notebook(上传和编辑现有笔记本)。
  2. 通过 File upload(文件上传)下的 Choose file(选择文件)来上传 native_iceberg_dataframe.ipynb

  1. 选择 Create(创建)。
  2. 对于 Job name(作业名称),输入 native_iceberg_dataframe
  3. 对于 IAM Role(IAM 角色),选择您的 IAM 角色。
  4. 选择 Start notebook job(启动笔记本作业)。

使用 Iceberg 配置来准备和配置 SparkSession

完成以下步骤,配置 SparkSession 来处理 Iceberg 表:

  1. 运行以下单元。

可以看到 --datalake-formats iceberg 是由 %%configure Jupyter 魔法命令设置的。有关 Jupyter 魔法命令的更多信息,请参阅为 Jupyter 和 AWS Glue Studio 笔记本配置 AWS Glue 交互式会话

  1. 在以下单元中,提供 Iceberg 表位置的 S3 存储桶名称和存储桶前缀,然后运行它。

  1. 运行以下单元来初始化 SparkSession。

  1. (可选)如果之前已运行笔记本,则需要运行以下单元来清理现有资源。

现在可以使用笔记本创建 Iceberg 表。

创建 Iceberg 表

完成以下步骤,使用笔记本创建 Iceberg 表:

  1. 运行以下单元来创建要写入的 DataFrame(df_products)。

如果成功,则会显示下表。

  1. 运行以下单元,使用 DataFrame 创建 Iceberg 表。

  1. 现在可以运行以下单元,从 Iceberg 表中读取数据。

将记录附加到 Iceberg 表

完成以下步骤,将记录附加到 Iceberg 表:

  1. 运行以下单元来创建要附加的 DataFrame(df_products_appends)。

  1. 运行以下单元以将记录附加到表。

  1. 运行以下单元以确认前面的记录已成功附加到表。

清理

为避免产生持续费用,请清理您的资源:

  1. 运行本文的使用 Iceberg 配置来准备和配置 SparkSession 部分中的步骤 4,删除表和基础 S3 对象。
  2. 在 AWS Glue 控制台上,在导航面板中选择 Jobs(作业)。
  3. 选择您的作业,然后在 Actions(操作)菜单上,选择 Delete job(s)(删除作业)。
  4. 选择 Delete(删除)进行确认。

注意事项

借助这项功能,您可以通过三个不同的选项来访问 Hudi、Delta 和 Iceberg 表:

  • Spark DataFrames,例如 spark.read.format("hudi").load("s3://path_to_data")
  • SparkSQL,例如 SELECT * FROM table
  • GlueContext,例如 create_data_frame.from_catalogwrite_data_frame.from_cataloggetDataFramewriteDataFrame

有关更多信息,请参阅在 AWS Glue 中使用 Hudi 框架在 AWS Glue 中使用 Delta Lake 框架在 AWS Glue 中使用 Iceberg 框架

对于 AWS Glue 爬网程序从原生 Delta Lake 表创建的目录表,Delta Lake 原生集成可以与之结合使用。这种集成不依赖清单文件。有关更多信息,请参阅 Introducing native Delta Lake table support with AWS Glue crawlers(引入 AWS Glue 爬网程序对原生 Delta Lake 表的支持)。

小结

这篇文章说明了如何使用 AWS Glue for Apache Spark 处理 Apache Hudi、Delta Lake、Apache Iceberg 数据集。您可以使用这些数据湖格式轻松集成数据,而不必疲于管理库依赖项。

在本系列的后续文章中,我们将向您说明如何使用 AWS Glue Studio 对这些数据湖格式进行更简单的配置和设置,直观地创作 ETL 作业,以及如何使用 AWS Glue 工作流编排数据管道,并通过 AWS Glue 作业自动摄取到 Amazon S3 上的数据湖。请保持关注!


关于作者

Akira Ajisaka 是 AWS Glue 团队的高级软件开发工程师。他热爱开源软件和分布式系统。业余时间,他喜欢玩街机和主机游戏。

Noritaka Sekiyama 是 AWS Glue 团队的首席大数据架构师。他负责构建软件构件来帮助客户。业余时间,他喜欢带着新公路自行车去骑行。

Savio Dsouza 是 AWS Glue 团队的软件开发经理。他的团队致力于分布式计算系统和框架的构建和创新,也就是 Apache Spark。