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

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

在 AWS Glue 中添加作业

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

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

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

中有三种类型的作业:AWS Glue Spark流式处理 ETLPython shell

  • Spark 作业在由 AWS Glue 托管的 Apache Spark 环境中执行。它将批量处理数据。

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

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

定义作业属性

当您在 AWS Glue 控制台上定义作业时,您会提供属性的值来控制 AWS Glue 运行时环境。

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

这些属性按它们在 控制台上的 Add job (添加作业)AWS Glue 向导中的显示顺序列出。

名称

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

IAM 角色

指定用于对用于运行作业和访问数据存储的资源进行授权的 IAM 角色。有关在 AWS Glue 中运行作业的权限的更多信息,请参阅管理 AWS Glue 资源的访问权限

类型

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

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

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

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

AWS Glue version

AWS Glue 版本确定可用于作业的 Apache Spark 和 Python 版本,如下表所示。

AWS Glue version 支持的 Spark 和 Python 版本
0.9
  • Spark 2.2.1

  • Python 2.7

1.0
  • Spark 2.4.3

  • Python 2.7

  • Python 3.6

2.0
  • Spark 2.4.3

  • Python 3.7

在未指定 AWS Glue 版本的情况下创建的作业默认为 AWS Glue 0.9。

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

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

Scala 类名称

如果脚本用 Scala 编码,则必须提供类名称。生成的脚本的默认类名称为 AWS GlueGlueApp

临时目录

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

注意

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

高级属性
作业书签

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

监控选项
作业指标

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

连续日志记录

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

Spark UI

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

Tags

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

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

从列表中选择安全配置。安全配置指定如何对 Amazon S3 目标上的数据加密:不加密、使用 AWS KMS 托管密钥进行服务器端加密 (SSE-KMS) 或者使用 Amazon S3 托管加密密钥 (SSE-S3)。

服务器端加密

如果选择此选项,当 ETL 作业写入 Amazon S3 时,数据将会使用 SSE-S3 加密进行静态加密。Amazon S3 数据目标和任何写入 Amazon S3 临时目录的数据都将被加密。此选项作为作业参数传递。有关更多信息,请参阅 中的使用具有 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 保护数据。Amazon Simple Storage Service 开发人员指南

重要

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

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

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

工作线程类型

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

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

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

  • G.2X – 当您选择这种类型时,您还提供了工作线程数量值。每个工作线程映射到 2 个 DPU(8 个 vCPU,32 GB 内存,128 GB 磁盘),并且每个工作线程提供 1 个执行器。我们建议内存密集型作业和运行 ML 转换的作业使用该工作线程类型。

将根据用于运行 ETL 作业的 DPUs 数量按小时费率对您收费。有关更多信息,请参阅 AWS Glue 定价页

对于 AWS Glue 版本 1.0 或更早的作业,当您使用控制台配置作业并将 Worker type (工作线程类型) 指定为 Standard (标准) 时,将设置 Maximum capacity (最大容量),并且 Number of workers (工作线程数量) 变为 Maximum capacity (最大容量) - 1 的值。如果您使用 AWS Command Line Interface (AWS CLI) 或 AWS 软件开发工具包,您可以指定最大容量参数,也可以同时指定工作线程类型工作线程数量

对于 AWS Glue 版本 2.0 作业,您无法改为指定 Maximum capacity (最大容量)。相反,您应指定 Worker type (工作人员类型)Number of workers (工作线程数量)。有关更多信息,请参阅作业

工作线程数

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

可定义的工作线程的最大数目是 299(对于 G.1X 而言)和 149(对于 G.2X 而言)。

最大容量

对于 AWS Glue 版本 1.0 或更早的作业,使用标准工作线程类型,您必须指定此作业运行时可分配的 AWS Glue 数据处理单元 (DPU) 的最大数量。DPU 是对处理能力的相对度量,它由 4 vCPUs 的计算容量和 16 GB 内存组成。将根据用于运行 ETL 作业的 DPUs 数量按小时费率对您收费。有关更多信息,请参阅 AWS Glue 定价页面

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

对于 AWS Glue 版本 2.0 作业,您无法改为指定 Maximum capacity (最大容量)。相反,您应指定 Worker type (工作人员类型)Number of workers (工作人员数量)。有关更多信息,请参阅作业

最大并发数

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

作业超时

设置最大执行时间 (以分钟为单位)。默认为 2880 分钟。如果此限制大于执行时间,则作业运行状态更改为“TIMEOUT”(超时)。

延迟通知阈值

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

重试次数

指定 AWS Glue 在失败时自动重新启动作业的次数(从 0 到 10)。

作业参数

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

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

不可覆盖的作业参数

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

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

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

数据源

选择一个 Data Catalog 表。

转换类型

选择以下选项之一:

更改架构

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

查找匹配的记录

使您可以选择机器学习转换,用来在您的源数据中查找匹配的记录。

目标

请执行下列操作之一:

  • 要指定一个 Amazon S3 路径或 JDBC 数据存储库,请选择在您的数据目标内创建表格

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

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

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