「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となっていたら、失敗です(たいてい、出力ファイルが空でないためだと思いますが・・・)
結果の取得
JobがCompletedとなっていたら、結果が –output で指定したディレクトリに出来ています。s3cmdや、s3Foxで取得します。
$ s3cmd get --recursive s3://[パス]</code>
結果の消去
結果を取得したら、s3から出力ディレクトリを削除します。s3cmdまたはs3Foxで。
$ s3cmd del --recursive s3://[パス]</code>