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

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

在 Amazon Glue 中添加作业

Amazon Glue 作业将封装连接到源数据的脚本,处理该脚本,然后将其写入数据目标。通常,作业运行提取、转换和加载 (ETL) 脚本。作业还可以运行通用 Python 脚本(Python shell 作业)。Amazon Glue 触发器 可以根据计划或事件或者按需启动作业。您可以监控作业运行以了解运行时指标(例如完成状态、持续时间和开始时间)。

您可以使用 Amazon Glue 生成的脚本,也可以提供您自己的脚本。借助源架构和目标位置或架构,Amazon Glue代码生成器可以自动创建 Apache Spark API(PySpark)脚本。您可以将此脚本用作起点,并对其进行编辑以满足您的目标。

Amazon Glue 可以用多种数据格式编写输出文件,包括 JSON、CSV、ORC(优化的行列式)、Apache Parquet 和 Apache Avro。对于某些数据格式,可以编写常见的压缩格式。

Amazon Glue 中有三种类型的作业:SparkStreaming ETLPython shell

  • Spark 任务会在由 Amazon Glue 托管的 Apache Spark 环境中执行。它将批量处理数据。

  • 流式处理 ETL 作业与 Spark 作业类似,只不过前者在数据流上执行 ETL。它使用 Apache Spark Structured Streaming 框架。某些 Spark 作业功能不可用于流式处理 ETL 作业。

  • Python shell 任务将 Python 脚本作为 shell 运行,支持的 Python 版本具体取决于您使用的 Amazon Glue 版本。您可以使用这些作业来计划和运行不需要 Apache Spark 环境的任务。

定义 Spark 作业的作业属性

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

以下列表描述了 Spark 作业的属性。有关 Python Shell 作业的属性,请参阅 定义 Python shell 作业的作业属性。有关流式处理 ETL 作业的属性,请参阅 定义串流 ETL 作业的作业属性

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

名称

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

IAM 角色

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

类型

指定要运行的作业环境的类型:

  • 选择 Spark 以使用作业命令 glueetl 运行 Apache Spark ETL 脚本。

  • 选择 Spark Streaming (Spark 流式处理) 以使用作业命令 gluestreaming 运行 Apache Spark 流式处理 ETL 脚本。有关更多信息,请参阅在 Amazon Glue 中流式处理 ETL 作业

  • 选择 Python shell 以使用作业命令 pythonshell 运行 Python 脚本。有关更多信息,请参阅 Amazon Glue 中的 Python shell 作业

Amazon Glue 版本

Amazon Glue 版本决定了可用于任务的 Apache Spark 和 Python 的版本,如下表中所述。

Amazon Glue 版本 支持的 Spark 和 Python 版本
4.0
  • Spark 3.3.0

  • Python 3.10

3.0
  • Spark 3.1.1

  • Python 3.7

2.0
  • Spark 2.4.3

  • Python 3.7

1.0
  • Spark 2.4.3

  • Python 2.7

  • Python 3.6

0.9
  • Spark 2.2.1

  • Python 2.7

在未指定 Amazon Glue 版本的情况下,创建的任务默认为 Amazon Glue 2.0。

此作业运行(生成的或自定义的脚本)

ETL 脚本中的代码定义了作业的逻辑。该脚本可以用 Python 或 Scala 进行编码。您可以选择作业运行的脚本是由 Amazon Glue 生成还是由您提供。您需要在 Amazon Simple Storage Service(Amazon S3)中提供脚本名称和位置。确认没有与路径中的脚本目录同名的文件。要了解有关编写脚本的更多信息,请参阅在 Amazon Glue 控制台中编辑 Spark 脚本

Scala 类名称

如果脚本用 Scala 编码,则必须提供类名称。Amazon Glue生成的脚本的默认类名是GlueApp

临时目录

在 Amazon S3 中提供工作目录的位置,以便当 Amazon Glue 运行脚本时在该位置写入临时中间结果。确认没有与路径中的临时目录同名的文件。在 Amazon Glue 读取和写入 Amazon Redshift 时使用此目录,或者通过某些 Amazon Glue 转换使用。

注意

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

注意

