前回は、Web ConsoleからAmazon Elastic MapReduceを起動する方法を説明しました。今回はAPIでの起動方法を紹介していきます。
Web ConsoleとAPIはどこが違うのか
使用前に、まずWeb ConsoleとAPIの違いをおさえておきましょう。
Webコンソールは、1回の操作でJobを1つしか実行できません。これだと、毎回EC2のインスタンスが起動、ターミネートが走り、あまり効率的とはいえません。
一方APIを使用すると、1回の起動で複数のJobを実行できます。たとえば、3つのJobを実行したい場合は、以下のような操作が可能になります。
APIでEMRを起動する
↓
3つのJobを投入する
↓
すべてのJobが終了したら、EMRをターミネートする
また、「最近EMRで加わった新機能を利用中にインスタンス数を変更」といったこともできます。
EMRではどのようなAPIを使用できるか
EMRで使用できるAPIは言語ごとにいくつか用意されています。代表的なものは以下のとおりです。
今回はCLIから操作できるAmazon Elastic MapReduce Ruby Clientを紹介していきます。このAPI自体は名前のとおりRubyを使用していますので、実行前にRubyをインストールしておいてください。その後、上記のAPIのリンクからAPIをダウンロードし、解凍してください。
認証関係の設定をする
それでは実際に使用してみましょう。
まず、使用前に認証関係の設定をする必要があります。認証の設定は、credentials.jsonというファイルにJSON形式で値を指定していきます。credentials.jsonは、以下のいずれかの形で置いてください。
- 解凍したディレクトリに置く
- ホームディレクトリに「.credentials.json」などと「.」ファイルとして置く
以下が実例になります。
- 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を起動する
準備ができたところで、実際にEMRを実行してみましょう。起動するにはelastic-mapreduceコマンドを使います。
特にオプションを付けずに実行すると、ヘルプが表示されます。このオプションを組み合わせることによって、Web Consoleではできない詳細な設定を行うことができます。
現在、起動しているJobを確認するには以下のようなオプションを付加します。
では、実際にJobを1つ起動するコマンドを入力してみましょう。
実行すると、「j-XXXXXXXXXXX」のようなJobフローのIDが返却されます。複数のJobを実行する場合は、JobフローIDを使って実行します。Webコンソールもしくは--listオプションを使ってEMRが起動していることを確認してみてください。
今回使用したオプションは以下の6つになります。
- --name
- Jobの名前を指定します。
- --master-instance-type
- マスタで使用するインスタンスのタイプを指定します。
- --slave-instance-type
- スレーブで使用するインスタンスのタイプを指定します。
- --num-instances
- 起動するインスタンスの数を指定します。
- --jar
- 起動するMapReduceのJarファイルのパスを指定します。
- --args
- Jarファイルに渡すパラメータを指定します。
ここではカンマ区切りで複数のパラメータを渡していますが、--argを複数設定して1つずつ指定することもできます。
複数のJobを起動してターミネートさせる
EMRを起動したら、複数のJobを起動し、最後にEMRをターミネートさせてみましょう。
全体の流れは以下のようになります。
EMRの起動→wordcount Jobを実行→grep Jobを実行→EMRをターミネート
上記の実行例では、前述した6つのオプションに加え、以下の3つのオプションを指定しています。
- --alive
- --terminateのターミネートが実行されるまでEMRを起動し続けます。
- --jobflow
- EMRの起動時に返却されたJobフローIDを指定します。
- --step-name
- それぞれのJobに対して名前を付けます。ただし任意なのでなくてもかまいません。
以上、APIを使ってEMRを起動する方法を説明してきました。実際には今回説明しなかったデバッグモードの指定など、複数のオプションで挙動を細かく制御できますので、ヘルプを見て実際にためしてみてください。
次回は、Java SDKを使ってEMRを起動する方法を説明します。