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 ServicesのDeveloper 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となっているのが分かる。