Amazon Elastic MapReduceを使う:Rubyクライアント・ツールを使う。

Ruby製のクライアント・ツールのダウンロード、ジョブフローの作成(クラスタの作成)、ステップの追加、ジョブフローの停止を行う。
基本的に1年前の記事を追って行う。

クライアントは、Mac Book Pro(OSX 10.9.3)。Rubyのバージョンは以下。

バージョン 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]

クライアントツールのダウンロードとクライアントの設定

Amazon Web ServicesDeveloper Tool>Amazon Elastic MapReduce Ruby Clientからダウンロードする。

ダウンロードしたら、ホームディレクトリにおき、.bashrcに以下を追加してパスを通す。

PATH=$HOME/elastic-mapreduce-ruby:$PATH

次に、.credentials.jsonを作成して、以下の内容を記載する。(以下では、リージョンとしてUSA-Standard(us-east-1=N.Virginia)を使っている)

{
'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]'
}

ジョブフロー(クラスタ)の作成

以下の構成でクラスタを作成する。

Node Instance Type Quantity
マスタ m1.small 1
コア m1.small 1
タスク m1.small 1

クラスタの名前は、Spot Clusterとし、ステップを後で追加するためWaitingの状態にしておく。

ターミナル(Mac Book)で以下のように入力し、実行。

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

すると、j-XXXXXXXXXXというJob Flow IDが戻る。
マネージメント・コンソールからも、以下のようにチャンと見える。

ステップの追加:Word Count のサンプルを実行する。

Word Countのサンプルを実行するステップを追加する。
以下のコマンドにより、Job Flow IDを指定して、ステップを追加・実行する。

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-XXXXXXXXXXXXX

以下が、Word Count実行中のコンソール画面。

ステップ名(にあるリンクを)をクリックすると、ステップの詳細を見る事ができる。

処理が終わったら、今度は「outputディレクトリを変えずにステップを追加し」、ジョブを失敗させる。MapReduceジョブでは出力先フォルダーを1つのジョブ(ステップ)につき1つ用意しなくてはならず、よくFailedが帰ってきてがっかりする。

ジョブが失敗すると、上のように赤くFailedと表示される。少し待つと、log filesのカラムにsyslog、stderr、stdoutと表示されて、ログファイルを確認できるようになる(少々じれったい)。
以下は、syslogを表示したもの。URLをみると、S3のURLになっている(=S3にログが転送されるまで、ログの参照を待つ必要がある)。
output directory already existedとなっているのが分かる。

クラスタの終了

Job Flow IDを指定し、以下のようにコマンドを入れると、クラスタ(ジョブフロー)が終了する。

elastic-mapreduce --terminate --jobflow j-XXXXXXXXXXXXX

マネージメント・コンソールを見ると、以下のようにステータスがTerminatingとなり、やがて終了する(ステータスがTerminatedになる)。