

# 在 AWS Glue 作业中使用作业参数
<a name="aws-glue-programming-etl-glue-arguments"></a>

创建 AWS Glue 作业时，需要设置一些标准字段，例如 `Role` 和 `WorkerType`。您可以通过 `Argument` 字段（控制台中的**作业参数**）提供其他配置信息。在这些字段中，您可以为 AWS Glue 作业提供本主题中列出的自变量（参数）。

 有关 AWS Glue Job API 的更多信息，请参阅 [作业](aws-glue-api-jobs-job.md)。

**注意**  
 作业参数的最大大小限制为 260KB。如果参数大小大于 260KB，验证检查将会引发错误。



## 设置作业参数
<a name="w2aac37c11b8c11"></a>

您可以在控制台的 **Job details**（作业详细信息）选项卡的 **Job Parameters**（作业参数）标题下配置作业。还可以设置作业上的 `DefaultArguments` 或 `NonOverridableArguments` 或作业运行上的 `Arguments`，通过 AWS CLI 配置作业。每次运行作业时，都会传入在作业上设置的参数，而在作业运行中设置的参数将仅在单独运行时传入。

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

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

## 访问作业参数
<a name="w2aac37c11b8c13"></a>

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

**在 Python 中：**

在 Python 作业中，我们提供了一个名为 `getResolvedParameters` 的函数。有关更多信息，请参阅 [使用 `getResolvedOptions` 访问参数](aws-glue-api-crawler-pyspark-extensions-get-resolved-options.md)。`sys.argv` 变量中有作业参数。

**在 Scala 中：**

在 Scala 作业中，我们提供了一个名为 `GlueArgParser` 的对象。有关更多信息，请参阅 [AWS Glue Scala GlueArgParser API](glue-etl-scala-apis-glue-util-glueargparser.md)。`sysArgs` 变量中有作业参数。

## 作业参数参考
<a name="job-parameter-reference"></a>

**AWS Glue 可识别下列参数名称，您可以使用这些参数名称来设置作业和作业运行的脚本环境：**

**`--additional-python-modules`**  
 以逗号分隔的列表，表示要安装的一组 Python 包。您可以从 PyPI 安装包，也可以提供自定义分发。PyPI 包条目的格式为 `package==version`，带有目标包的 PyPI 名称和版本。自定义分发条目是到分发的 S3 路径。  
