

# 在 Amazon Glue 中为 Spark 作业配置作业属性
<a name="add-job"></a>

当您在 Amazon Glue 控制台中定义任务时，您会提供属性的值来控制 Amazon Glue 的运行时环境。

## 定义 Spark 作业的作业属性
<a name="create-job"></a>

以下列表描述了 Spark 作业的属性。有关 Python Shell 作业的属性，请参阅 [定义 Python shell 作业的作业属性](add-job-python.md#create-job-python-properties)。有关流式处理 ETL 作业的属性，请参阅 [定义串流 ETL 作业的作业属性](add-job-streaming.md#create-job-streaming-properties)。

属性将按照在 Amazon Glue 控制台上的 **Add job (添加任务)** 向导中显示的顺序列出。

**名称**  
提供最大长度为 255 个字符的 UTF-8 字符串。

**说明**  
可选的描述最长为 2048 个字符。

**IAM 角色**  
指定用来为用于运行任务和访问数据存储的资源进行授权的 IAM 角色。有关在 Amazon Glue 中运行作业的权限的更多信息，请参阅 [适用于 Amazon Glue 的 Identity and Access Management](security-iam.md)。

**Type**  
ETL 作业的类型。这将根据您选择的数据来源类型自动设置。  
+ **Spark** 会使用作业命令 `glueetl` 运行 Apache Spark ETL 脚本。
+ **Spark 流式处理**使用作业命令 `gluestreaming` 运行 Apache Spark 流式处理 ETL 脚本。有关更多信息，请参阅 [在 Amazon Glue 中流式处理 ETL 作业](add-job-streaming.md)。
+ **Python Shell** 使用作业命令 `pythonshell` 运行 Python 脚本。有关更多信息，请参阅 [在 Amazon Glue 中为 Python shell 作业配置作业属性](add-job-python.md)。

** Amazon Glue 版本**  
Amazon Glue 版本决定了可用于任务的 Apache Spark 和 Python 的版本，如下表中所述。      
<a name="table-glue-versions"></a>[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/glue/latest/dg/add-job.html)

**语言**  
ETL 脚本中的代码定义了作业的逻辑。该脚本可以用 Python 或 Scala 进行编码。您可以选择作业运行的脚本是由 Amazon Glue 生成还是由您提供。您需要在 Amazon Simple Storage Service（Amazon S3）中提供脚本名称和位置。确认没有与路径中的脚本目录同名的文件。要了解有关编写脚本的更多信息，请参阅 [Amazon Glue 编程指南](edit-script.md)。

**Worker 类型**  
以下工作线程类型可供使用：  
Amazon Glue 工作线程上可用的资源以 DPU 为单位进行衡量。DPU 是对处理能力的相对度量，它由 4 个 vCPU 的计算容量和 16GB 内存组成。  
+ **G.025X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个工作线程映射到 0.25 个 DPU（2 个 vCPU，4GB 内存）和 84GB 磁盘（大约 34GB 可用空间）。我们建议为低容量串流任务使用此 Worker 类型。此工作线程类型仅适用于 Amazon Glue 版本 3.0 或更高版本的流式处理作业。
+ **G.1X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 1 个 DPU（4 个 vCPU，16 GB 内存）和 94 GB 磁盘（大约 44 GB 可用空间）。我们建议将这种工作线程类型用于数据转换、联接和查询等工作负载，以提供一种可扩展且经济实惠的方式来运行大多数作业。
+ **G.2X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 2 个 DPU（8 个 vCPU，32 GB 内存）和 138 GB 磁盘（大约 78 GB 可用空间）。我们建议将这种工作线程类型用于数据转换、联接和查询等工作负载，以提供一种可扩展且经济实惠的方式来运行大多数作业。
+ **G.4X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 4 个 DPU（16 个 vCPU，64 GB 内存）和 256 GB 磁盘（大约 230 GB 可用空间）。对于工作负载包含要求最高的转换、聚合、联接和查询的作业，我们建议使用这种工作线程类型。
+ **G.8X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 8 个 DPU（32 个 vCPU，128 GB 内存）和 512 GB 磁盘（大约 485 GB 可用空间）。对于工作负载包含要求最高的转换、聚合、联接和查询的作业，我们建议使用这种工作线程类型。
+ **G.12X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 12 个 DPU（48 个 vCPU，192 GB 内存）和 768 GB 磁盘（大约 741 GB 可用空间）。对于工作负载非常大、资源密集型且需要大量计算容量的作业，我们建议使用此 Worker 类型。
+ **G.16X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 16 个 DPU（64 个 vCPU，256 GB 内存）和 1024 GB 磁盘（大约 996 GB 可用空间）。对于工作负载最大、资源最密集且需要最大计算容量的作业，我们建议使用此 Worker 类型。
+ **R.1X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 1 个 DPU（配置经过内存优化）。对于经常遇到内存不足错误或需要高内存与 CPU 比率的内存密集型工作负载，我们建议使用此 Worker 类型。
+ **R.2X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 2 个 DPU（配置经过内存优化）。对于经常遇到内存不足错误或需要高内存与 CPU 比率的内存密集型工作负载，我们建议使用此 Worker 类型。
+ **R.4X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 4 个 DPU（配置经过内存优化）。对于经常遇到内存不足错误或需要高内存与 CPU 比率的大型内存密集型工作负载，我们建议使用此 Worker 类型。
+ **R.8X** – 当您选择这种类型时，您还提供了 **Number of workers (工件数量)** 的值。每个 Worker 映射到 8 个 DPU（配置经过内存优化）。对于经常遇到内存不足错误或需要高内存与 CPU 比率的极大内存密集型工作负载，我们建议使用此 Worker 类型。
**Worker 类型规格**  
下表提供所有可用 G Worker 类型的详细规格：    
**G Worker 类型规格**    
<a name="table-worker-specifications"></a>[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/glue/latest/dg/add-job.html)
**重要提示：**G.12X 和 G.16X Worker 类型以及所有 R Worker 类型（R.1X 到 R.8X）均有较高的启动延迟。  
您将根据用于运行 ETL 作业的 DPU 数量按小时支付费用。有关更多信息，请参阅 [Amazon Glue 价格页面](https://www.amazonaws.cn/glue/pricing/)。  
对于 Amazon Glue 版本 1.0 或更低版本的任务，当您使用控制台配置任务并指定 **Standard (标准)** 的 **Worker type (工件类型)** 时，则会设置 **Maximum capacity (最大容量)**，并且 **Number of workers (工件数量)** 会成为 **Maximum capacity (最大容量)** 值 - 1。如果您使用 Amazon Command Line Interface（Amazon CLI）或 Amazon SDK，则您可以指定 **Maximum capacity (最大容量)** 参数，也可以同时指定 **Worker type (工件类型)** 和 **Number of workers (工件数量)**。  
对于 Amazon Glue 2.0 版或更高版本的作业，则不能指定**最大容量**。相反，您应该指定 **Worker type (工件类型)** 和 **Number of workers (工件数量)**。  
**G.4X** 和 **G.8X** 工作线程类型仅适用于以下 Amazon 区域的 Amazon Glue 3.0 或更高版本 Spark ETL 作业：美国东部（俄亥俄州）、美国东部（弗吉尼亚州北部）、美国西部（北加利福尼亚州）、美国西部（俄勒冈州）、亚太地区（孟买）、亚太地区（首尔）、亚太地区（新加坡）、亚太地区（悉尼）、亚太地区（东京）、加拿大（中部）、欧洲地区（法兰克福）、欧洲地区（爱尔兰）、欧洲地区（伦敦）、欧洲（西班牙）、欧洲地区（斯德哥尔摩）和南美洲（圣保罗）。  
**G.12X**、**G.16X** 以及 **R.1X** 至 **R.8X** Worker 类型仅适用于 Amazon Glue 4.0 及更高版本的 Spark ETL 作业，且仅在以下 Amazon 区域可用：美国东部（弗吉尼亚州北部）、美国西部（俄勒冈州）、美国东部（俄亥俄州）、欧洲地区（爱尔兰）和欧洲地区（法兰克福）。未来版本将支持更多区域。

**请求的工作线程数量**  
对于大多数工作线程类型，您必须指定作业运行时分配的工作线程数。

**作业书签**  
指定当作业运行时，Amazon Glue 如何处理状态信息。您可以让它记住之前处理过的数据、更新状态信息或忽略状态信息。有关更多信息，请参阅 [使用作业书签跟踪已处理的数据](monitor-continuations.md)。

**作业运行排队**  
指定作业由于服务配额的原因而无法立即运行时，作业运行是否排队以便稍后运行。  
选中此选项后，将为作业运行启用作业运行排队。如果未填充任何选项，则不会考虑启用作业运行排队。  
如果此设置与作业运行中设置的值不匹配，则将使用作业运行字段中的值。

**Flex 执行**  
使用 Amazon Studio 或 API 配置任务时，您可以指定标准或灵活的任务执行类。您的任务可能具有不同程度的优先级和时间敏感度。标准执行类非常适合需要快速任务启动和专用资源的时间敏感型工作负载。  
灵活的执行类适用于非紧急任务，例如预生产任务、测试和一次性数据加载。使用 Amazon Glue 版本 3.0 或更高版本以及 `G.1X` 或 `G.2X` 工作线程类型的任务支持灵活的任务运行。新的 Worker 类型（`G.12X`、`G.16X` 以及 `R.1X` 至 `R.8X`）不支持灵活执行。  
灵活的任务运行基于在任何时间点运行的工作线程数量计费。对于正在运行的灵活任务运行，可以添加或移除工作线程数。每个工作线程将贡献它在任务运行期间所运行的时间，而不是计费为 `Max Capacity` \$1 `Execution Time` 的简单计算。账单是（`Number of DPUs per worker` \$1 `time each worker ran`）的总和。  
有关更多信息，请参阅 Amazon Studio 或 [作业](aws-glue-api-jobs-job.md) 和 [任务运行](aws-glue-api-jobs-runs.md) 中的帮助面板。

**重试次数**  
指定 Amazon Glue 在失败时自动重新启动任务的次数（从 0 到 10）。达到超时限制的任务不会重新启动。

**作业超时**  
设置最大执行时间 (以分钟为单位)。最大执行时间为 7 天或 10080 分钟。否则，作业会引发异常。  
该值留空时，超时值默认为 2880 分钟。  
任何超时值大于 7 天的现有 Amazon Glue 作业，该值默认为 7 天。例如，若为批处理作业指定了 20 天的超时值，则该作业会在第 7 天停止。  
**有关作业超时的最佳实践**  
作业按执行时间计费。为避免产生意外收费，请配置与作业的预期执行时间相适应的超时值。

**高级属性**    
**脚本文件名**  
作业的唯一脚本名称。不能命名为 **Untitled job**。  
**脚本路径**  
脚本的 Amazon S3 位置。路径必须采用 `s3://bucket/prefix/path/` 格式。它必须以斜杠（`/`）结尾，并且不包含任何文件。  
**作业指标**  
在运行此任务时，启用或禁用 Amazon CloudWatch 指标的创建。要查看分析数据，则必须启用此选项。有关如何启用和可视化指标的更多信息，请参阅 [作业监控和调试](monitor-profile-glue-job-cloudwatch-metrics.md)。  
**作业可观测性指标**  
在此作业运行时开启额外的 CloudWatch 可观测性指标的创建。有关更多信息，请参阅 [使用 Amazon Glue 可观测性指标进行监控](monitor-observability.md)。  
**连续日志记录**  
启用对 Amazon CloudWatch 的持续日志记录。如果未启用此选项，则只有在作业完成后日志才可用。有关更多信息，请参阅 [Amazon Glue 作业的日志记录](monitor-continuous-logging.md)。  
**Spark UI**  
允许使用 Spark UI 监控此任务。有关更多信息，请参阅 [为 Amazon Glue 作业启用 Apache Spark Web UI](monitor-spark-ui-jobs.md)。  
**Spark UI 日志路径**  
启用 Spark UI 时写入日志的路径。  
**Spark UI 日志记录和监控配置**  
请选择以下选项之一：  
+ *标准*：使用 Amazon Glue 作业运行 ID 作为文件名写入日志。在 Amazon Glue 控制台中打开 Spark UI 监控。
+ *旧版*：使用“spark-application-\$1timestamp\$1”作为文件名写入日志。不打开 Spark UI 监控。
+ *标准和旧版*：将日志写入标准位置和旧版位置。在 Amazon Glue 控制台中打开 Spark UI 监控。  
**最大并发数**  
设置此作业允许的并发运行的最大数量。默认 为 1。达到此阈值时，将返回一个错误。可以指定的最大值由服务限制控制。例如，如果在启动新实例时，作业的前一运行仍在运行，则可能需要返回错误以防止同一作业的两个实例同时运行。  
**临时路径**  
在 Amazon S3 中提供工作目录的位置，以便当 Amazon Glue 运行脚本时在该位置写入临时中间结果。确认没有与路径中的临时目录同名的文件。在 Amazon Glue 读取和写入 Amazon Redshift 时使用此目录，或者通过某些 Amazon Glue 转换使用。  
如果区域中尚不存在存储桶，则 Amazon Glue 会为任务创建临时存储桶。此存储桶可能允许公开访问。您可以修改 Amazon S3 中的存储桶以设置公开访问数据块，也可以在该区域中的所有任务完成之后删除存储桶。  
**延迟通知阈值（分钟）**  
设置发送延迟通知之前的阈值（以分钟为单位）。您可以设置此阈值，以在 `RUNNING`、`STARTING` 或 `STOPPING` 任务运行超过预期的分钟数时发送通知。  
**安全配置**  
从列表中选择安全配置。安全配置会指定如何对 Amazon S3 目标上的数据加密：不加密、使用 Amazon KMS 托管式密钥的服务器端加密（SSE-KMS）或者使用 Amazon S3 托管式加密密钥的服务器端加密（SSE-S3）。  
**服务器端加密**  
如果选择此选项，在将 ETL 任务写入 Amazon S3 时，数据将会使用 SSE-S3 加密进行静态加密。Amazon S3 数据目标和任何写入 Amazon S3 临时目录的数据都将被加密。此选项作为作业参数传递。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[借助使用 Amazon S3 托管式加密密钥的服务器端加密 (SSE-S3) 保护数据](https://docs.amazonaws.cn/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。  
如果指定了安全配置，则忽略此选项。  
**使用 Glue 数据目录作为 Hive 元存储**  
选择此项以使用 Amazon Glue 数据目录作为 Hive 元存储。用于任务的 IAM 角色必须具有 `glue:CreateDatabase` 权限。在数据目录中创建一个名为“default”的数据库（如果该数据库不存在）。

**Connections**  
选择一个 VPC 配置来访问位于您的虚拟私有云（VPC）中的 Amazon S3 数据来源。您可以在 Amazon Glue 中创建和管理网络连接。有关更多信息，请参阅 [连接到数据](glue-connections.md)。

**库**    
**Python 库路径、从属 JAR 路径和参考文件路径**  
如果脚本需要这些选项，请指定。当您定义任务时，可以为这些选项定义使用逗号分隔的 Amazon S3 路径。当您运行任务时，可以覆盖这些路径。有关更多信息，请参阅 [提供您自己的自定义脚本](console-custom-created.md)。  
**任务参数**  
作为命名参数传递给脚本的一组键值对。这些是在运行脚本时使用的默认值，但您可以在触发器中或运行任务时覆盖它们。您必须为键名使用前缀 `--`；例如：`--myKey`。使用 Amazon Command Line Interface 时，您可以将任务参数作为映射传递。  
有关示例，请参阅 [在 Amazon Glue 中传递和访问 Python 参数](aws-glue-programming-python-calling.md#aws-glue-programming-python-calling-parameters) 中的 Python 参数。  
**标签**  
使用 **Tag key (标签键)** 和可选的 **Tag value (标签值)** 来标记作业。创建标签键后，它们是只读的。对某些资源使用标签可帮助您整理和标识资源。有关更多信息，请参阅 [Amazon Glue 中的 Amazon 标签](monitor-tags.md)。

## 针对访问 Lake Formation 托管表的作业的限制
<a name="lf-table-restrictions"></a>

在创建针对由 Amazon Lake Formation 托管的表进行读取或写入的任务时，请记住以下注意事项和限制：
+ 使用单元格级筛选条件访问表的任务中，不支持以下功能：
  + [任务书签](https://docs.amazonaws.cn/glue/latest/dg/monitor-continuations.html)和[有界执行](https://docs.amazonaws.cn/glue/latest/dg/bounded-execution.html)
  + [下推谓词](https://docs.amazonaws.cn/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-pushdowns)
  + [服务器端目录分区谓词](https://docs.amazonaws.cn/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates)
  + [enableUpdateCatalog](https://docs.amazonaws.cn/glue/latest/dg/update-from-job.html)