

AWS Data Pipeline 不再向新客户提供。的现有客户 AWS Data Pipeline 可以继续照常使用该服务。[了解详情](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

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

# 使用任务运行程序
<a name="dp-using-task-runner"></a>

 Task Runner 是一个任务代理应用程序，它轮询 AWS Data Pipeline 计划任务并在 Amazon EC2 实例、Amazon EMR 集群或其他计算资源上执行这些任务，并在运行时报告状态。根据您的应用程序，您可以选择：
+  AWS Data Pipeline 允许为您安装和管理一个或多个 Task Runner 应用程序。激活管道后，将自动创建活动 runsOn 字段引用的默认值`Ec2Instance`或`EmrCluster`对象。 AWS Data Pipeline 负责在 EC2 实例或 EMR 集群的主节点上安装任务运行器。在这种模式下， AWS Data Pipeline 可以为您完成大部分实例或集群管理。
+ 在您管理的资源上运行管道的全部或部分内容。可能的资源包括长时间运行的 Amazon EC2 实例、Amazon EMR 集群或物理服务器。你几乎可以在任何地方安装任务运行器（可以是 Task Runner，也可以是你自己设计的自定义任务代理），前提是它可以与 AWS Data Pipeline Web 服务通信。在此模式中，您几乎可以完全控制要使用的资源及其管理方式，并且您必须手动安装和配置任务运行程序。为此，请使用此部分中的过程，如[使用任务运行程序在现有资源上执行工作](dp-how-task-runner-user-managed.md)中所述。

# AWS Data Pipeline托管资源上的任务运行器
<a name="dp-how-task-runner-dp-managed"></a>

 当资源由启动和管理时 AWS Data Pipeline，Web 服务会自动在该资源上安装 Task Runner 以处理管道中的任务。您为活动对象的 `runsOn` 字段指定计算资源（Amazon EC2 实例或 Amazon EMR 集群）。当 AWS Data Pipeline 启动此资源时，它将在该资源上安装任务运行程序并进行配置，以处理其 `runsOn` 字段设置为该资源的所有活动对象。当资源 AWS Data Pipeline 终止时，任务运行器日志将在其关闭之前发布到 Amazon S3 位置。

![\[AWS Data Pipeline托管资源的任务运行器生命周期\]](http://docs.aws.amazon.com/zh_cn/datapipeline/latest/DeveloperGuide/images/dp-task-runner-managed-emr-jobflow.png)


 例如，如果您在管道中使用 `EmrActivity` 并在 `runsOn` 字段中指定 `EmrCluster` 资源， AWS Data Pipeline 处理该活动时，它会启动 Amazon EMR 集群并将任务运行器安装到主节点上。随后，此任务运行程序将处理其 `runsOn` 字段设置为该 `EmrCluster` 对象的活动的任务。来自管道定义的以下摘录说明了两个对象之间的此关系。

```
{
  "id" : "MyEmrActivity",
  "name" : "Work to perform on my data",
  "type" : "EmrActivity",
  "runsOn" : {"ref" : "MyEmrCluster"},
  "preStepCommand" : "scp remoteFiles localFiles",
  "step" : "s3://amzn-s3-demo-bucket/myPath/myStep.jar,firstArg,secondArg",
  "step" : "s3://amzn-s3-demo-bucket/myPath/myOtherStep.jar,anotherArg",
  "postStepCommand" : "scp localFiles remoteFiles",
  "input" : {"ref" : "MyS3Input"},
  "output" : {"ref" : "MyS3Output"}
},
{
  "id" : "MyEmrCluster",
  "name" : "EMR cluster to perform the work",
  "type" : "EmrCluster",
  "hadoopVersion" : "0.20",
  "keypair" : "myKeyPair",
  "masterInstanceType" : "m1.xlarge",
  "coreInstanceType" : "m1.small",
  "coreInstanceCount" : "10",
  "taskInstanceType" : "m1.small",
  "taskInstanceCount": "10",
  "bootstrapAction" : "s3://elasticmapreduce/libs/ba/configure-hadoop,arg1,arg2,arg3",
  "bootstrapAction" : "s3://elasticmapreduce/libs/ba/configure-other-stuff,arg1,arg2"
}
```

有关运行此活动的信息和示例，请参阅 [EmrActivity](dp-object-emractivity.md)。

 如果管 AWS Data Pipeline道中有多个托管资源，则每个资源上都安装了 Task Runner，它们都会轮询要处理 AWS Data Pipeline 的任务。

# 使用任务运行程序在现有资源上执行工作
<a name="dp-how-task-runner-user-managed"></a>

您可以在自己管理的计算资源（如 Amazon EC2 实例、物理服务器或工作站）上安装任务运行程序。Task Runner 可以安装在任何兼容的硬件或操作系统上的任何地方，前提是它可以与 AWS Data Pipeline Web 服务通信。

例如，当您想要使用 AWS Data Pipeline 处理存储在组织防火墙内的数据时，这种方法可能很有用。通过在本地网络的服务器上安装 Task Runner，您可以安全地访问本地数据库，然后轮 AWS Data Pipeline 询下一个要运行的任务。当 AWS Data Pipeline 结束处理或删除管道时，Task Runner 实例将在您的计算资源上继续运行，直到您手动将其关闭。管道执行完成后，任务运行程序日志将保留。

要在您管理的资源上使用任务运行程序，您必须先下载任务运行程序，然后使用此部分中的过程将它安装到您的计算资源上。

**注意**  
 您只能在 Linux、UNIX 或 macOS 上安装任务运行程序。Windows 操作系统不支持任务运行程序。  
要使用任务运行程序 2.0，所需的最低 Java 版本为 1.7。

要将安装的任务运行程序连接到它将处理的管道活动，请将 `workerGroup` 字段添加到该对象，并将任务运行程序配置为轮询此工作线程组值。在运行任务运行程序 JAR 文件时，可通过将工作线程组字符串作为参数（例如 `--workerGroup=wg-12345`）传递来执行此操作。

![\[AWS Data Pipeline diagram showing monthly task flow for archiving processed invoices using Task Runner.\]](http://docs.aws.amazon.com/zh_cn/datapipeline/latest/DeveloperGuide/images/dp-task-runner-user-emr-jobflow.png)


```
{
  "id" : "CreateDirectory",
  "type" : "ShellCommandActivity",
  "workerGroup" : "wg-12345",
  "command" : "mkdir new-directory"
}
```

## 安装任务运行程序
<a name="dp-installing-taskrunner"></a>

此部分介绍如何安装和配置任务运行程序及其先决条件。安装是一个简单的手动过程。

**安装任务运行程序**

1. 任务运行程序需要 Java 版本 1.6 或 1.8。要确定是否已安装 Java 以及所运行的版本，请使用以下命令：

   ```
   java -version
   ```

    如果你的计算机上没有安装 Java 1.6 或 1.8，请从 [http://www.oracle 下载其中一个版本。 com/technetwork/java/index.html。](http://www.oracle.com/technetwork/java/index.html)下载并安装 Java，然后继续下一步骤。

1. `TaskRunner-1.0.jar`从 [https://s3.amazonaws.com/datapipeline-us-east-1/us-east-1/ software/latest/TaskRunner/TaskRunner -1.0.jar](https://s3.amazonaws.com/datapipeline-us-east-1/us-east-1/software/latest/TaskRunner/TaskRunner-1.0.jar) 下载，然后将其复制到目标计算资源上的文件夹中。对于运行 `EmrActivity` 任务的 Amazon EMR 集群，请在集群的主节点上安装任务运行程序。

1. 使用 Task Runner 连接到 AWS Data Pipeline Web 服务以处理您的命令时，用户需要以编程方式访问有权创建或管理数据管道的角色。有关更多信息，请参阅 [授权以编程方式访问](dp-get-setup.md#dp-grant-programmatic-access)。

1. 任务运行器使用 HTTPS 连接到 AWS Data Pipeline Web 服务。如果您使用的是 AWS 资源，请确保在相应的路由表和子网 ACL 中启用了 HTTPS。如果您使用的是防火墙或代理，请确保端口 443 处于打开状态。

# （可选）授予任务运行程序对 Amazon RDS 的访问权限
<a name="dp-taskrunner-rdssecurity"></a>

Amazon RDS 允许您使用数据库安全组控制对您的数据库实例的访问。数据库安全组与防火墙的功能类似，用于控制对您的数据库实例的网络访问。默认情况下，将为您的数据库实例关闭网络访问。您必须修改数据库安全组以让任务运行程序访问您的 Amazon RDS 实例。任务运行程序从运行时所在的实例获取 Amazon RDS 访问权，因此，您添加到 Amazon RDS 实例的账户和安全组取决于您将任务运行程序安装到的位置。

**在 EC2-Classic 中授予对任务运行程序的访问权**

1. 打开 Amazon RDS 控制台。

1. 在导航窗格中，选择 **实例**，然后选择数据库实例。

1. 在**安全与网络**下面，选择安全组，将打开**安全组**页并选定该数据库安全组。选择数据库安全组的详细信息图标。

1. 在 **安全组详细信息** 下，创建带适当的 **连接类型** 和 **详细信息** 的规则。这些字段取决于任务运行程序运行的位置，如此处所述：
   + `Ec2Resource`
     + **Connection Type**：`EC2 Security Group`

       **详细信息**：*my-security-group-name*（您为 EC2 实例创建的安全组的名称）
   + `EmrResource`
     + **Connection Type**：`EC2 Security Group`

       **详细信息**: `ElasticMapReduce-master`
     + **Connection Type**：`EC2 Security Group`

       **详细信息**: `ElasticMapReduce-slave`
   + 您的本地环境 (本地)
     + **连接类型** `CIDR/IP`：

       **详细信息**：*my-ip-address*（您的计算机的 IP 地址或网络的 IP 地址范围，如果您的计算机位于防火墙后面）

1. 单击 Add（添加）。

**在 EC2-VPC 中授予对任务运行程序的访问权**

1. 打开 Amazon RDS 控制台。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择数据库实例的详细信息图标。在**安全与网络**下，打开安全组的链接，这将使您转至 Amazon EC2 控制台。如果安全组使用旧控制台设计，请选择在控制台页面顶部显示的图标以切换到新控制台设计。

1. 在 **入站** 选项卡上，依次选择 **编辑** 和 **添加规则**。指定在启动数据库实例时使用的数据库端口。来源取决于任务运行程序运行的位置，如此处所述：
   + `Ec2Resource`
     + *my-security-group-id*（您为 EC2 实例创建的安全组的 ID）
   + `EmrResource`
     + *master-security-group-id*（`ElasticMapReduce-master`安全组的 ID）
     + *slave-security-group-id*（`ElasticMapReduce-slave`安全组的 ID）
   + 您的本地环境 (本地)
     + *ip-address*（您的计算机的 IP 地址或网络的 IP 地址范围，如果您的计算机位于防火墙后面）

1. 单击**保存**。

## 启动任务运行程序
<a name="dp-activate-task-runner"></a>

在设置为已将任务运行程序安装到的目录的新命令提示窗口中，使用以下命令启动任务运行程序。

```
java -jar TaskRunner-1.0.jar --config ~/credentials.json --workerGroup=myWorkerGroup --region=MyRegion --logUri=s3://amzn-s3-demo-bucket/foldername
```

`--config` 选项指向您的凭证文件。

`--workerGroup` 选项指定工作线程组的名称，它必须是您在管道中为要处理的任务指定的同一值。

`--region` 选项指定从中提取要执行的任务的服务区域。

`--logUri` 选项用于将压缩的日志推送到 Amazon S3 中的某个位置。

当任务运行程序处于活动状态时，它将在终端窗口中输出日志文件的写入位置的路径。示例如下：

```
Logging to /Computer_Name/.../output/logs
```

任务运行程序应独立于登录 shell 运行。如果您使用终端应用程序来连接到您的计算机，则可能需要使用实用工具 (如 nohup 或 screen) 来防止任务运行程序应用程序在您注销时退出。有关命令行选项的更多信息，请参阅[任务运行程序配置选项](dp-taskrunner-config-options.md)。

## 验证任务运行程序日志记录
<a name="dp-verify-task-runner"></a>

验证任务运行程序是否正常工作的最简单方法是，检查它是否在写入日志文件。任务运行程序每小时将日志文件写入到安装任务运行程序的目录下的 `output/logs` 目录中。文件名为 `Task Runner.log.YYYY-MM-DD-HH`，其中 HH 的范围为 00 到 23 (用 UDT 表示)。为了节省存储空间，任何超过八小时的日志文件都使用压缩 GZip。

# 任务运行程序线程和先决条件
<a name="dp-taskrunner-threading"></a>

 任务运行程序对每个任务、活动和先决条件使用一个线程池。的默认设置`--tasks`为 2，这意味着从任务池中分配了两个线程，每个线程都会轮询 AWS Data Pipeline 服务以获取新任务。因此，`--tasks` 是一个性能优化属性，可用于帮助优化管道吞吐量。

 先决条件的管道重试逻辑在任务运行程序中实施。分配了两个前提条件线程来轮 AWS Data Pipeline 询前提条件对象。任务运行程序采用您在先决条件上定义的先决条件对象 **retryDelay** 和 **preconditionTimeout** 字段。

在许多情况下，减少先决条件轮询超时和重试次数有助于提高应用程序的性能。同样，具有长时间运行的先决条件的应用程序可能需要增大超时和重试值。有关先决条件对象的更多信息，请参阅[先决条件](dp-concepts-preconditions.md)。

# 任务运行程序配置选项
<a name="dp-taskrunner-config-options"></a>

这些是在您启动任务运行程序时可从命令行使用的配置选项。


****  

| 命令行参数 | 说明 | 
| --- | --- | 
| `--help` | 命令行帮助。示例：`Java -jar TaskRunner-1.0.jar --help` | 
| `--config` | `credentials.json` 文件的路径和文件名。 | 
| `--accessId` | 您的 AWS 访问密钥 ID，供任务运行器在发出请求时使用。 `--accessID` 和 `--secretKey` 选项提供了使用 credentials.json 文件的替代方法。如果还提供了 `credentials.json` 文件，则 `--accessID` 和 `--secretKey` 选项优先。 | 
| `--secretKey` | 你的 Task Runner 在提出请求时使用的 AWS 密钥。有关更多信息，请参阅 `--accessID`。 | 
| `--endpoint` | 终端节点是作为 Web 服务入口点的 URL。您发出请求的区域中的 AWS Data Pipeline 服务终端节点。可选。通常，指定区域已足够，您不需要设置终端节点。有关 AWS Data Pipeline 区域和终端节点的列表，请参阅中的 [AWS Data Pipeline 区域和终端节点*AWS 一般参考*](https://docs.aws.amazon.com/general/latest/gr/rande.html#datapipeline_region)。 | 
| `--workerGroup` | 任务运行程序检索其工作的工作线程组的名称。必需。当任务运行程序轮询 Web 服务时，它使用您提供的凭证和 `workerGroup` 的值来选择要检索的任务（如果有）。您可以使用对您有意义的任何名称；唯一的要求是，字符串必须在任务运行程序和其相应的管道活动之间匹配。工作线程组名称将绑定到区域。即使在其他区域中具有完全相同的工作线程组名称，任务运行程序也会始终从 `--region` 中指定的区域获取任务。 | 
| `--taskrunnerId` | 报告进度时要使用的任务运行程序的 ID。可选。 | 
| `--output` | 日志输出文件的任务运行程序目录。可选。日志文件存储在本地目录中，直至它们被推送到 Amazon S3。该选项覆盖默认目录。 | 
| `--region` | 要使用的 区域。(可选) 但建议始终设置区域。如果您未指定区域，则任务运行程序将从默认服务区域（即 `us-east-1`）检索任务。其他支持的区域为：`eu-west-1`、`ap-northeast-1`、`ap-southeast-2`、`us-west-2`。 | 
| `--logUri` | 任务运行程序用来每小时备份日志文件的 Amazon S3 目标路径。在任务运行程序终止时，本地目录中的活动日志将推送到 Amazon S3 目标文件夹。 | 
| --proxyHost | 任务运行程序客户端用于连接到 Amazon Web Services 的代理的主机。 | 
| --proxyPort | 任务运行程序客户端用于连接到 Amazon Web Services 的代理主机的端口。 | 
| --proxyUsername | 代理的用户名。 | 
| --proxyPassword | 代理的密码。 | 
| --proxyDomain | NTLM 代理的 Windows 域名。 | 
| --proxyWorkstation | NTLM 代理的 Windows 工作站名。 | 

# 将任务运行程序与代理结合使用
<a name="dp-taskrunner-proxy"></a>

如果您使用的是代理主机，则可在调用任务运行程序指定其[配置](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-taskrunner-config-options.html)或设置环境变量 HTTPS\$1PROXY。用于任务运行程序的环境变量接受用于 [AWS 命令行界面](https://docs.aws.amazon.com/cli/latest/userguide/cli-http-proxy.html)的相同配置。

# 任务运行器和自定义 AMIs
<a name="dp-custom-ami"></a>

当您为管道指定`Ec2Resource`对象时， AWS Data Pipeline 会使用为您安装和配置 Task Runner 的 AMI 为您创建一个 EC2 实例。在这种情况下，需要使用与 PV 兼容的实例类型。或者，您可以使用任务运行程序创建一个自定义 AMI，然后使用 `Ec2Resource` 对象的 `imageId` 字段指定此 AMI 的 ID。有关更多信息，请参阅 [Ec2Resource](dp-object-ec2resource.md)。

自定义 AMI 必须满足以下要求 AWS Data Pipeline 才能成功用于任务运行器：
+ 在运行实例的同一区域中创建 AMI。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[创建您自己的 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html)。
+ 确保 AMI 的虚拟化类型受您计划使用的实例类型的支持。例如，I2 和 G2 实例类型需要 HVM AMI，而 T1、C1、M1 和 M2 实例类型需要 PV AMI。有关更多信息，请参阅《Amazon EC2 用户指南》**中的 [Linux AMI 虚拟化类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html)。
+ 安装以下软件：
  + Linux
  + Bash
  + wget
  + unzip
  + Java 1.6 或 1.8
  + cloud-init
+ 创建和配置名为 `ec2-user` 的用户。