控制台 Details (详细信息) 选项卡中未列出作业的源和目标。检查脚本以查看源和目标详细信息。

高级属性
作业书签

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

监控选项
作业指标

在运行此任务时,启用或禁用 Amazon CloudWatch 指标的创建建建建。要查看分析数据,则必须启用此选项。有关如何启用和可视化指标的更多信息,请参阅 作业监控和调试

连续日志记录

启用对 Amazon 的持续日志记录记录记录记录记录 CloudWatch。如果未启用此选项,则只有在作业完成后日志才可用。有关更多信息,请参阅 Amazon Glue 任务的连续日志记录

Spark UI

允许使用 Spark UI 监控此任务。有关更多信息,请参阅 为 Amazon Glue 作业启用 Apache Spark Web UI

标签

使用 Tag key (标签键) 和可选的 Tag value (标签值) 来标记作业。创建标签键后,它们是只读的。对某些资源使用标签可帮助您整理和标识资源。有关更多信息,请参阅 Amazon Glue 中的 Amazon 标签

安全配置、脚本库和作业参数
安全配置

从列表中选择安全配置。安全配置会指定如何对 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) 保护数据

重要

如果指定了安全配置,则忽略此选项。

Python 库路径、从属 jar 路径和引用的文件路径

如果脚本需要这些选项,请指定。当您定义任务时,可以为这些选项定义使用逗号分隔的 Amazon S3 路径。当您运行任务时,可以覆盖这些路径。有关更多信息,请参阅 提供您自己的自定义脚本

工作线程类型

以下工作线程类型可供使用:

  • Standard – 当您选择这种类型时,您还提供了 Maximum capacity (最大容量) 的值。最大容量是此作业运行时可分配的 Amazon Glue 数据处理单元 (DPU) 的数量。DPU 是对处理能力的相对度量,它由 4 个 vCPU 的计算容量和 16GB 内存组成。Standard 工作线程类型有一个 50 GB 的磁盘和 2 个执行器。

  • G.1X – 当您选择这种类型时,您还提供了 Number of workers (工件数量) 的值。每个工作线程映射到 1 个 DPU(4 个 vCPU,16 GB 内存,64 GB 磁盘),并且每个工作线程提供 1 个执行器。我们建议内存密集型作业使用该工作线程类型。这是针对 Amazon Glue 2.0 版或更高版本任务的默认工件类型

  • G.2X – 当您选择这种类型时,您还提供了 Number of workers (工件数量) 的值。每个工作线程映射到 2 个 DPU(8 个 vCPU,32 GB 内存,128 GB 磁盘),并且每个工作线程提供 1 个执行器。我们建议将此工件类型用于内存密集型任务和运行机器学习转换的任务。

  • G.025X – 当您选择这种类型时,您还提供了 Number of workers (工件数量) 的值。每个 Worker 映射到 0.25 个 DPU(2 个 vCPU,4 GB 内存,64 GB 磁盘),并且每个 Worker 提供 1 个执行器。我们建议为低容量串流任务使用此 Worker 类型。此 Worker 类型仅适用于 Amazon Glue 版本 3.0 串流任务。

您将根据用于运行 ETL 作业的 DPU 数量按小时支付费用。有关更多信息,请参阅 Amazon Glue 价格页面

对于 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 (工件数量)

对于 2.0 或更高Amazon Glue版本的作业,您无法指定最大容量。相反,您应该指定 Worker type (工件类型)Number of workers (工件数量)。有关更多信息,请参阅任务

工作线程数

对于 G.1X 和 G.2X 工作线程类型,您必须指定作业运行时分配的工作线程数。

执行类

使用 Amazon Studio 或 API 配置任务时,您可以指定标准或灵活的任务执行类。您的任务可能具有不同程度的优先级和时间敏感度。标准执行类非常适合需要快速任务启动和专用资源的时间敏感型工作负载。

灵活的执行类适用于非紧急任务,例如预生产任务、测试和一次性数据加载。使用 Amazon Glue 版本 3.0 或更高版本以及 G.1XG.2X 工作线程类型的任务支持灵活的任务运行。

