Amazon EMR クラスターでのコマンドとスクリプトの実行
このトピックでは、クラスターでステップとしてコマンドまたはスクリプトを実行する方法について説明します。コマンドまたはスクリプトをステップとして実行することは、クラスターに作業を送信する多くの方法の 1 つであり、次のような場合に役立ちます。
-
Amazon EMR クラスターへの SSH アクセスがないとき
-
bash コマンドまたはシェルコマンドを実行してクラスターのトラブルシューティングを行うとき
スクリプトは、クラスターを作成するときにも、クラスターが WAITING
状態のときにも実行できます。ステップの処理が始まる前にスクリプトを実行するには、代わりにブートストラップアクションを使用します。ブートストラップアクションの詳細については、Amazon EMR 管理ガイドのブートストラップアクションを作成して追加のソフトウェアをインストールするを参照してください。
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
は Amazon EMR クラスターが存在するリージョンです。<region>
script-runner.jar
を使用して、ローカルまたはクラスター上の Amazon S3 に保存されたスクリプトを実行できます。ステップを送信するときに、script-runner.jar
の完全な URI を指定する必要があります。
スクリプトまたはコマンドを実行するためのカスタム JAR ステップの送信
Amazon EMR での command-runner.jar
と script-runner.jar
の一般的なユースケースをいくつか、次の AWS CLI 例に示します。
例 : 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 cps3://amzn-s3-demo-bucket/my-script.sh
/home/hadoop; chmod u+x /home/hadoop/my-script.sh; cd /home/hadoop; ./my-script.sh"]
例 : 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
のその他の使用方法
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 インデクサ |
s3-dist-cp |
大量のデータを Amazon S3 から HDFS に分散コピーします。詳細については、「S3DistCp (s3-dist-cp)」を参照してください。 |