はじめに
こんにちは。adingoの岩川です。第3回ではCloudFrontのログを解析するHadoopプログラムを書き、
うまく動作しましたか?
今回は、
Amazon Elastic MapReduce Ruby Client
EMRは管理画面からも起動できますが、
下準備として、
- 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
解凍したら、
Credentialsはアカウント認証のために使用します。
Credentialsはマネジメント・
キーペアファイルはマネジメント・
最後に下記のファイルを作成します。入手したSecurity Credentialsやキーペアの値に置き換え、
{
"access-id": "ここにアクセスキーIDを書き込みます",
"private-key": "ここにシークレットアクセスキーを書き込みます",
"key-pair": "ここにキーペア名を書き込みます",
"key-pair-file": "ここにキーペアファイルのパスを書き込みます",
"region": "ap-northeast-1"
}
なお、
これで、
プログラムをEMRに移植する
作成したHadoopアプリケーションをEMRで実行するには、
アップロード用のjarファイルを作成します。まずはmainメソッドを含むクラスを指定するために、
Main-Class: DailyAccessCounter
jarコマンドを実行します。
$ jar -cvfm daily-access-counter.jar manifest DailyAccessCounter.class CloudFrontLogToDateMapper.class SumReducer.class
テスト用のS3バケットを作成し、

ただし、
準備が整いましたので、
以下は、
$ 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
マネジメント・
Stateの欄がSTARTING→RUNNING → COMPLETEDと推移していきますので、
S3への実行結果やログの転送には時間がかかることがあります。
CloudFrontのログ形式
実際のCloudFrontのログはテキスト形式ではなく、
ロギングを有効にするには、
なお、
EMRでのデバッグ
--enable-debuggingオプションを有効にしてEMRでのデバッギングを有効にすると、
$ elastic-mapreduce \ --create --name "access counter" \ --enable-debugging \ --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
ただし、
実行時に出力されるjobflowidを控えておきましょう。
EMRではジョブとステップという2つのライフサイクルがあります。インスタンス群が起動して終了するまでをジョブ、
既存のジョブにステップを追加するには下記のようにします。
$ elastic-mapreduce \ --jobflow ジョブフローID \ --enable-debugging \ --jar s3://cflog-testxxx/daily-access-counter.jar \ --arg s3://cflog-testxxx/input \ --arg s3://cflog-testxxx/output3 \ --log-uri s3://cflog-testxxx/logs
EMRの導入費用
EMRの費用はインスタンスタイプと
cosmiのシステムは現在1日に600MBほどのファイルを処理しています。内容の異なるEMRバッチを4本実行しており、
トータルで概ね130インスタンス時間、
cosmiの場合、
EMRの導入に際しては、
終わりに
前後編に分けて、
EMRはすぐに始められます。EMRを武器にして、