Amazon Glue 作业参数 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon Glue 作业参数

创建 Amazon Glue 作业时,需要设置一些标准字段,例如 RoleWorkerType。您可以通过 Argument 字段(控制台中的作业参数)提供其他配置信息。在这些字段中,您可以为 Amazon Glue 作业提供本主题中列出的自变量(参数)。有关 Amazon Glue Job API 的更多信息,请参阅 任务

设置作业参数

您可以在控制台的 Job details(作业详细信息)选项卡的 Job Parameters(作业参数)标题下配置作业。还可以设置作业上的 DefaultArgumentsNonOverridableArguments 或作业运行上的 Arguments,通过 Amazon CLI 配置作业。每次运行作业时,都会传入在作业上设置的参数,而在作业运行中设置的参数将仅在单独运行时传入。

例如,以下是运行作业的语法,使用 --arguments 设置作业参数。

$ aws glue start-job-run --job-name "CSV to CSV" --arguments='--scriptLocation="s3://my_glue/libraries/test_lib.py"'

访问作业参数

在编写 Amazon Glue 脚本时,您可能需要访问作业参数值来改变自己代码的行为。我们在库中提供了执行此操作的辅助方法。这些方法可以解析覆盖作业参数值的作业运行参数值。解析在多个位置设置的参数时,作业 NonOverridableArguments 将覆盖作业运行 Arguments,这将覆盖作业 DefaultArguments

在 Python 中:

在 Python 作业中,我们提供了一个名为 getResolvedParameters 的函数。有关更多信息,请参阅 使用 getResolvedOptions 访问参数sys.argv 变量中有作业参数。

在 Scala 中:

在 Scala 作业中,我们提供了一个名为 GlueArgParser 的对象。有关更多信息,请参阅 Amazon Glue Scala GlueArgParser APIsysArgs 变量中有作业参数。

作业参数参考

Amazon Glue 可识别多个参数名称,这些参数名称可用于设置作业和作业运行的脚本环境:

--additional-python-modules

以逗号分隔的列表,表示要安装的一组 Python 包。您可以从 PyPI 安装包,也可以提供自定义分发。PyPI 包条目的格式为 package==version,带有目标包的 PyPI 名称和版本。自定义分发条目是到分发的 S3 路径。

条目使用 Python 版本匹配以匹配包和版本。这意味着您需要使用两个等号,例如 ==。还有其他版本匹配运算符,有关更多信息,请参阅 PEP 440

要将模块安装选项传递给 pip3,请使用 --python-modules-installer-option 参数。

--auto-scale-within-microbatch

默认值为 False。此参数只能用于 Amazon Glue 流式处理作业,该作业以一系列微批批次流式处理数据,并且必须启用自动扩缩。将此值设置为 false 时,它会计算已完成的微批次的批次持续时间的指数移动平均值,并将该值与窗口大小进行比较,以确定是纵向扩展还是缩减执行程序数量。只有在微批次完成时才会进行扩展。将此值设置为 true 时,在微批批次期间,当 Spark 任务数在 30 秒内保持不变,或者当前批处理大于窗口大小时,它会纵向扩展。如果执行程序闲置超过 60 秒,或者批处理持续时间的指数移动平均线很低,则执行程序的数量将下降。

--class

用作 Scala 脚本之入口点的 Scala 类。仅在 --job-language 设置为 scala 时适用。

--continuous-log-conversionPattern

为已启用连续日志记录的作业指定自定义转换日志模式。转换模式仅适用于驱动程序日志和执行程序日志。它不会影响 Amazon Glue 进度条。

--continuous-log-logGroup

为启用持续 CloudWatch 日志记录的任务指定自定义 Amazon 日志组名称。

--continuous-log-logStreamPrefix

为启用持续 CloudWatch 日志记录的作业指定自定义日志流前缀。

--customer-driver-env-vars--customer-executor-env-vars

这些参数分别在操作系统上为每个工作程序(驱动程序或执行器)设置环境变量。在 Amazon Glue 之上构建平台和自定义框架时,你可以使用这些参数,让你的用户在上面写作业。启用这两个标志将允许您在驱动程序和执行器上分别设置不同的环境变量,而不必在作业脚本本身中注入相同的逻辑。

示例用法

以下是使用这些参数的示例:

"—customer-driver-env-vars", "CUSTOMER_KEY1=VAL1,CUSTOMER_KEY2=\"val2,val2 val2\"", "—customer-executor-env-vars", "CUSTOMER_KEY3=VAL3,KEY4=VAL4"

在 job run 参数中设置这些值等同于运行以下命令:

在驱动程序中:

  • 导出 customer_KEY1=VAL1

  • 导出 customer_key2= “val2,val2 val2"

在遗嘱执行者中:

  • 导出 customer_KEY3=VAL3

然后,在作业脚本本身中,您可以使用os.environ.get("CUSTOMER_KEY1")或检索环境变量System.getenv("CUSTOMER_KEY1")

