Amazon Elastic MapReduceを使う(その2:コマンドラインツール)
2014/6/7 記事を更新しました。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
前回は、AWS Management ConsoleからMapReduceのサンプルを実行した。
参考にした「Hadoopファーストガイド」でruby製のコマンドラインツールを紹介しており、これを使ってみたところ、とても便利だったので、今回はこれを簡単に紹介する。
- 作者: 佐々木達也
- 出版社/メーカー: 秀和システム
- 発売日: 2012/09/19
- メディア: 単行本
- クリック: 14回
- この商品を含むブログ (4件) を見る
(注意:前回のログでは、リージョンをOregonにしていました。今回のログではN.Virginiaを使います。リージョンをまたぎますので、N.Virginiaのアクセスキーがない場合には再作成してください)
クライアントツールの実行環境は、Max OSX Lion。
(注意:rubyがインストールされていないと実行できませんので、実行環境にrubyが入っていることを確認してください。)
Amazon Elastic MapReduce Rubyのダウンロード
Amazon Elastic Map Reduce Ruby Clientを、開発ツールのページからダウンロードする。
ダウンロード後にホームディレクトリに解凍し、ターミナルを起動してパスを通した。
.bashrcに追記しておく。
export PATH=$HOME/elastic-mapreduce-ruby:$PATH
ホームディレクトリに.credentials.jsonを作成する。S3とEC2を同時に使うためのクレデンシャルの設定を行う
{ 'access-id':'[your access id]', 'private-key':'[your private key]', 'keypair':'[your key pair file name]', 'key-pair-file':'[your key pair file name].pem', 'region':'us-east-1', 'log-uri':'s3n://[your bucket]/[log directory name]' }
以下のようにelastic-mapreduceコマンドが動けばOK。
MacBook-Pro:~ tetsuya$ elastic-mapreduce --help Usage: elastic-mapreduce [options] Creating Job Flows --create Create a new job flow --name NAME The name of the job flow being created
EMRのジョブフローを作成する。
Job Flowの作成、ステップの追加という手順で、前回実行したワードカウントプログラムを実行してみる。
マスターインスタンスグループ、コアインスタンスグループを各1台、タスクインスタンスグループを2台起動する。
ステップを追加するため、--aliveオプションをつけて勝手に終了しないようにする。
elastic-mapreduce --create --alive --name Spot-Cluster --instance-group master --instance-type m1.small --instance-count 1 --instance-group core --instance-type m1.small --instance-count 1 --instance-group task --instance-type m1.small --instance-count 1
上記のように入力すると。
Created job flow j-2H9XXXXXXXXX
とジョブフロー番号が帰ってくる。(Management Consoleと違い、コマンドラインツールでは、この番号が識別のためのキーになる)
マネージメントコンソールをみると、以下のようにWaitingというステータスになる。
(たくさん失敗しているが、これはコマンドラインツールからの指定する際に、参考書籍に従い、--name属性をダブルクォーテーションで囲んだため。囲まないのが正解のようだ)
コマンドラインツールから、上の図のようなJob Flowのリストを表示するには、
MacBook-Pro:~ tetsuya$ elastic-mapreduce --list
とする。アクティブなフローだけ表示するには、上のオプションに--activeを追加すればよい。
ジョブフローを終了するには、
MacBook-Pro:~ tetsuya$ elastic-mapreduce --terminate --jobflow j-2H9XXXXXXXXXX
とすると、
Terminated job flow j-2H9XXXXXXXXXX
と返ってくる。
WordCountのサンプルを実行してみる。
Waitingの状態になっているJobFlowに、ステップとしてWordCountを追加する。
python製のサンプルプログラムなので、Hadoop Streamを使用するという意味のオプション--streamをつける。
elastic-mapreduce --stream --step-name WordCount --input s3n://elasticmapreduce/samples/wordcount/input --output s3n://[your bucket]/[your directory] --mapper s3n://elasticmapreduce/samples/wordcount/wordSplitter.py --reducer aggregate --jobflow j- j-2H9XXXXXXXXXX
ジョブが追加されると、すぐに実行される。
ステータスがしばらくすると、ステータスがWaitingからRunningに変わり、処理が終了するとWaitingに戻る。
outputにしていたS3のフォルダーに結果が入っていれば、正常に動作したことが確認できる。
management consoleからも、以下のように、ステータスがステップ単位で確認できる。WordCountがCOMPLETEDになっていることが確認できる。