灵活的任务运行基于在任何时间点运行的工作线程数量计费。对于正在运行的灵活任务运行,可以添加或移除工作线程数。每个工作线程将贡献它在任务运行期间所运行的时间,而不是计费为 Max Capacity * Execution Time 的简单计算。账单是(Number of DPUs per worker * time each worker ran)的总和。

有关更多信息,请参阅 Amazon Studio 或 任务任务运行 中的帮助面板。

最大容量

对于 Amazon Glue 1.0 版或更低版本的任务,请使用标准工件类型,您必须指定此任务运行时可分配的 Amazon Glue 数据处理单元(DPU)的最大数量。您将根据用于运行 ETL 作业的 DPU 数量按小时支付费用。有关更多信息,请参阅 Amazon Glue 价格页面

选择 2 到 100 之间的整数。默认值为 10。此任务类型不能具有小数 DPU 分配。

对于 Amazon Glue 2.0 版或更高版本的任务,则不能指定 Maximum capacity (最大容量)。相反,您应该指定 Worker type (工件类型)Number of workers (工件数量)。有关更多信息,请参阅任务

最大并发数

设置此作业允许的并发运行的最大数量。默认值为 1。达到此阈值时,将返回一个错误。可以指定的最大值由服务限制控制。例如,如果在启动新实例时,作业的前一运行仍在运行,则可能需要返回错误以防止同一作业的两个实例同时运行。

作业超时

设置最大执行时间 (以分钟为单位)。批处理任务的默认值为 2880 分钟(48 小时)。当任务执行时间超过此限制时,任务运行状态更改为 TIMEOUT

对于无限期运行的流式传输任务,请将该值留空,该值是串流任务的默认值。

延迟通知阈值

设置发送延迟通知之前的阈值(以分钟为单位)。您可以设置此阈值,以在 RUNNINGSTARTINGSTOPPING 任务运行超过预期的分钟数时发送通知。

重试次数

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

任务参数

作为命名参数传递给脚本的一组键值对。这些是在运行脚本时使用的默认值,但您可以在触发器中或运行任务时覆盖它们。您必须为键名使用前缀 --;例如:--myKey。使用 Amazon Command Line Interface 时,您可以将任务参数作为映射传递。

有关示例,请参阅在 Amazon Glue 中传递和访问 Python 参数中的 Python 参数。

不可覆盖的任务参数

一组不能在触发器中或运行任务时覆盖的特殊作业参数。这些键值对会作为命名参数传递给脚本。这些值会在运行脚本时使用,并且您不能在触发器中或运行任务时覆盖它们。您必须为键名使用前缀 --;例如 --myKeygetResolvedOptions() 在单个映射中返回任务参数和不可覆盖的作业参数。有关更多信息,请参阅 使用 getResolvedOptions 访问参数

目录选项
使用 Amazon Glue 数据目录作为 Hive 元存储

选择此项以使用 Amazon Glue 数据目录作为 Hive 元存储。用于任务的 IAM 角色必须具有 glue:CreateDatabase 权限。在数据目录中创建一个名为“default”的数据库(如果该数据库不存在)。

数据源

选择数据目录表。

转换类型

选择以下选项之一:

更改架构

ApplyMapping 转换添加到生成的脚本。允许您更改源数据的架构并创建新的目标数据集。

查找匹配的记录

允许您选择机器学习转换,以便在您的源数据中查找匹配的记录。

目标

请执行下列操作之一:

  • 要指定一个 Amazon S3 路径或 JDBC 数据存储库,请选择 Create tables in your data target (在数据目标中创建表)

  • 要指定一个目录表,请选择在数据目录中使用表格并更新您的数据目标

对于 Amazon S3 目标位置,请提供写入输出内容的目录位置。确认没有与路径中的目标路径目录同名的文件。对于 JDBC 目标,如果指定的对象不存在,Amazon Glue 根据需要创建架构对象。

有关如何使用 Amazon Glue 控制台添加任务的更多信息,请参阅 在 Amazon Glue 控制台上处理作业

针对访问 Lake Formation 托管表的作业的限制

在创建针对由 Amazon Lake Formation 托管的表进行读取或写入的任务时,请记住以下注意事项和限制: