前回は、
Web ConsoleとAPIはどこが違うのか
使用前に、
Webコンソールは、
一方APIを使用すると、
APIでEMRを起動する
↓
3つのJobを投入する
↓
すべてのJobが終了したら、
また、
EMRではどのようなAPIを使用できるか
EMRで使用できるAPIは言語ごとにいくつか用意されています。代表的なものは以下のとおりです。
- Amazon Elastic MapReduce Ruby Client
- Perl Library for Amazon Elastic MapReduce
- PHP Library for Amazon Elastic MapReduce
- Java Library for Amazon Elastic MapReduce
- C# Library for Amazon Elastic MapReduce
- VB.
NET Library for Amazon Elastic MapReduce
今回はCLIから操作できるAmazon Elastic MapReduce Ruby Clientを紹介していきます。このAPI自体は名前のとおりRubyを使用していますので、
認証関係の設定をする
それでは実際に使用してみましょう。
まず、
- 解凍したディレクトリに置く
- ホームディレクトリに
「.credentials. json」 などと 「.」 ファイルとして置く
以下が実例になります。
{
"access-id": "",
"private-key": "",
"key-pair": "",
"key-pair-file": "",
"log-uri": ""
}
- access-id
- AWSのサイトではAccess Key IDとなっています。
- private-key
- AWSのサイトではSecret Access Keyとなっています。
- key-pair
- 実際に使用しているキーペア名を入力してください。
- key-pair-file
- 実際に使用しているキーペアーファイルを指定します。
- log-uri
- ログのURIを指定します。前回のWeb Consoleによる起動の説明で出てきたS3上のログのパスを指定します。
elastic-mapreduceコマンドでEMRを起動する
準備ができたところで、
$ ./elastic-mapreduce
特にオプションを付けずに実行すると、
現在、
$ ./elastic-mapreduce --list $ ./elastic-mapreduce --list --all
では、
$ ./elastic-mapreduce --create \ --name wordcount \ --master-instance-type m1.large \ --slave-instance-type m1.small \ --num-instances 10 \ --jar s3://emrjar/custome.jar \ --args wordCount,s3://input/,s3://output
実行すると、
今回使用したオプションは以下の6つになります。
- --name
- Jobの名前を指定します。
- --master-instance-type
- マスタで使用するインスタンスのタイプを指定します。
- --slave-instance-type
- スレーブで使用するインスタンスのタイプを指定します。
- --num-instances
- 起動するインスタンスの数を指定します。
- --jar
- 起動するMapReduceのJarファイルのパスを指定します。
- --args
- Jarファイルに渡すパラメータを指定します。
ここではカンマ区切りで複数のパラメータを渡していますが、
複数のJobを起動してターミネートさせる
EMRを起動したら、
全体の流れは以下のようになります。
EMRの起動→wordcount Jobを実行→grep Jobを実行→EMRをターミネート
$ ./elastic-mapreduce --create --alive \ --name jobs \ --master-instance-type m1.large \ --slave-instance-type m1.small \ --num-instances 10
$ ./elastic-mapreduce --jobflow j-XXXXXXXXXXX \ --step-name wordCount \ --jar s3://emrjar/custome.jar \ --args wordCount,s3://input/,s3://output/wordcount
$ ./elastic-mapreduce --jobflow j-XXXXXXXXXXX \ --step-name grep \ --jar s3://emrjar/custome.jar \ --args grep,s3://input/,s3://output/grep
$ ./elastic-mapreduce --terminate --jobflow j-XXXXXXXXXXX
上記の実行例では、
- --alive
- --terminateのターミネートが実行されるまでEMRを起動し続けます。
- --jobflow
- EMRの起動時に返却されたJobフローIDを指定します。
- --step-name
- それぞれのJobに対して名前を付けます。ただし任意なのでなくてもかまいません。
以上、
次回は、