条目使用 Python 版本匹配以匹配包和版本。这意味着您需要使用两个等号，例如 `==`。还有其他版本匹配运算符，有关更多信息，请参阅 [PEP 440](https://peps.python.org/pep-0440/#version-matching)。  
要将模块安装选项传递给 `pip3`，请使用 [--python-modules-installer-option](#python-modules-installer-option) 参数。

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

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

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

**`--continuous-log-logGroup`**  
为已启用连续日志记录的任务指定自定义 Amazon CloudWatch 日志组名称。

**`--continuous-log-logStreamPrefix`**  
 为已启用连续日志记录的任务指定自定义 CloudWatch 日志流前缀。

**`--customer-driver-env-vars` 和 `--customer-executor-env-vars`**  
这些参数将在操作系统中分别为每个工作线程（驱动程序或执行程序）设置环境变量。在 AWS Glue 上构建平台和自定义框架时，可以使用这些参数来允许用户在其上写入作业。启用这两个标志后，可为驱动程序和执行程序分别设置不同的环境变量，而不必在作业脚本本身中注入相同的逻辑。  
**示例用法**  
以下是使用这些参数的示例：

```
"—customer-driver-env-vars", "CUSTOMER_KEY1=VAL1,CUSTOMER_KEY2=\"val2,val2 val2\"",
"—customer-executor-env-vars", "CUSTOMER_KEY3=VAL3,KEY4=VAL4"
```
在作业运行参数中设置这些值等同于运行以下命令：  
在驱动程序中：  
+ export CUSTOMER\$1KEY1=VAL1
+ export CUSTOMER\$1KEY2="val2,val2 val2"
在执行程序中：  
+ export CUSTOMER\$1KEY3=VAL3
然后在作业脚本本身中，您可以使用 `os.environ.get("CUSTOMER_KEY1")` 或 `System.getenv("CUSTOMER_KEY1")` 来检索环境变量。  
**强制实施语法**  
定义环境变量时应遵循以下标准：
+ 每个键必须具有 `CUSTOMER_ prefix`。

  例如：对于 `"CUSTOMER_KEY3=VAL3,KEY4=VAL4"`，`KEY4=VAL4` 将被忽略并且不会设置。
+ 每个键和值对都必须用一个逗号分隔。

  例如：`"CUSTOMER_KEY3=VAL3,CUSTOMER_KEY4=VAL4"`
+ 如果“值”包含空格或逗号，则必须用引号括起来。

  例如：`CUSTOMER_KEY2=\"val2,val2 val2\"`
此语法与设置 bash 环境变量的标准非常接近。

**`--datalake-formats` **  
AWS Glue 3.0 及更高版本支持  
指定要使用的数据湖框架。AWSGlue 会将您指定的框架所需的 JAR 文件添加到 `classpath` 中。有关更多信息，请参阅 [在 AWS Glue ETL 任务中使用数据湖框架](aws-glue-programming-etl-datalake-native-frameworks.md)。  
您可以指定以下一个或多个值，用逗号分隔：  
+ `hudi`
+ `delta`
+ `iceberg`
例如，传递以下参数以指定所有三个框架。  

```
'--datalake-formats': 'hudi,delta,iceberg'
```

**`--disable-proxy-v2`**  
 禁用服务代理，以允许通过 VPC 从您的脚本发起对 Amazon S3、CloudWatch 和 AWS Glue 的 AWS 服务调用。有关更多信息，请参阅[将 AWS 调用配置为通过您的 VPC](https://docs.aws.amazon.com/glue/latest/dg/connection-VPC-disable-proxy.html)。要禁用服务代理，请将此参数的值设置为 `true`。

**`--enable-auto-scaling`**  
此值设置为 `true` 时，将打开自动扩缩和按工件计费的功能。

**`--enable-continuous-cloudwatch-log`**  
为 AWS Glue 作业启用实时连续日志记录。您可以查看 CloudWatch 中的实时 Apache Spark 任务日志。

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

**`--enable-glue-datacatalog`**  
支持您将 AWS Glue Data Catalog 用作 Apache Spark Hive 元存储。要启用此功能，请将值设置为 `true`。

**`--enable-job-insights`**  
启用通过 AWS Glue 作业运行洞察进行额外的错误分析监控。有关更多信息，请参阅 [通过 AWS Glue 任务运行洞察进行监控](monitor-job-insights.md)。默认情况下，该值将设置为 `true`，并将启用任务运行洞察。  
此选项仅适用于 AWS Glue 版本 2.0 和 3.0。

**`--enable-lakeformation-fine-grained-access`**  
为 AWS Glue 作业启用精细访问控制。有关更多信息，请参阅 [将 AWS Glue 与 AWS Lake Formation 结合使用以进行精细访问控制](security-lf-enable.md)。

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

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

**`--enable-rename-algorithm-v2`**  
将 EMRFS 重命名算法版本设置为版本 2。当 Spark 任务使用动态分区覆盖模式时，可能会创建重复分区。例如，您最终可以得到 `s3://bucket/table/location/p1=1/p1=1` 之类的重复分区。在此处，P1 是被覆盖的分区。重命名算法版本 2 可以解决此问题。  
此选项仅适用于 AWS Glue 版本 1.0。

**`--enable-s3-parquet-optimized-committer`**  
启用经 EMRFS S3 优化的提交程序，用于将 Parquet 数据写入 Amazon S3。您可以在创建或更新 AWS Glue 任务时通过 AWS Glue 控制台提供参数/值对。将值设置为 **true** 将启用提交程序。默认情况下，该标志在 AWS Glue 3.0 中处于打开状态，在 AWS Glue 2.0 中处于关闭状态。  
有关更多信息，请参阅[使用经 EMRFS S3 优化的提交程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-optimized-committer.html)。

**`--enable-spark-ui`**  
设置为 `true` 时，将会开启该功能以使用 Spark UI 监控和调试 AWS Glue ETL 作业。

**`--executor-cores`**  
可以并行运行的 Spark 任务数量。AWS Glue 3.0\$1 支持此选项。该值不能超过 Worker 类型上 vCPU 数量的 2 倍，即 `G.1X` 上为 8、`G.2X` 上为 16、`G.4X` 上为 32、`G.8X` 上为 64、`G.12X` 上为 96、`G.16X` 上为 128；以及 `R.1X` 上为 8、`R.2X` 上为 16、`R.4X` 上为 32、`R.8X` 上为 64。更新此配置时应谨慎行事，因为它可能会影响作业性能，因为任务并行度增加会导致内存和磁盘面临压力，并可能限制源系统和目标系统（例如：这将导致 Amazon RDS 上更多的并发连接）。

**`--extra-files`**  
AWS Glue 在执行脚本之前会复制到驱动程序节点上的脚本工作目录的其他文件（如配置文件）的 Amazon S3 路径。多个值必须是以逗号（`,`）分隔的完整路径。该值可以是单个文件，也可以是目录位置。Python Shell 作业类型不支持此选项。

**`--extra-jars`**  
AWS Glue 会复制到驱动程序和执行程序的其他文件的 Amazon S3 路径。AWS在执行脚本之前，Glue 还会将这些文件添加到 Java 类路径中。多个值必须是以逗号（`,`）分隔的完整路径。扩展名无需是 `.jar`

**`--extra-py-files`**  
AWS Glue 在执行脚本之前添加到驱动程序节点上的 Python 路径中的其他 Python 模块的 Amazon S3 路径。多个值必须是以逗号（`,`）分隔的完整路径。仅支持单个文件而不是目录路径。

**`--job-bookmark-option`**  
控制作业书签的行为。可以设置以下选项值。    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html)
例如，要启用作业书签，请传递以下参数。  

```
'--job-bookmark-option': 'job-bookmark-enable'
```

**`--job-language`**  
脚本编程语言。此值必须为 `scala` 或 `python`。如果此参数不存在，默认值为 `python`。

**`--python-modules-installer-option`**  
纯文本字符串，它定义了在使用 [--additional-python-modules](#additional-python-modules) 安装模块时要传递给 `pip3` 的选项。像在命令行中一样提供选项，用空格分隔这些选项并以短划线作为前缀。有关使用情况的更多信息，请参阅 [使用 pip 在 AWS Glue 2.0 或更高版本中安装其他 Python 模块](aws-glue-programming-python-libraries.md#addl-python-modules-support)。  
当使用 Python 3.9 时，AWS Glue 作业不支持此选项。

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

**`--spark-event-logs-path`**  
指定 Amazon S3 路径。使用 Spark UI 监控功能时，AWS Glue 会每 30 秒刷新 Spark 事件日志到 Amazon S3 路径的存储桶，该存储桶可用作存储 Spark UI 事件的临时目录。

**`--TempDir`**  
指定可用作任务的临时目录的存储桶的 Amazon S3 路径。  
例如，要设置临时目录，请传递以下参数。  

```
'--TempDir': 's3-path-to-directory'
```
如果某个区域中尚不存在任何存储桶，AWS Glue 将为作业创建临时存储桶。此存储桶可能允许公开访问。您可以修改 Amazon S3 中的存储桶以设置公开访问数据块，也可以在该区域中的所有任务完成之后删除存储桶。

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

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

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

**`--encryption-type`**  
传统参数。应使用安全配置来配置相应的行为。有关安全配置的更多信息，请参阅 [加密 AWS Glue 写入的数据](encryption-security-configuration.md)。

AWS Glue 在内部使用以下参数，您永远不要使用它们：
+ `--debug` – 供 AWS Glue 内部使用。请勿设置。
+ `--mode` – 供 AWS Glue 内部使用。请勿设置。
+ `--JOB_NAME` – 供 AWS Glue 内部使用。请勿设置。
+ `--endpoint` – 供 AWS Glue 内部使用。请勿设置。



## 
<a name="w2aac37c11b8c17"></a>

 AWS Glue 支持使用 Python 的 `site` 模块来引导环境，该模块使用 `sitecustomize` 执行特定于站点的自定义。建议仅在高级应用场景中引导您自己的初始化函数，AWS Glue 4.0 只能尽力支持。

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