强制语法

定义环境变量时,请遵守以下标准:

  • 每个密钥都必须有CUSTOMER_ prefix.

    例如:fo "CUSTOMER_KEY3=VAL3,KEY4=VAL4" r,KEY4=VAL4将被忽略而不设置。

  • 每个键和值对都必须用一个逗号分隔。

    例如:"CUSTOMER_KEY3=VAL3,CUSTOMER_KEY4=VAL4"

  • 如果 “值” 包含空格或逗号,则必须在引号中定义。

    例如:CUSTOMER_KEY2=\"val2,val2 val2\"

此语法与设置 bash 环境变量的标准非常接近。

--datalake-formats

Amazon Glue 3.0 及更高版本支持

指定要使用的数据湖框架。AmazonGlue 会将您指定的框架所需的 JAR 文件添加到 classpath 中。有关更多信息,请参阅 在 Amazon Glue ETL 任务中使用数据湖框架

您可以指定以下一个或多个值,用逗号分隔:

  • hudi

  • delta

  • iceberg

例如,传递以下参数以指定所有三个框架。

'--datalake-formats': 'hudi,delta,iceberg'
--disable-proxy-v2

禁用服务代理以允许对 Amazon S3 的Amazon服务调用 CloudWatch,以及通过您的 VPC 从您的脚本Amazon Glue发起的服务调用。有关更多信息,请参阅将 Amazon 调用配置为通过您的 VPC。要禁用服务代理,请将此参数的值设置为 true

--enable-auto-scaling

此值设置为 true 时,将打开自动扩缩和按工件计费的功能。

--enable-continuous-cloudwatch-log

允许对 Amazon Glue 作业进行实时的连续日志记录。您可以查看 CloudWatch 中的实时 Apache Spark 作业日志。

--enable-continuous-log-filter

在创建或编辑为连续日志记录启用的作业时,指定标准筛选器 (true) 或无筛选器 (false)。选择标准筛选器可筛选掉无用的 Apache Spark 驱动程序/执行程序和 Apache Hadoop YARN 检测信号日志消息。选择无筛选器可提供所有日志消息。

--enable-glue-datacatalog

支持您将 Amazon Glue Data Catalog 用作 Apache Spark Hive 元存储。要启用此功能,请将值设置为 true

--enable-job-insights

启用通过 Amazon Glue 作业运行洞察进行额外的错误分析监控。有关更多信息,请参阅 通过 Amazon Glue 任务运行洞察进行监控。默认情况下,该值将设置为 true,并将启用任务运行洞察。

此选项仅可用于 Amazon Glue 版本 2.0 和 3.0。

--enable-metrics

为此作业运行启用作业分析指标的集合。这些指标可在Amazon Glue控制台和 Amazon CloudWatch 控制台上找到。此参数的值无关紧要。要启用此功能,您可以为该参数提供任意值,但为了清楚起见,建议使用 true。要禁用此功能,请从作业配置中移除此参数。

--enable-observability-metrics

启用一组可观测性指标,以深入了解 Amazon Glue 控制台和 Amazon CloudWatch 控制台下的“作业运行监测”页面上运行的每个作业内发生的情况。要启用此功能,请将值设置为 true。要禁用此功能,将其设置为 false 或从作业配置中移除此参数。

--enable-rename-algorithm-v2

将 EMRFS 重命名算法版本设置为版本 2。当 Spark 任务使用动态分区覆盖模式时,可能会创建重复分区。例如,您最终可以得到 s3://bucket/table/location/p1=1/p1=1 之类的重复分区。在此处,P1 是被覆盖的分区。重命名算法版本 2 可以解决此问题。

此选项仅适用于 Amazon Glue 版本 1.0。

--enable-s3-parquet-optimized-committer

启用经 EMRFS S3 优化的提交程序,用于将 Parquet 数据写入 Amazon S3。您可以在创建或更新 Amazon Glue 作业时通过 Amazon Glue 控制台提供参数/值对。将值设置为 true 将启用提交程序。默认情况下,该标志在 Amazon Glue 3.0 中处于打开状态,在 Amazon Glue 2.0 中处于关闭状态。

有关更多信息,请参阅使用经 EMRFS S3 优化的提交程序

--enable-spark-ui

当设置为 true 时,打开该功能以使用 Spark UI 监控和调试 Amazon Glue ETL 任务。

--executor-cores

可以并行运行的 Spark 任务数量。Amazon Glue 3.0+ 支持此选项。该值不能超过工作线程类型上 vCPU 数量的 2 倍,即 G.1X 上为 8、G.2X 上为 16、G.4X 上为 32,G.8X 上为 64。更新此配置时应谨慎行事,因为它可能会影响作业性能,因为任务并行度增加会导致内存和磁盘面临压力,并可能限制源系统和目标系统(例如:这将导致 Amazon RDS 上更多的并发连接)。

