在 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 和 5.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" }

--datalake-formats中的iceberg配置对 AWS Glue 应于基于您的版本的特定 Iceberg AWS Glue 版本:

AWS Glue 版本 默认 Iceberg 版本

5.0

1.7.1

4.0

1.0.0

3.0

0.13.1

使用自定义 Iceberg 版本

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

在实现自定义 Iceberg 版本之前,请查看 AWS Glue 文档的AWS Glue 版本部分,以验证与您的 AWS Glue 环境的兼容性。例如, AWS Glue 5.0 需要与 Spark 3.5.4 兼容。

例如,要运行使用 Iceberg 版本 1.9.1 的 AWS Glue 作业,请按照以下步骤操作:

  1. 获取所需的 JAR 文件并将其上传到亚马逊 S3:

    1. 从 Apache Maven 存储库中下载 iceberg-spark-runtime-3.5_2.12-1.9.1.jar 和-1.9.1.j ar。iceberg-aws-bundle

    2. 将这些文件上传到您指定的 S3 存储桶位置(例如s3://your-bucket-name/jars/)。

  2. 按如下方式为 AWS Glue 作业设置作业参数:

    1. --extra-jars参数中指定两个 JAR 文件的完整 S3 路径,用逗号分隔它们(例如,s3://your-bucket-name/jars/iceberg-spark-runtime-3.5_2.12-1.9.1.jar,s3://your-bucket-name/jars/iceberg-aws-bundle-1.9.1.jar)。

    2. 请勿包含 iceberg 作为 --datalake-formats 参数的值。

    3. 如果您使用 AWS Glue 5.0,则必须将--user-jars-first参数设置为true

Iceberg 的 Spark 配置 AWS Glue

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

%glue_version 5.0 %%configure { "--conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions...", "--datalake-formats" : "iceberg" }

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

  • <catalog_name>是你的 Iceberg Spark 会话目录名称的名称。将其替换为您选择的名称,并记得更改与该目录关联的所有配置中的引用。在您的代码中,您可以使用完全限定的表名(包括 Spark 会话目录名称)来引用 Iceberg 表,如下所示:

    <catalog_name>.<database_name>.<table_name>

    或者,您可以将默认目录更改为通过设置spark.sql.defaultCatalog目录名称来定义的 Iceberg 目录。您可以使用第二种方法来引用不带目录前缀的表,这样可以简化查询。

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

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

例如,如果您有一个名为的目录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.type=glue" }

或者,您可以使用代码将上述配置添加到 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.type", "glue") \ .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 版本 — Iceberg AWS Glue 的原生集成最适合入门 Iceberg。但是,对于生产工作负载,我们建议您添加库依赖项(如本指南前面所述),以完全控制 Iceberg 版本。这种方法可以帮助您在 AWS Glue 工作中受益于最新的 Iceberg 功能和性能改进。

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