「Amazon Elastic MapReduce」タグのつけられた投稿

Amazon Elastic MapReduce

Amazon Web Servicesには、Amazon Elastic MapReduce(EMR)というサービスもあり、Hadoopジョブを簡単に走らせることができます。Hadoopトレーニングでは、CDHを使って演習を行ないましたが、シングルノードだったため分散処理の醍醐味がなかなか味わえません。

家に複数ノードのマシンがなくても簡単に試すことができるEMRを試してみました。

準備

EMRの利用前にいくつかの準備をします。詳細は、Getting Started Guide を参照してください。

EMRの利用開始

EMRを利用する前に、EMRの利用申請を行う必要があります。これは、マネージメントコンソールでElastic MapReduceタブをクリックした際に、利用申請済みでなければ申請ページへのリンクが出るので、そこから申請すればOKです。

EMRコマンドラインクライアントのダウンロード

Elastic MapReduce CLIをインストールします。このCLIはRubyで記述されているため、Rubyのインストールが必要です。リンク先からzipファイルをダウンロードして、展開すればOK。

S3コマンドラインクライアントのダウンロード

EMRはHDFSの代わりにS3を利用します。そのため、streamingを使う場合のスクリプトや、Hive/Pigのスクリプトなどは全てS3上に配置する必要があります。

S3Foxなどでも構いませんが、EMR CLIを使ってコンソールで作業することが多くなるので、S3もコンソールから作業できると便利です。

S3 Tools サイトから、S3 cmdパッケージをダウンロードします。pythonで動作するため、pythonのインストールが必要です。ダウンロード後解凍。

設定

EMR CLIでは、credentials.jsonというファイルをEMR CLIを展開したディレクトリに作成し、設定を記載します。設定内容は、下記のようになります。

 {
 "access_id": "[AWS Access Key ID]",
 "private_key": "[AWS Secret Access Key]",
 "keypair": "[EC2キーペア名]",
 "key-pair-file": "[pemファイルへのパス]",
 "log_uri": "[ログファイルを置くバケット, s3n://mylog-uri/]",
 "region": "[Jobフローを実行するリージョン。 us- east-1 or eu-west-1]"
 }

keypairはJobフローを実行するリージョンと同じものを利用してください。現在、EMRはUS east, US west, EU の三箇所で利用できるようですが、サンプルはUS east, US westを指定するようになっています。私はとりあえずUS eastで試しました。

また、Hadoopのログは、log-urlで指定したバケット以下にジョブフロー名のサブディレクトリを作成し、そこに配置されます。大量に出るので注意してください。

S3cmdの設定は、コマンドラインから s3cmd –config と打つと、対話式で設定が開始されます。この際、アクセスキー、GnuPGの場所(データファイルを暗号化する必要がなければ指定しなくても良い)、HTTPSの利用を聞かれます。

実行

サンプルの実行

参考リンクにあるEMRのチュートリアルに、いくつかの実行例があります。ここでは、Finding Similar Items with Amazon Elastic MapReduce, Python, and Hadoop Streaming を実行しました。Hadoop Streamingを使って、ユーザー毎に聞いたアーティストの数をカウントしています。

例ではManagement Consoleから実行していますが、コマンドラインから実行してみます。

ノード数の指定

ジョブの実行は下記のように実施します。サンプルのmapperや入力ファイルは予めs3上に配置してあります。reducerは標準であるaggregateを使っています。
(標準でどんなmapper, reducerが有るのかはよくわからないので宿題)

 ./elastic-mapreduce --create --stream \
 --input s3://elasticmapreduce/samples/similarity/lastfm/input \
 --output s3n://hadoop-useast/user-counts \
 --mapper s3://elasticmapreduce/samples/similarity/user_count_mapper.py \
 --reducer aggregate \
 --num-instances 1</code>

この、–num-instances が立ち上げるmapper / reducerの数を指定する箇所です。

起動後、まずはEC2インスタンスの起動が始まり、完全に起動してからジョブの実行が始まります。EC2インスタンスの起動はちょっと時間がかかります。ジョブの状態は、Management Console上で確認できます。Failedとなっていたら、失敗です(たいてい、出力ファイルが空でないためだと思いますが・・・)

Management Console

結果の取得

JobがCompletedとなっていたら、結果が –output で指定したディレクトリに出来ています。s3cmdや、s3Foxで取得します。

 $ s3cmd get --recursive s3://[パス]</code>

結果の消去

結果を取得したら、s3から出力ディレクトリを削除します。s3cmdまたはs3Foxで。

 $ s3cmd del --recursive s3://[パス]</code>

参考リンク

Amazon Web Services – Articles & Tutorials

,

コメントする

  • WordPress.com で次のようなサイトをデザイン
    始めてみよう