

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

# Amazon EMR の以前の AMI バージョンの Spark アプリケーションの仕様。
<a name="emr-3x-spark"></a>

## Spark のインタラクティブな使用またはバッチモードでの使用
<a name="emr-3x-spark-interactive-batch"></a>

Amazon EMR では、Spark アプリケーションを次の 2 つのモードで実行できます。
+ インタラクティブ
+ バッチ

コンソールまたは を使用して長時間実行されるクラスターを起動する場合 AWS CLI、SSH を使用して Hadoop ユーザーとしてマスターノードに接続し、Spark シェルを使用して Spark アプリケーションをインタラクティブに開発および実行できます。Spark をインタラクティブに使用すると、Spark アプリケーションのプロトタイプ作成やテストをバッチ環境より簡単に行うことができます。Spark アプリケーションをインタラクティブモードで正常に変更したら、そのアプリケーションの JAR または Python プログラムを、Amazon S3 上のクラスターのマスターノードに対してローカルにあるファイルシステムに配置できます。その後、アプリケーションをバッチワークフローとして送信できます。

バッチモードで、Spark スクリプトを Amazon S3 またはローカルマスターノードファイルシステムにアップロードした後、作業をクラスターにステップとして送信します。Spark ステップは、長時間稼働クラスターまたは一時的なクラスターに送信できます。

## Spark がインストールされたクラスターの作成
<a name="emr-3x-spark-install"></a>

**コンソールを使用し、Spark がインストールされた状態でクラスターを起動するには**

1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから **[古いコンソールに切り替え]** を選択します。古いコンソールに切り替えたときの動作の詳細については、「[Using the old console](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)」を参照してください。

1. **[クラスターを作成]** を選択します。

1. [**Software Configuration**] (ソフトウェア設定) で、必要な AMI リリースバージョンを選択します。

1.  [**Applications to be installed**] で、リストから [**Spark**] を選択してから、[**Configure and add**] を選択します。

1. 必要に応じて引数を追加して Spark 設定を変更します。詳細については、「[Spark の設定](#emr-3x-spark-configure)」を参照してください。**[Add]** (追加) を選択します。

1.  必要に応じて他のオプションを選択し、[**Create cluster (クラスターの作成)**] を選択します。

次の例は、Java を使用した Spark のあるクラスターを作成する方法を示します。

```
AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
SupportedProductConfig sparkConfig = new SupportedProductConfig()
			.withName("Spark");

RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("Spark Cluster")
			.withAmiVersion("3.11.0")
			.withNewSupportedProducts(sparkConfig)
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyName")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge")
			);			
RunJobFlowResult result = emr.runJobFlow(request);
```

## Spark の設定
<a name="emr-3x-spark-configure"></a>

[Github の awslabs/emr-bootstrap-actions/spark リポジトリ](https://github.com/awslabs/emr-bootstrap-actions/tree/master/spark)にあるブートストラップアクションを実行してクラスターを作成するときに、Spark を設定します。ブートストラップアクションが受け入れる引数については、そのリポジトリの [README](https://github.com/aws-samples/emr-bootstrap-actions/blob/master/spark/examples/README.md) を参照してください。ブートストラップアクションは `$SPARK_CONF_DIR/spark-defaults.conf` ファイルのプロパティを設定します。設定の詳細については、Spark ドキュメントで、Spark 設定トピックを参照してください。次の URL の「latest」を、インストールする Spark のバージョン番号 (たとえば、`2.2.0` [http://spark.apache.org/docs/latest/configuration.html](http://spark.apache.org/docs/latest/configuration.html)) に置き換えることができます。

各アプリケーションの送信時に、Spark を動的に設定することもできます。`spark` 設定ファイルを使用して、エグゼキュータのリソース割り当てを自動的に最大化する設定が使用できます。詳細については、「[Spark のデフォルト設定の上書き](#emr-3x-spark-dynamic-configuration)」を参照してください。

### Spark のデフォルト設定の変更
<a name="emr-3x-spark-default-settings"></a>

次の例は、 AWS CLIで `spark.executor.memory` を 2G に設定してクラスターを作成する方法を示します。

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

```
aws emr create-cluster --name "Spark cluster" --ami-version 3.11.0 \
--applications Name=Spark, Args=[-d,spark.executor.memory=2G] --ec2-attributes KeyName=myKey \
--instance-type m3.xlarge --instance-count 3 --use-default-roles
```

### Spark への作業の送信
<a name="emr-3x-spark-submit-work"></a>

作業をクラスターに送信するには、ステップを使用して EMR クラスターで `spark-submit` スクリプトを実行します。`addJobFlowSteps`AmazonElasticMapReduceClient[ で ](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/AmazonElasticMapReduceClient.html) メソッドを使用してステップを追加します。

```
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
StepFactory stepFactory = new StepFactory();
AddJobFlowStepsRequest req = new AddJobFlowStepsRequest();
req.withJobFlowId("j-1K48XXXXXXHCB");

List<StepConfig> stepConfigs = new ArrayList<StepConfig>();
		
StepConfig sparkStep = new StepConfig()
	.withName("Spark Step")
	.withActionOnFailure("CONTINUE")
	.withHadoopJarStep(stepFactory.newScriptRunnerStep("/home/hadoop/spark/bin/spark-submit","--class","org.apache.spark.examples.SparkPi","/home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar","10"));

stepConfigs.add(sparkStep);
req.withSteps(stepConfigs);
AddJobFlowStepsResult result = emr.addJobFlowSteps(req);
```

### Spark のデフォルト設定の上書き
<a name="emr-3x-spark-dynamic-configuration"></a>

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

```
/home/hadoop/spark/bin/spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10
```

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

```
--executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10
```

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