本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Apache Iceberg 中工作 AWS Glue
AWS Glue
AWS Glue 作业使用 Apache Spark 或 Pyth
在中创建 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 作业,请按照以下步骤操作:
-
获取所需的 JAR 文件并将其上传到亚马逊 S3:
-
按如下方式为 AWS Glue 作业设置作业参数:
-
在
--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
)。 -
请勿包含
iceberg
作为--datalake-formats
参数的值。 -
如果您使用 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>.type
为glue
。对于任何自定义目录实现,都需要使用此密钥来指向实现类。有关 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 网页用户界面监控作业。