在 Apache Iceberg 中工作 AWS Glue - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Apache Iceberg 中工作 AWS Glue

AWS Glue是一项无服务器数据集成服务,可以更轻松地发现、准备、移动和集成来自多个来源的数据,用于分析、机器学习 (ML) 和应用程序开发。的核心功能之一 AWS Glue 是它能够以简单且经济实惠的方式执行提取、转换和加载 (ETL) 操作。这有助于对数据进行分类、清理、丰富数据,并在各种数据存储和数据流之间可靠地移动数据。 

AWS Glue 作业使用 Apache Spark 或 Pyth on 运行时封装定义转换逻辑的脚本。 AWS Glue 作业既可以在批处理模式下运行,也可以在流式传输模式下运行。 

在中创建 Iceberg 作业时 AWS Glue,根据的版本 AWS Glue,您可以使用原生 Iceberg 集成或自定义 Iceberg 版本将 Iceberg 依赖项附加到该作业。

使用原生 Iceberg 集成

AWS Glue 3.0 和 4.0 版本原生支持事务性数据湖格式,例如 Spark 中的 Apache Iceberg、Apache Hudi 和 Linux Foundation Delta Lake。 AWS Glue 此集成功能简化了开始在中使用这些框架所需的配置步骤 AWS Glue。

要为您的 AWS Glue 作业启用 Iceberg 支持,请设置作业:为您的 AWS Glue 作业选择任务详细信息选项卡,滚动到 “高级属性” 下的 “作业参数”,然后将密钥设置为,其值设置为iceberg--datalake-formats

如果您使用笔记本创作作业,则可以使用以下%%configure魔术在第一个笔记本单元格中配置参数:

%%configure { "--conf" : <job-specific Spark configuration discussed later>, "--datalake-formats" : "iceberg" }

使用自定义 Iceberg 版本

在某些情况下,您可能需要保留对任务的 Iceberg 版本的控制权,并按照自己的节奏对其进行升级。例如,升级到更高版本可以解锁对新功能和性能增强的访问权限。要将特定的 Iceberg 版本与配合使用 AWS Glue,您可以使用自定义连接器或自己的 JAR 文件。

使用自定义连接器

AWS Glue 支持连接器,这些连接器是可选的代码包,可帮助访问中的数据存储 AWS Glue Studio。您可以订阅中的连接器 AWS Marketplace,也可以创建自定义连接器。

注意

AWS Marketplace 提供了 Apache Iceberg 连接器 AWS Glue 但是,我们建议您改用自定义连接器,以保持对 Iceberg 版本的控制。

例如,要为 Iceberg 版本 0.13.1 创建客户连接器,请执行以下步骤:

  1. 将文件iceberg-spark-runtime-3.1_2.12-0.13.1.jarbundle-2.17.161.jar、和上传url-connection-client-2.17.161.jar到 Amazon S3 存储桶。您可以从相应的 Apache Maven 存储库中下载这些文件。

  2. AWS Glue Studio 控制台上,创建自定义 Spark 连接器:

    1. 在导航窗格中,选择数据连接。(如果您使用的是旧版导航,请选择 “连接器”、“创建自定义连接器”。)

    2. 在 “连接器” 框中,选择 “创建自定义连接器”。

    3. 在 “创建自定义连接器” 页面上:

      • 指定 Amazon S3 中 JAR 文件的路径。

      • 输入连接器的名称。

      • 选择 Spark 作为连接器类型。

      • 类名中,指定使用format运算符加载 Spark 数据源时使用的完全限定数据源类名(或其别名)。

      • (可选)提供连接器的描述。

3. 选择 Create connector (创建连接器)

在中使用连接器时 AWS Glue,必须为连接器创建连接。连接包含连接到特定数据存储所需的属性。您将使用与 ETL 任务中的数据源和数据目标的连接。连接器和连接协同工作,方便访问数据存储。

要使用您创建的自定义 Iceberg 连接器创建连接,请执行以下操作:

  1. AWS Glue Studio 主机上,选择您的自定义 Iceberg 连接器。

  2. 按照提示提供详细信息,例如您的 VPC 和任务所需的其他网络配置,然后选择 C reate connection

现在,您可以在 AWS Glue ETL 作业中使用该连接。根据您创建任务的方式,有不同的方法可以将连接连接到您的作业:

  • 如果使用创建可视作业 AWS Glue Studio,则可以从 “数据源属性-连接器” 选项卡上的 “连接” 列表中选择连接。

  • 如果你在笔记本中开发作业,请使用%connections魔法来设置连接名称:

    %glue_version 3.0 %connections <name-of-the iceberg-connection> %%configure { "--conf" : "job-specific Spark configurations, to be discussed later", "--datalake-formats" : "iceberg" }
  • 如果您使用脚本编辑器创作作作业,请在作业详细信息选项卡的高级属性其他网络连接下指定连接。 

有关本节中步骤的更多信息,请参阅 AWS Glue 文档 AWS Glue Studio中的使用连接器和连接

带上你自己的 JAR 文件

