

# 使用 AWS Glue Studio 管理 ETL 任务
<a name="managing-jobs-chapter"></a>

您可以使用 AWS Glue Studio 中的简单图形界面，管理您的 ETL 任务。使用导航菜单，选择 **Jobs (任务)** 查看 **Jobs (任务)** 页面。在此页面上，您可以看到您使用 AWS Glue Studio 或 AWS Glue 控制台创建的所有任务。您可以在此页面上查看、管理和运行您的任务。

**Topics**
+ [启动任务运行](#start-jobs)
+ [计划任务运行](#schedule-jobs)
+ [管理任务计划](#manage-schedules)
+ [停止任务运行](#stop-jobs)
+ [查看您的作业](#view-jobs)
+ [查看最近任务运行的信息](#view-job-run-details)
+ [查看任务脚本](#view-job-script)
+ [修改任务属性](#edit-jobs-properties)
+ [保存任务](#save-job)
+ [克隆任务](#clone-jobs)
+ [删除任务](#delete-jobs)

## 启动任务运行
<a name="start-jobs"></a>

在 AWS Glue Studio 中，您可以按需运行您的任务。任务可以多次运行，每次您运行任务时，AWS Glue 会收集有关任务活动和绩效的信息。此信息称为*任务运行*，由任务运行 ID 标识。

您可以通过以下方式在 AWS Glue Studio 中启动任务：
+ 在 **Jobs (任务)** 页面上，选择要启动的任务，然后选择 **Run job (运行任务)** 按钮。
+ 如果您在可视化编辑器中查看任务并且任务已保存，则可以选择 **Run (运行)** 按钮启动任务运行。

有关任务运行的更多信息，请参阅《AWS Glue 开发人员指南》**中的[在 AWS Glue Glue 控制台上处理任务](https://docs.aws.amazon.com/glue/latest/dg/console-jobs.html)。

## 计划任务运行
<a name="schedule-jobs"></a>

在 AWS Glue Studio 中，您可以创建计划，让您的任务在特定时间运行。您可以指定约束条件，例如任务运行次数、它们在一周中的哪几天运行，以及具体在什么时间运行。这些约束基于 `cron`，与 `cron` 具有相同的限制。例如，如果您选择在每月第 31 天运行您的任务，请记住，有些月份没有 31 天。有关 `cron` 的更多信息，请参阅《AWS Glue 开发人员指南》**中的 [Cron 表达式](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions)。

**按照计划运行任务**

1. 使用以下某种方法创建任务计划：
   + 在 **Jobs (任务)** 页面上，选择要为其创建计划的任务，选择 **Actions (操作)**，然后选择 **Schedule job (计划任务)**。
   + 如果您在可视化编辑器中查看任务并且任务已保存，则选择 **Schedules (计划)** 选项卡。然后，选择 **Create Schedule (创建计划)**。

1. 在 **Schedule job run (计划任务运行)** 页面上，输入以下信息：
   + **Name (名称)**：输入您的任务计划的名称。
   + **Frequency (频率)**：输入任务计划的频率。您可以选择以下选项：
     + **Hourly (每小时)**：任务将每小时运行一次，从特定的分钟开始。您可以指定任务运行小时的具体 **Minute (分钟)**。默认情况下，当您选择每小时时，任务将在小时之初（分钟 0）开始运行。
     + **Daily (每天)**：任务将每天运行，从某个时间开始。您可以指定任务运行小时的具体 **Minute (分钟)** 以及任务的 **Start hour (开始小时)**。小时使用 23 小时制时钟指定，其中您使用数字 13 到 23 表示下午小时。分钟和小时的默认值为 0，这意味着如果您选择 **Daily (每天)**，则默认情况下，任务将在午夜运行。
     + **Weekly (每周)**：任务将在每周的一天或多天内运行。除前面针对“Daily (每天)”介绍的相同设置外，您还可以选择任务运行的具体周时间。您可以选择一天或多天。
     + **Monthly (每月)**：任务将在每月的特定日期运行。除前面针对“Daily (每天)”介绍的相同设置外，您还可以选择任务运行的具体日期。将日期指定为 1 到 31 之间的数值。如果您选择一个月中不存在的日期，例如 2 月 30 日，则任务在该月不会运行。
     + **自定义**：使用 `cron` 语法输入任务计划的表达式。Cron 表达式允许您创建更复杂的计划，例如每月的最后一天（而不是该月的特定日期），或者每三个月的第 7 天和第 21 天。

       请参阅《AWS Glue 开发人员指南》**中的 [Cron 表达式](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions)
   + **Description (描述)**：您可以有选择地为任务计划输入描述。如果您计划为多项任务使用相同的计划，则描述有助于更轻松地确定任务计划的用途。

1. 选择 **Create schedule (创建计划)**，保存任务计划。

1. 创建计划后，控制台页面的顶部会显示一条成功消息。您可以选择此横幅中的 **Job details (任务详细信息)**，查看任务详细信息。这样将打开可视化任务编辑器页面，其中 **Schedules (计划)** 选项卡处于选中状态。

## 管理任务计划
<a name="manage-schedules"></a>

为任务创建计划后，您可以在可视化编辑器中打开任务，然后选择 **Schedules (任务)** 选项卡以管理计划。

在可视化编辑器的 **Schedules (计划)** 选项卡，您可以执行以下任务：
+ 创建新计划

  选择 **Create schedule (创建计划)**，然后输入计划的信息，如 [计划任务运行](#schedule-jobs) 中所述。
+ 编辑现有计划。

  选择要编辑的计划，然后依次选择 **Action (操作)**、**Edit schedule (编辑计划)**。当您选择编辑现有计划时，**Frequency (频率)** 显示为 **Custom (自定义)**，并且计划显示为 `cron` 表达式。您可以修改 `cron` 表达式，也可以使用 **Frequency (频率)** 按钮指定新计划。完成更改后，选择 **Update schedule (更新计划)**。
+ 暂停活动计划。

  选择活动计划，然后依次选择 **Action (操作)**、**Pause schedule (暂停计划)**。计划会立即停用。选择刷新（重新加载）按钮，查看更新的任务计划状态。
+ 恢复暂停的计划。

  选择停用计划，然后依次选择 **Action (操作)**、**Resume schedule (恢复计划)**。计划会立即激活。选择刷新（重新加载）按钮，查看更新的任务计划状态。
+ 删除计划。

  选择要删除的计划，然后依次选择 **Action (操作)**、**Delete schedule (删除计划)**。计划会立即删除。选择刷新（重新加载）按钮，查看更新的任务计划列表。该计划将显示 **Deleting (删除)** 状态，直到它完全删除。

## 停止任务运行
<a name="stop-jobs"></a>

您可以在任务完成任务运行之前将其停止。如果您知道任务未正确配置，或者任务花费太长时间而未完成，则可以选择此选项。

在 **Monitoring (监控)** 页面中的 **Job runs (任务运行)** 列表中，选择要停止的任务，然后依次选择 **Actions (操作)**、**Stop run (停止运行)**。

## 查看您的作业
<a name="view-jobs"></a>

您可以在 **Jobs (任务)** 页面查看您的所有任务。您可以在导航窗格中选择 **Jobs (任务)** 以访问此页面。

在 **Jobs (任务)** 页面上，您可以查看账户中创建的所有任务。**Your jobs (您的任务)** 列表会显示任务名称、类型、上次任务运行的状态，以及任务创建和上次修改的日期。您可以选择任务名称，查看相关任务的详细信息。

您还可以使用监控控制面板查看所有任务。您可以在导航窗格中选择 **Monitoring (监控)** 以访问控制面板。

### 自定义任务显示
<a name="view-jobs-customize"></a>

您可以在 **Jobs (任务)** 页面的 **Your jobs (您的任务)** 部分中自定义任务的显示方式。此外，您可以在搜索文本字段中输入文本，以便仅显示名称包含该文本的任务。

如果选择 **Your jobs (您的任务)** 部分中的设置图标 ![\[\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/manage-console-icon-settings.png)，您可以自定义 AWS Glue Studio 显示表中信息的方式。您可以选择在显示中将文本换行，更改页面上显示的任务数，以及指定要显示的列。

## 查看最近任务运行的信息
<a name="view-job-run-details"></a>

在源位置添加新数据时，任务可以多次运行。每次运行任务时，都会为任务运行分配唯一 ID，并收集有关该任务运行的信息。您可以使用以下方法查看此类信息：
+ 选择可视化编辑器的 **Runs (运行)** 选项卡，查看当前显示的任务的任务运行信息。

  在 **Runs (运行)** 选项卡（**Recent job runs (最近任务运行)** 页面）上，每次任务运行都有一张卡。**Runs (运行)** 选项卡上显示的信息包括：
  + 任务运行 ID
  + 此任务的尝试运行次数
  + 任务运行的状态
  + 任务运行的开始和结束时间
  + 任务运行的运行时
  + 指向任务日志文件的链接
  + 指向任务日志文件的链接
  + 失败任务返回的错误
+ 您可以选择一个任务运行以查看有关任务的其他信息，包括以下信息：
  + **输入参数**
  + **连续日志**
  + **指标** – 您可以直观地查看基本指标。有关所包含指标的更多信息，请参阅 [查看 Spark 作业运行的 Amazon CloudWatch 指标](view-job-runs.md#monitoring-job-run-metrics)。
  + **Spark UI** – 您可以在 Spark UI 中直观地查看任务的 Spark 日志。有关使用 Spark Web UI 的更多信息，请参阅 [使用 Apache Spark Web UI 监控作业](monitor-spark-ui.md)。按照 [为 AWS Glue 作业启用 Apache Spark Web UI](monitor-spark-ui-jobs.md) 中描述的过程启用此功能。

您可以选择**查看详细信息**，以在作业运行详细信息页面上查看类似的信息。您还可以通过**监控**页面导航到作业运行详细信息页面。在导航窗格中，选择 **Monitoring (监控)**。向下滚动到 **Job runs (任务运行)** 列表。选择任务，然后选择 **View run details (查看运行详细信息)**。内容在[查看任务运行的详细信息](view-job-runs.md#monitoring-job-run-details)中有描述。

有关任务日志的更多信息，请参阅[查看任务运行日志](view-job-runs.md#monitoring-job-run-logs)。

## 查看任务脚本
<a name="view-job-script"></a>

提供任务中所有节点的信息后，AWS Glue Studio 会生成任务使用的脚本，用于从源中读取数据、转换数据以及将数据写入目标位置。如果保存任务，您可以随时查看此脚本。

**查看任务生成的脚本**

1. 在导航窗格中，选择 **Jobs (任务)**。

1. 在 **Jobs (任务)** 页面中的 **Your Jobs (您的任务)** 列表中，选择要查看的任务的名称。或者，您可以在列表中选择一项任务，选择 **Actions (操作)** 菜单，然后选择 **Edit job (编辑任务)**。

1. 在可视化编辑器页面上，选择 **Script (脚本)** 选项卡以查看任务任务脚本。

   如果您要编辑任务脚本，请参阅[AWS Glue 编程指南](edit-script.md)。

## 修改任务属性
<a name="edit-jobs-properties"></a>

任务图中的节点定义了任务执行的操作，但也可以为任务配置多个属性。这些属性用于确定任务运行环境、任务使用的资源、阈值设置、安全设置等。

**自定义任务运行环境**

1. 在导航窗格中，选择 **Jobs (任务)**。

1. 在 **Jobs (任务)** 页面中的 **Your Jobs (您的任务)** 列表中，选择要查看的任务的名称。

1. 在可视化编辑器页面上，选择任务编辑窗格顶部的 **Job details (任务详细信息)**。

1. 根据需要修改任务属性。

   有关任务属性的更多信息，请参阅《AWS Glue 开发人员指南》**中的[定义任务属性](https://docs.aws.amazon.com/glue/latest/dg/add-job.html#create-job)。

1. 如果您需要指定以下附加任务属性，则展开 **Advanced properties (高级属性)** 部分：
   + **Script filename (脚本文件名)** – 在 Amazon S3 中存储任务脚本的文件的名称。
   + **Script path (脚本路径)** – 任务脚本的 Amazon S3 存储位置。
   + **Job metrics (任务指标)** –（不适用于 Python Shell 任务）当此任务运行时启用 Amazon CloudWatch 指标创建。
   + **Continuous logging (连续日志记录)** –（不适用于 Python Shell 任务）打开 CloudWatch 的连续日志记录，以便在任务完成之前可以查看日志
   + **Spark UI** 和 **Spark UI logs path (Spark UI 日志路径)** –（不适用于 Python Shell 任务）使用 Spark UI 监控此任务，并指定 Spark UI 日志的位置。
   + **Maximum concurrency (最大并发)** – 设置此任务业允许的并发运行的最大数量。
   + **Temporary path (临时路径)** – 在 Amazon S3 中提供工作目录的位置，以便当 AWS Glue 运行脚本时在该位置写入临时中间结果。
   + **Delay notification threshold (minutes) (延迟通知阈值（分钟）)** – 指定任务的延迟阈值。如果任务运行时间长于阈值指定的时间，则 AWS Glue 将任务的延迟通知发送给 CloudWatch。
   + **Security configuration (安全配置)** 和 **Server-side encryption (服务器端加密)** – 使用这些字段选择任务的加密选项。
   + **Use Glue Data Catalog as the Hive metastore (使用 Glue 数据目录作为 Hive 元存储)** – 选择此选项，如果您要使用 AWS Glue Data Catalog 作为 Apache 蜂巢元数据仓的替代方案。
   + **Additional network connection (附加网络连接)** – 对于 VPC 中的数据源，您可以指定类型为 `Network`，确保您的任务通过 VPC 访问您的数据。
   + **Python library path (Python 库路径)**、**Dependent jars path (从属 jars 路径)**（不适用于 Python Shell 任务）或 **Referenced files path (引用的文件路径)** – 使用这些字段指定任务运行脚本时使用的其他文件的位置。
   + **Job Parameters (任务参数)** – 您可以添加作为命名参数传递给脚本的一组键值对。在 Python 对 AWS Glue API 的调用中，最好按名称显式传递参数。有关在任务脚本中使用参数的更多信息，请参阅《AWS Glue 开发人员指南》**中的[在 AWS Glue 中传递和访问 Python 参数](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-calling.html#aws-glue-programming-python-calling-parameters)。
   + **Tags (标签)** – 您可以将标签添加到任务，帮助您组织和识别它们。

1. 修改任务属性后，保存任务。

### 将 Spark 随机播放文件存储在 Amazon S3 上
<a name="configure-shuffle"></a>

某些 ETL 任务需要读取和合并来自多个分区的信息，例如，在使用连接转换时。此操作称为*随机排序*。在随机排序过程中，数据会写入磁盘并通过网络传输。借助 AWS Glue 3.0 版，您可以将 Amazon S3 配置为这些文件的存储位置。AWS Glue 提供一个随机播放管理器，用于在 Amazon S3 中写入和读取随机文件。与本地磁盘（或者针对 Amazon EC2 进行了严格优化的 Amazon EBS）相比，从 Amazon S3 写入和读取随机放置文件的速度较慢（降低 5%-20%）。不过，Amazon S3 提供无限存储容量，因此您不必担心“`No space left on device`”错误运行您的任务。

**将您的任务配置为使用 Amazon S3 对文件进行随机排序**

1. 在 **Jobs (任务)** 页面中的 **Your Jobs (您的任务)** 列表中，选择要修改的任务的名称。

1. 在可视化编辑器页面上，选择任务编辑窗格顶部的 **Job details (任务详细信息)**。

   向下滚动到 **Job parameters (任务参数)** 部分。

1. 指定以下键/值对。
   + `--write-shuffle-files-to-s3` — `true`

     这是用于配置 AWS Glue 中随机排序管理器的主要参数，使用 Amazon S3 存储桶来写入和读取随机数据。此参数的默认值为 `false`。
   + （可选）`--write-shuffle-spills-to-s3` – `true`

     此参数允许您将溢出文件卸载到 Amazon S3 存储桶，从而为AWS Glue。只有将大量数据溢出到磁盘的大型工作负载才需要这样做。此参数的默认值为 `false`。
   + （可选）`--conf spark.shuffle.glue.s3ShuffleBucket` – `S3://<shuffle-bucket>`

     此参数指定在写入临时排序文件时要使用的 Amazon S3 存储桶。如果未设置此参数，则位置是 `shuffle-data` 文件夹中指定的**临时路径**（`--TempDir`）位置。
**注意**  
确保 Shell 存储桶位于任务运行所在的相同 AWS 区域。  
此外，随机排序服务不会在任务完成运行后清理文件，因此您应该在 Shell 存储桶位置上配置 Amazon S3 存储生命周期策略。有关更多信息，请参阅《Amazon S3 用户指南》**中的[对象生命周期管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)。

## 保存任务
<a name="save-job"></a>

红色 **Job has not been saved (尚未保存任务)** 标注将显示在 **Save (保存)** 按钮左侧，直到您保存任务。

![\[保存按钮左侧带有“Job has not been saved (任务尚未保存)”标签的红色椭圆形。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/edit-graph-callout-not-saved_GA.png)


**保存您的任务**

1. 请在 **Visual (视觉对象)** 和 **Job details (任务详细信息)** 选项卡中提供所有必需的信息。

1. 选择**保存**按钮。

   保存任务后，“not saved (未保存)”标注将更改为显示上次保存任务的时间和日期。

如果您在退出 AWS Glue Studio 时未保存您的任务，您下次登录 AWS Glue Studio 时，会显示通知。通知指示存在未保存的任务，并询问您是否要恢复。如果选择恢复任务，则可以继续对其进行编辑。

### 排查保存任务时的错误
<a name="save-job-troubleshooting"></a>

如果选择 **Save (保存)** 按钮，但您的任务缺少了一些必需的信息，那么缺少信息的选项卡上会出现一个红色标注。标注中的数字表示检测到的缺失字段数。

![\[一个屏幕快照，显示名为“Untitled job (无标题任务)”的任务的可视化编辑器窗格选项卡，在 Visual (视觉对象) 选项卡上标记为 2 的标注，并在 Job details (任务详细信息) 选项卡上标记为 1 的标注。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/screenshot-save-job-error-in-graph-GA2.png)

+ 如果可视编辑器中的节点配置不正确，则 **Visual (视觉对象)** 选项卡显示红色标注，出现错误的节点显示警告符号 ![\[A red triangle with an exclamation point in the center\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/edit-graph-warning_icon.png)。

  1. 选择节点。在节点详细信息面板中，缺少信息或不正确信息所在的选项卡上会显示一个红色标注。

  1. 在节点详细信息面板中选择显示红色标注的选项卡，然后找到突出显示的问题字段。字段下面的错误消息提供了有关问题的其他信息。  
![\[显示任务编辑器中 Visual (视觉对象) 选项卡的屏幕截图，该选项卡标记为 2。将选中带有警告标签的数据源节点。在节点详细信息面板中，Data source properties (数据源属性) 选项卡具有标记为 2 的标注，并处于选中状态。Database (数据库) 和 Table (表) 两个字段以红色列出，下面有一些消息，指示这些字段中需要一个值。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/screenshot-save-job-error-in-graph2.png)
+ 如果任务属性存在问题，则 **Job details (任务详细信息)** 选项卡显示红色标注。选择该选项卡并找到突出显示的问题字段。字段下面的错误消息提供了有关问题的其他信息。  
![\[显示任务编辑器中 Job details (任务详细信息) 选项卡的屏幕截图，该选项卡标记为 1。“IAM Role (IAM 角色)”字段以红色列出，下面有一条消息，指示值是必需的。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/screenshot-save-job-error-in-job-details.png)

## 克隆任务
<a name="clone-jobs"></a>

您可以使用 **Clone job (克隆任务)** 操作将现有任务复制到新任务。

**通过复制现有任务创建新任务**

1. 在 **Jobs (任务)** 页面中的 **Your jobs (您的任务)** 列表中，选择要复制的任务。

1. 从 **Actions (操作)** 菜单中，选择 **Clone job (克隆任务)**。

1. 输入新任务的名称。然后，您可以保存或编辑任务。

## 删除任务
<a name="delete-jobs"></a>

您可以删除不再需要的任务。您可以在单个操作中删除一个或多个任务。

**要从 AWS Glue Studio 中删除任务**

1. 在 **Jobs (任务)** 页面中的 **Your jobs (您的任务)** 列表中，选择要删除的任务。

1. 从 **Actions (操作)** 菜单中选择 **Delete job (删除任务)**。

1. 验证您要删除任务，方法是输入 **delete**。

在可视化编辑器中查看任务的 **Job details (任务详细信息)** 选项卡时，也可以删除保存的任务。