

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Spark ステップを追加する
<a name="emr-spark-submit-step"></a>

Amazon EMR ステップを使用すると、EMR クラスターにインストールされた Spark フレームワークに作業を送信できます。詳細については、「Amazon EMR 管理ガイド」の「[ステップ](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-data-processing)」を参照してください。コンソールと CLI では、`spark-submit` スクリプトをステップとして自動的に実行する Spark アプリケーションステップを使用してこれを行います。API では、ステップを使用し、`spark-submit` を使用して `command-runner.jar` を呼び出します。

Spark へのアプリケーションの送信の詳細については、Apache Spark ドキュメントの「[アプリケーションの送信](https://spark.apache.org/docs/latest/submitting-applications.html)」を参照してください。

**コンソールを使用して Spark ステップを送信する**

1. [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**] では、[**Spark application**] を選択します。
   + [**Name**] では、デフォルト名（Spark アプリケーション）を使用するか、または新しい名前を入力します。
   + [**Deploy mode**] で、[**Client**] または [**Cluster**] を選択します。クライアントモードでは、クラスターのプライマリインスタンスでドライバープログラムが起動されますが、クラスターモードではクラスター上でドライバープログラムが起動されます。クライアントモードの場合、ドライバーのログ出力はステップログに表示され、クラスターモードの場合、ドライバーのログ出力は最初の YARN コンテナのログに表示されます。詳細については、Apache Spark ドキュメントで「[クラスターモードの概要](https://spark.apache.org/docs/latest/cluster-overview.html)」を参照してください。
   + 目的の **Spark-submit オプション** を指定します。`spark-submit` オプションの詳細については、「[spark-submit を使用したアプリケーションの起動](https://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit)」を参照してください。
   + [**Application location**] で、アプリケーションのローカルまたは S3 URI パスを指定します。
   + [**Arguments (引数)**] は、フィールドを空のままにします。
   + [**Action on failure (失敗時の操作)**] では、デフォルトのオプション ([**Continue (続行)**]) を使用します。

1. **[Add]** (追加) を選択します。ステップは、[Pending] というステータスでコンソールに表示されます。

1. ステップが実行されると、ステータスは [**Pending (保留中)**] から [**Running (実行中)**]、[Running (実行中)] から [**完了済み**] に変更されます。スタータスを更新するには、**[Actions]** (アクション) 列の上にある **[Refresh]** (更新) アイコンを選択します。

1. ステップの結果は、ロギングを設定している場合、Amazon EMR コンソールの [Cluster Details] (クラスターの詳細) ページの **[Log Files]** (ログファイル) にあるステップの横に表示されます。オプションで、クラスターを起動したときに設定したログバケットにステップの情報が記載されています。

**を使用して Spark に作業を送信するには AWS CLI**

クラスターを作成するか、既存のクラスターで `aws emr add-steps` サブコマンドを使用するとき、ステップを送信します。

1. 次の例に示すように、`create-cluster` を使用します。
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

   ```
   aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-7.12.0 --applications Name=Spark \
   --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
   --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10] --use-default-roles
   ```

   代わりに、次の例のように `command-runner.jar` を使用できます。

   ```
   aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-7.12.0 \
   --applications Name=Spark --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
   --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[spark-example,SparkPi,10] --use-default-roles
   ```
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

1. または、既に実行中のクラスターにステップを追加します。`add-steps` を使用します。

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10]
   ```

   代わりに、次の例のように `command-runner.jar` を使用できます。

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[spark-example,SparkPi,10]
   ```

**SDK for Java を使用して作業を Spark に送信するには**

1. 次の例は、Java を使用した Spark のあるクラスターにステップを追加する方法を示しています。

   ```
   AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
   AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials);
    
   StepFactory stepFactory = new StepFactory();
   AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
   AddJobFlowStepsRequest req = new AddJobFlowStepsRequest();
   req.withJobFlowId("j-1K48XXXXXXHCB");
   
   List<StepConfig> stepConfigs = new ArrayList<StepConfig>();
   		
   HadoopJarStepConfig sparkStepConf = new HadoopJarStepConfig()
   			.withJar("command-runner.jar")
   			.withArgs("spark-submit","--executor-memory","1g","--class","org.apache.spark.examples.SparkPi","/usr/lib/spark/examples/jars/spark-examples.jar","10");			
   		
   StepConfig sparkStep = new StepConfig()
   			.withName("Spark Step")
   			.withActionOnFailure("CONTINUE")
   			.withHadoopJarStep(sparkStepConf);
   
   stepConfigs.add(sparkStep);
   req.withSteps(stepConfigs);
   AddJobFlowStepsResult result = emr.addJobFlowSteps(req);
   ```

1. ステップの結果は、ステップのログを調べることで確認します。ログ記録を有効に AWS マネジメントコンソール している場合は、「」で**「ステップ**」を選択し、「ステップ」を選択し、****「ログファイル」で`stdout`「」または「」を選択します`stderr`。利用可能なログを表示するには、[**View Logs**] を選択します。

## Spark のデフォルト設定を上書きする
<a name="dynamic-configuration"></a>

Spark のデフォルト設定値をアプリケーションごとに上書きすることができます。これは、ステップを使用してアプリケーションを送信するとき (原則としてオプションが `spark-submit` に渡されます) に行うことができます。たとえば、`spark.executor.memory` を変更することで、実行プログラムのプロセスに割り当てられたメモリを変更することができます。次のような引数を含む `--executor-memory` スイッチを指定します。

```
spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10
```

同様に、`--executor-cores` と `--driver-memory` を調整できます。ステップでは、次の引数をステップに指定できます。

```
--executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10
```

さらに、`--conf` オプションを使用して、組み込みスイッチがない設定を調整することもできます。調整可能な他の設定の詳細については、Apache Spark ドキュメントの「[Spark プロパティの動的なロード](https://spark.apache.org/docs/latest/configuration.html#dynamically-loading-spark-properties)」を参照してください。