

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

# Amazon EMR クラスターでのコマンドとスクリプトの実行
<a name="emr-commandrunner"></a>

このトピックでは、クラスターでステップとしてコマンドまたはスクリプトを実行する方法について説明します。コマンドまたはスクリプトをステップとして実行することは、[クラスターに作業を送信する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html)多くの方法の 1 つであり、次のような場合に役立ちます。
+ Amazon EMR クラスターへの SSH アクセスがないとき
+ bash コマンドまたはシェルコマンドを実行してクラスターのトラブルシューティングを行うとき

スクリプトは、クラスターを作成するときにも、クラスターが `WAITING` 状態のときにも実行できます。ステップの処理が始まる前にスクリプトを実行するには、代わりにブートストラップアクションを使用します。ブートストラップアクションの詳細については、*Amazon EMR 管理ガイド*の[ブートストラップアクションを作成して追加のソフトウェアをインストールする](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html)を参照してください。

Amazon EMR には、スクリプト、コマンド、およびその他のクラスター上のプログラムを実行するのに役立つ次のツールが用意されています。どちらのツールも、Amazon EMR 管理コンソールまたは AWS CLIを使用して起動できます。

`command-runner.jar`  
クラスターの Amazon EMR AMI にあります。`command-runner.jar` を使用して、クラスター上でコマンドを実行できます。`command-runner.jar` は、フルパスを使用せずに指定します。

`script-runner.jar`  
Amazon S3 (`s3://<region>.elasticmapreduce/libs/script-runner/script-runner.jar`) でホストされます。ここで、`<region>` は Amazon EMR クラスターが存在するリージョンです。`script-runner.jar` を使用して、ローカルまたはクラスター上の Amazon S3 に保存されたスクリプトを実行できます。ステップを送信するときに、`script-runner.jar` の完全な URI を指定する必要があります。

## スクリプトまたはコマンドを実行するためのカスタム JAR ステップの送信
<a name="emr-commandrunner-examples"></a>

次の AWS CLI 例は、Amazon EMR `script-runner.jar`での `command-runner.jar`および の一般的なユースケースを示しています。

**Example : `command-runner.jar` を使用したクラスターでのコマンドの実行**  
`command-runner.jar` を使用するとき、ステップの引数のリストに、コマンド、オプション、および値を指定します。  
次の の AWS CLI 例では、 を呼び出す実行中のクラスターにステップを送信します`command-runner.jar`。`Args` リストで指定されたコマンドは、*my-script.sh* というスクリプトを Amazon S3 から hadoop ユーザーのホームディレクトリにダウンロードします。次に、コマンドはスクリプトの権限を変更し、*my-script.sh* を実行します。  
を使用する場合 AWS CLI、`Args`リスト内の項目はカンマで区切られ、リスト要素間に空白はありません。例えば、`Args=[example-command, example-option, "example option value"]` ではなく `Args=[example-command,example-option,"example option value"]` を使用します。  

```
aws emr add-steps \
--cluster-id j-2AXXXXXXGAPLF \
--steps Type=CUSTOM_JAR,Name="Download a script from S3 change its permissions and run it",ActionOnFailure=CONTINUE,Jar=command-runner.jar,Args=[bash,-c,"aws s3 cp s3://amzn-s3-demo-bucket/my-script.sh /home/hadoop; chmod u+x /home/hadoop/my-script.sh; cd /home/hadoop; ./my-script.sh"]
```

**Example : `script-runner.jar` を使用したクラスターでのスクリプトの実行**  
`script-runner.jar` を使用するとき、ステップの引数のリストで実行するスクリプトを指定します。  
次の の AWS CLI 例では、 を呼び出す実行中のクラスターにステップを送信します`script-runner.jar`。この場合、*my-script.sh* という名前のスクリプトが Amazon S3 に保存されます。クラスターのマスターノードに保存されているローカルスクリプトを指定することもできます。  

```
aws emr add-steps \
--cluster-id j-2AXXXXXXGAPLF \
--steps Type=CUSTOM_JAR,Name="Run a script from S3 with script-runner.jar",ActionOnFailure=CONTINUE,Jar=s3://us-west-2.elasticmapreduce/libs/script-runner/script-runner.jar,Args=[s3://amzn-s3-demo-bucket/my-script.sh]
```

## `command-runner.jar` のその他の使用方法
<a name="emr-commandrunner-other-uses"></a>

`command-runner.jar` を使用して、`spark-submit` や `hadoop-streaming` などのツールがあるクラスターに作業を送信することもできます。`command-runner.jar` を使用してアプリケーションを起動するときは、`SPARK`、`STREAMING`、`PIG` などの値を使用する代わりに、ステップタイプとして `CUSTOM_JAR` を指定します。ツールの可用性は、クラスターにインストールしたアプリケーションによって異なります。

次のコマンド例では、`command-runner.jar` を使用して、`spark-submit` を使用するステップを送信します。`Args` リストにはコマンドとして `spark-submit` が指定され、その後に Spark アプリケーション *my-app.py* の Amazon S3 URI が引数と値とともに続きます。

```
aws emr add-steps \
--cluster-id j-2AXXXXXXGAPLF \
--steps Type=CUSTOM_JAR,Name="Run spark-submit using command-runner.jar",ActionOnFailure=CONTINUE,Jar=command-runner.jar,Args=[spark-submit,S3://amzn-s3-demo-bucket/my-app.py,ArgName1,ArgValue1,ArgName2,ArgValue2]
```

次の表に、`command-runner.jar` を使用して実行できるその他のツールを示します。


****  

| ツール名 | 説明 | 
| --- | --- | 
| hadoop-streaming | Hadoop ストリーミングプログラムを送信します。コンソールと SDK では、これはストリーミングステップです。 | 
| hive-script | Hive スクリプトを実行します。コンソールと SDK では、これは、Hive のステップです。 | 
| pig-script | Pig スクリプトを実行します。コンソールと SDK では、これは、Pig のステップです。 | 
| spark-submit |  Spark アプリケーションを実行します。コンソールでは、これは Spark のステップです。  | 
| hadoop-lzo | ディレクトリで [Hadoop LZO インデクサ](https://github.com/kevinweil/hadoop-lzo/blob/master/README.md)を実行します。 | 
| s3-dist-cp | 大量のデータを Amazon S3 から HDFS に分散コピーします。詳細については、「[S3DistCp (s3-dist-cp)](UsingEMR_s3distcp.md)」を参照してください。 | 