

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

# 提交自定义 JAR 步骤


自定义 JAR 运行您能上载到 Amazon S3 的已编译 Java 程序。您应针对想启动的 Hadoop 版本编译该程序，并将 `CUSTOM_JAR` 步骤提交到 Amazon EMR 集群。有关如何编译 JAR 文件的更多信息，请参阅 [使用 Amazon EMR 构建二进制文件](emr-build-binaries.md)。

有关构建 Hadoop MapReduce 应用程序的更多信息，请参阅 Apache Hadoop 文档中的[MapReduce 教程](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html)。

此部分介绍在 Amazon EMR 中提交自定义 JAR 步骤的基础知识。通过提交自定义 JAR 步骤，您可以使用 Java 编程语言编写用于处理数据的脚本。

## 使用控制台提交自定义 JAR 步骤


此示例介绍如何使用 Amazon EMR 控制台向正在运行的集群提交自定义 JAR 步骤。

**使用控制台提交自定义 JAR 步骤**

1. [在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr/)

1. 在 **Cluster List (集群列表)** 中，选择您的集群的名称。

1. 滚动到 **Steps (步骤)** 部分并展开它，然后选择 **Add step (添加步骤)**。

1. 在 **Add step (添加步骤)** 对话框中：
   + 对于**步骤类型**，选择**自定义 JAR**。
   + 对于 **Name (名称)**，接受默认名称（自定义 JAR）或键入新名称。
   + 对于 **JAR S3 location (JAR S3 位置)**，键入或浏览到 JAR 文件的位置。JAR 位置可能是 S3 的路径或类路径中的完全限定的 java 类。
   + 对于**参数**，以空格分隔的字符串形式键入任何所需参数，或将该字段保留为空白。
   + 对于 **Action on failure (出现故障时的操作)**，接受默认选项 **Continue (继续)**。

1. 选择**添加**。步骤会出现在控制台中，其状态为“Pending”。

1. 步骤的状态会随着步骤的运行从“Pending”变为“Running”，再变为“Completed”。要更新状态，请选择 Actions (操作) 列上方的 **Refresh (刷新)** 图标。

## 启动集群并使用提交自定义 JAR 步骤 AWS CLI


**要启动集群并提交自定义 JAR 步骤，请使用 AWS CLI**

要启动集群并使用提交自定义 JAR 步骤 AWS CLI，请键入带`--steps`参数的`create-cluster`子命令。
+ 要启动集群并提交自定义 JAR 步骤，请键入以下命令，*myKey*替换为您的 EC2 密钥对的名称，然后*amzn-s3-demo-bucket*替换为您的存储桶名称。

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"]
  ```
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

  如果不使用 `--instance-groups` 参数指定实例计数，则将启动单个主节点，其余实例将作为核心节点启动。所有节点都使用您在命令中指定的实例类型。
**注意**  
如果您之前未创建默认 Amazon EMR 服务角色和 EC2 实例配置文件，请先键入 `aws emr create-default-roles` 创建它们，然后再键入 `create-cluster` 子命令。

  有关在中使用 Amazon EMR 命令的更多信息 AWS CLI，请参阅。[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

## 第三方依赖项


有时可能需要在 MapReduce 类路径 JARs 中包含以便与您的程序一起使用。您有两个选项来执行此操作：
+ 将 `--libjars s3://URI_to_JAR` 包含在[启动集群并使用提交自定义 JAR 步骤 AWS CLI](#emr-dev-create-jar-cli)中的过程的步骤选项中。
+ 使用 `mapred-site.xml` 中修改过的 `mapreduce.application.classpath` 设置启动集群。使用 `mapred-site` 配置分类。要使用步骤创建集群 AWS CLI，如下所示：

  ```
  aws emr create-cluster --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --instance-type m5.xlarge --instance-count 2  --ec2-attributes KeyName=myKey \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"] \
  --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
  ```

  `myConfig.json`:

  ```
  [
      {
        "Classification": "mapred-site",
        "Properties": {
          "mapreduce.application.classpath": "path1,path2"
        }
      }
    ]
  ```

  路径的逗号分隔的列表应追加到每个任务的 JVM 的类路径。