本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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 版本原生支持事务性数据湖格式,例如 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 版本 0.13.1 创建客户连接器,请执行以下步骤:
-
将文件
iceberg-spark-runtime-3.1_2.12-0.13.1.jar
bundle-2.17.161.jar
、和上传url-connection-client-2.17.161.jar
到 Amazon S3 存储桶。您可以从相应的 Apache Maven 存储库中下载这些文件。 -
在AWS Glue Studio 控制台
上,创建自定义 Spark 连接器: -
在导航窗格中,选择数据连接。(如果您使用的是旧版导航,请选择 “连接器”、“创建自定义连接器”。)
-
在 “连接器” 框中,选择 “创建自定义连接器”。
-
在 “创建自定义连接器” 页面上:
-
指定 Amazon S3 中 JAR 文件的路径。
-
输入连接器的名称。
-
选择 Spark 作为连接器类型。
-
在类名中,指定使用
format
运算符加载 Spark 数据源时使用的完全限定数据源类名(或其别名)。 -
(可选)提供连接器的描述。
-
-
3. 选择 Create connector (创建连接器)。
在中使用连接器时 AWS Glue,必须为连接器创建连接。连接包含连接到特定数据存储所需的属性。您将使用与 ETL 任务中的数据源和数据目标的连接。连接器和连接协同工作,方便访问数据存储。
要使用您创建的自定义 Iceberg 连接器创建连接,请执行以下操作:
-
在AWS Glue Studio 主机
上,选择您的自定义 Iceberg 连接器。 -
按照提示提供详细信息,例如您的 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.jar
、url-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-impl
为org.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 网页用户界面监控作业。