在中 AWS Glue,您也可以使用 Iceberg,而无需使用连接器。当你想保持对 Iceberg 版本的控制并快速更新它时,这种方法很有用。要使用此选项,请将所需的 Iceberg JAR 文件上传到您选择的 S3 存储桶中,并在 AWS Glue 任务中引用这些文件。例如,如果您使用的是 Iceberg 1.0.0,则所需的 JAR 文件是iceberg-spark-runtime-3.0_2.12-1.0.0.jarurl-connection-client-2.15.40.jar和。bundle-2.15.40.jar您还可以通过将作业的--user-jars-first参数设置为,来确定类路径中其他 JAR 文件的优先级。true

Iceberg 的 Spark 配置 AWS Glue

本节讨论为 Iceberg 数据集创作 AWS Glue ETL 作业所需的 Spark 配置。 您可以使用 --conf Spark 密钥以及以逗号分隔的所有 Spark 配置键和值列表来设置这些配置。你可以使用笔记本中的%%configure魔法,也可以使用 AWS Glue Studio 控制台的 Job 参数部分。

%glue_version 3.0 %connections <name-of-the iceberg-connection> %%configure { "--conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions...", "--datalake-formats" : "iceberg" }

使用以下属性配置 Spark 会话:

  • <catalog_name>是你的 Iceberg Spark 会话目录名称。将其替换为目录名称,并记得更改与该目录关联的所有配置中的参考文献。然后,在你的代码中,你应该使用完全限定的表名来引用 Iceberg 表,包括 Spark 会话目录名称,如下所示:<catalog_name>.<database_name>.<table_name>

  • <catalog_name>.<warehouse>指向您要存储数据和元数据的 Amazon S3 路径。

  • 要使目录成为 AWS Glue Data Catalog,请将设置<catalog_name>.catalog-implorg.apache.iceberg.aws.glue.GlueCatalog。对于任何自定义目录实现,都需要使用此密钥来指向实现类。有关 Iceberg 支持的目录,请参阅本指南后一般最佳实践面的 “一般最佳实践” 部分。

  • 使用 org.apache.iceberg.aws.s3.S3FileIO as 是<catalog_name>.io-impl为了利用 Amazon S3 分段上传实现高并行度。

例如,如果您有一个名为的目录glue_iceberg,则可以使用多个--conf密钥配置作业,如下所示:

%%configure { "‐‐datalake-formats" : "iceberg", "‐‐conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "‐‐conf" : "spark.sql.catalog.glue_iceberg=org.apache.iceberg.spark.SparkCatalog", "‐‐conf" : "spark.sql.catalog.glue_iceberg.warehouse=s3://<your-warehouse-dir>=>/", "‐‐conf" : " spark.sql.catalog.glue_iceberg.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog ", "‐‐conf" : " spark.sql.catalog.glue_iceberg.io-impl=org.apache.iceberg.aws.s3.S3FileIO }

或者,您可以使用代码将上述配置添加到 Spark 脚本中,如下所示:

spark = SparkSession.builder\ .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")\ .config("spark.sql.catalog.glue_iceberg", "org.apache.iceberg.spark.SparkCatalog")\ .config("spark.sql.catalog.glue_iceberg.warehouse","s3://<your-warehouse-dir>/")\ .config("spark.sql.catalog.glue_iceberg.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \ .config("spark.sql.catalog.glue_iceberg.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \ .getOrCreate()

AWS Glue 工作最佳实践

本节提供了调整 Spark 作业 AWS Glue 以优化 Iceberg 表中数据的读取和写入的一般指南。有关 Iceberg 特定的最佳实践,请参阅本指南后面的 “最佳实践” 部分。

  • 尽可能使用最新版本的 AWS Glue 并进行升级 — 新版本 AWS Glue 提供性能改进、启动时间缩短和新功能。它们还支持最新的 Iceberg 版本可能需要的较新 Spark 版本。有关可用 AWS Glue 版本及其支持的 Spark 版本的列表,请参阅AWS Glue 文档

  • 优化 AWS Glue 作业内存-按照 AWS 博客文章 “优化内存管理” 中的建议进行操作 AWS Glue。

  • 使用 AWS Glue Auto Scaling — 启用 Auto Scaling 时, AWS Glue 会根据您的工作负载自动动态调整 AWS Glue 工作人员的数量。这有助于降低高峰负荷期间 AWS Glue 的工作成本,因为当工作量较小且员工处于闲置状态时,可以 AWS Glue 缩减员工人数。要使用 AWS Glue Auto Scaling,您需要指定 AWS Glue 任务可以扩展到的最大工作人员数量。有关更多信息,请参阅 AWS Glue 文档AWS Glue 中的使用 auto sc aling。

  • 使用自定义连接器或添加库依赖项 ——Iceberg AWS Glue 的原生集成最适合入门 Iceberg。但是,对于生产工作负载,我们建议您使用自定义容器或添加库依赖项(如本指南前面所述),以完全控制 Iceberg 版本。这种方法可以帮助您在 AWS Glue 工作中受益于最新的 Iceberg 功能和性能改进。

  • 启用 Spark 用户界面进行监控和调试 — 您还可以使用中的 Spark 用户界面 AWS Glue来检查 Iceberg 作业,方法是在有向无环图 (DAG) 中可视化 Spark 作业的不同阶段并详细监控作业。Spark UI 提供了一种有效的方法来进行故障排除和优化 Iceberg 作业。例如,您可以识别具有大量洗牌或磁盘溢出的瓶颈阶段,以确定调整机会。有关更多信息,请参阅 AWS Glue 文档中的使用 Apache Spark 网页用户界面监控作业