実例で学ぶAWS入門:オーディエンスデータプラットフォーム「cosmi」を例に

第4回 Amazon Elastic MapReduceを学ぶ(後編)

この記事を読むのに必要な時間:およそ 2.5 分

はじめに

こんにちは。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への実行結果やログの転送には時間がかかることがあります。

著者プロフィール

小澤昇歩(こざわしょうほ)

株式会社adingo取締役。

2008年adingo設立にエンジニアとして参加。以降同社の技術・プロダクト部門を担当。技術者と事業者という2つの顔を持ちながら,サービスや事業の成長に日々奮闘中。好きな本は『小さなチーム,大きな仕事』。

ブログ:SHOHOKOZAWA

Twitter:@s_kozawa


岩川建彦(いわかわたけひこ)

株式会社adingoエンジニア。鹿児島大学大学院卒。工学博士。

「分散アプリケーションのためのプログラミング言語開発」をテーマに2007年IPA未踏ユース・スーパークリエータに認定された。現在はクラウド環境を活かしたcosmiのシステム開発に従事している。

著書に『Python入門』(共著,秀和システム)がある。

コメント

コメントの記入