

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 提交自訂 JAR 步驟
<a name="emr-launch-custom-jar-cli"></a>

自訂 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 步驟
<a name="ConsoleCreatingaCustomJARJob"></a>

此範例描述了如何使用 Amazon EMR 主控台來將自訂 JAR 步驟提交至執行中的叢集。

**若要使用主控台提交自訂 JAR 步驟**

1. 在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/) 開啟 Amazon EMR 主控台。

1. 在 **Cluster List (叢集清單)** 中，選擇您的叢集名稱。

1. 向下捲動至 **Steps (步驟)** 區段並展開，接著選擇 **Add step (新增步驟)**。

1. 在 **Add Step (新增步驟)** 對話中：
   + 針對 **Step type (步驟類型)**，選擇 **Custom JAR (自訂 JAR)**。
   + 對於 **Name (名稱)**，接受預設名稱 (自訂 JAR) 或輸入新名稱。
   + 對於 **JAR S3 location (JAR S3 位置)**，輸入或瀏覽到 JAR 檔案的位置。JAR 位置可能是連接至 S3 或是類別路徑中完整 Java 類別的路徑。
   + 對於 **Argument (引數)**，以空格分隔字串的形式輸入任何必要的引數，或將欄位留白。
   + 針對 **Action on failure (失敗的動作)**，接受預設選項 (**Continue (繼續)**)。

1. 選擇**新增**。該步驟會出現在主控台中，且狀態為待定。

1. 隨著步驟的執行，步驟的狀態會依序從 Pending (待定)、Running (執行中) 變成 Completed (完成)。若要更新狀態，您可以選擇 Actions (動作) 欄上的 **Refresh (重新整理)** 圖示。

## 使用 啟動叢集並提交自訂 JAR 步驟 AWS CLI
<a name="emr-dev-create-jar-cli"></a>

**使用 啟動叢集並提交自訂 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)。

## 第三方相依性
<a name="emr-custom-jar-dependency"></a>

有時可能需要在 MapReduce classpath JAR 中包含此相依性以與您的程式搭配使用。執行此動作有兩種選項：
+ 在步驟選項中包含 `--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 classpath。