--extra-files

在执行脚本之前 Amazon Glue 复制到脚本工作目录中的其他文件(如配置文件)的 Amazon S3 路径。多个值必须是以逗号(,)分隔的完整路径。仅支持单个文件而不是目录路径。Python Shell 作业类型不支持此选项。

--extra-jars

在执行脚本之前 Amazon Glue 添加到 Java .jar 路径中的其他 Java 文件的 Amazon S3 路径。多个值必须是以逗号(,)分隔的完整路径。

--extra-py-files

在执行脚本之前 Amazon Glue 添加到 Python 路径中的其他 Python 模块的 Amazon S3 路径。多个值必须是以逗号(,)分隔的完整路径。仅支持单个文件而不是目录路径。

--job-bookmark-option

控制作业书签的行为。可以设置以下选项值。

‑‑job‑bookmark‑option 值 描述
job-bookmark-enable 追踪以前处理数据。当作业运行时,处理自上一个检查点以来的新数据。
job-bookmark-disable 始终处理整个数据集。您负责管理上一个作业运行的输出。
job-bookmark-pause 处理上次成功运行以来的增量数据或以下子选项标识的范围内的数据,但不更新最后一个书签的状态。您负责管理上一个作业运行的输出。这两个子选项的说明如下:
  • job-bookmark-from <from-value> 是运行 ID,它表示在最后一次成功运行之前所处理的所有输入,包括指定的运行 ID。对应的输入将被忽略。

  • job-bookmark-to <to-value> 是运行 ID,它表示在最后一次成功运行之前所处理的所有输入,包括指定的运行 ID。作业会处理对应的输入(不包括由 <from-value> 标识的输入)。任何晚于此输入的输入也会被排除在外,不进行处理。

指定此选项集时,作业书签状态不更新。

子选项是可选的。但是,在使用时,必须提供两个子选项。

例如,要启用作业书签,请传递以下参数。

'--job-bookmark-option': 'job-bookmark-enable'
--job-language

脚本编程语言。此值必须为 scalapython。如果此参数不存在,默认值为 python

--python-modules-installer-option

纯文本字符串,它定义了在使用 --additional-python-modules 安装模块时要传递给 pip3 的选项。像在命令行中一样提供选项,用空格分隔这些选项并以短划线作为前缀。有关使用情况的更多信息,请参阅 使用 pip 在 Amazon Glue 2.0+ 中安装其他 Python 模块

注意

当使用 Python 3.9 时,Amazon Glue 作业不支持此选项。

--scriptLocation

ETL 脚本所在的 Amazon Simple Storage Service(Amazon S3)位置(采用格式 s3://path/to/my/script.py)。此参数会覆盖 JobCommand 对象中设置的脚本位置。

--spark-event-logs-path

指定 Amazon S3 路径。使用 Spark UI 监控功能时,Amazon Glue 会每 30 秒刷新 Spark 事件日志到 Amazon S3 路径的存储桶,该存储桶可用作存储 Spark UI 事件的临时目录。

--TempDir

指定可用作任务的临时目录的存储桶的 Amazon S3 路径。

例如,要设置临时目录,请传递以下参数。

'--TempDir': 's3-path-to-directory'
注意

如果区域中尚不存在存储桶,则 Amazon Glue 会为任务创建临时存储桶。此存储桶可能允许公开访问。您可以修改 Amazon S3 中的存储桶以设置公开访问数据块,也可以在该区域中的所有任务完成之后删除存储桶。

--use-postgres-driver

将此值设置为 true 时,系统会优先考虑类路径中的 Postgres JDBC 驱动程序,以避免与 Amazon Redshift JDBC 驱动程序发生冲突。此选项仅适用于 Amazon Glue 版本 2.0。

--user-jars-first

将此值设置为 true 时,系统会优先考虑类路径中客户的额外 JAR 文件。此选项仅适用于 Amazon Glue 版本 2.0 或更高版本。

--conf

控制 Spark 配置参数。适用于高级使用案例。

--encryption-type

传统参数。应使用安全配置来配置相应的行为。有关安全配置的更多信息,请参阅 加密 Amazon Glue 写入的数据

Amazon Glue 在内部使用以下参数,您永远不要使用它们:

  • --debug - 供 Amazon Glue 内部使用。请勿设置。

  • --mode - 供 Amazon Glue 内部使用。请勿设置。

  • --JOB_NAME - 供 Amazon Glue 内部使用。请勿设置。

  • --endpoint - 供 Amazon Glue 内部使用。请勿设置。

Amazon Glue 支持使用 Python 的 site 模块引导环境,使用 sitecustomize 执行特定于站点的自定义。建议仅在高级用例中引导您自己的初始化函数,Amazon Glue 4.0 支持尽力而为。

环境变量前缀 GLUE_CUSTOMER 保留给客户使用。