はじめに
こんにちは。adingoの岩川です。第3回ではCloudFrontのログを解析するHadoopプログラムを書き,それをローカル環境上で実行するところまで解説しました。
うまく動作しましたか?
今回は,第3回のHadoopプログラムをEMR上で実行する手順を追っていきます。
Amazon Elastic MapReduce Ruby Client
EMRは管理画面からも起動できますが,今回は定期バッチを想定して,コマンドラインツールを使うことにしましょう。
下準備として,下記のものを入手します。なお,Amazon Elastic MapReduce Ruby Clientを実行するにはRuby 1.8が必要です。
- Amazon Elastic MapReduce Ruby Client
- Security Credentials
- キーペア
Amazon Elastic MapReduce Ruby Clientを下記のページからダウンロードします。
$ mkdir elastic-mapreduce-cli $ cd elastic-mapreduce-cli $ wget http://elasticmapreduce.s3.amazonaws.com/elastic-mapreduce-ruby.zip $ unzip elastic-mapreduce-ruby.zip
解凍したら,elastic-mapreduce-cliにパスを通しておくとよいでしょう。
Credentialsはアカウント認証のために使用します。
Credentialsはマネジメント・コンソールにログイン後,右上にあるユーザ名をクリックし,プルダウンメニューから「Security Credentials」を選択すると進むセキュリティ証明書のページで確認することができます。
キーペアファイルはマネジメント・コンソールの「EC2」タブ→左ナビゲーション「Key Pairs 」→「Create Key Pair」と進むと作成できますので,安全な場所に保存しておきましょう。
最後に下記のファイルを作成します。入手したSecurity Credentialsやキーペアの値に置き換え,credentials.jsonとして保存して下さい。
credentials.json
{
"access-id": "ここにアクセスキーIDを書き込みます",
"private-key": "ここにシークレットアクセスキーを書き込みます",
"key-pair": "ここにキーペア名を書き込みます",
"key-pair-file": "ここにキーペアファイルのパスを書き込みます",
"region": "ap-northeast-1"
}
なお,ap-northeast-1は東京リージョンを意味します。
これで,コマンドラインツールの導入は完了です。
プログラムをEMRに移植する
作成したHadoopアプリケーションをEMRで実行するには,S3に入力ファイルとプログラムをアップロードする必要があります。
アップロード用のjarファイルを作成します。まずはmainメソッドを含むクラスを指定するために,マニフェストファイルを作成します。
manifest
Main-Class: DailyAccessCounter
jarコマンドを実行します。
Linuxの例
$ jar -cvfm daily-access-counter.jar manifest DailyAccessCounter.class CloudFrontLogToDateMapper.class SumReducer.class
テスト用のS3バケットを作成し,jarファイル,サンプルファイルをアップロードします。以降の例では,下図のように配置した想定で解説します。
ただし,S3バケットの名前空間は,リージョンごとに1つずつです。ここではまだ誰にも使われていない名前を選択しておく必要があります。
準備が整いましたので,elastic-mapreduce-cliを呼び出します。
以下は,m1.smallインスタンス1台で計算する例です。
$ elastic-mapreduce \ --create --name "access counter" \ --num-instances 1 \ --instance-type m1.small \ --jar s3://cflog-testxxx/daily-access-counter.jar \ --arg s3://cflog-testxxx/input \ --arg s3://cflog-testxxx/output \ --log-uri s3://cflog-testxxx/logs
マネジメント・コンソールを見ると,EMRが起動していることを確認できると思います。コンソールには--nameオプションで指定した名前が表示されますので,わかりやすい名前にすると良いでしょう。
Stateの欄がSTARTING→RUNNING → COMPLETEDと推移していきますので,計算が完了してしばらくしたらS3のs3://cflog-testxxx/outputフォルダを確認してみましょう。
S3への実行結果やログの転送には時間がかかることがあります。

