Amazon Elastic MapReduce : Hadoop2.4でワードカウントのプログラムを実行する。
前回の記事で作成したワードカウントをAmzon Elastic MapReduceで実行してみる。
まず、プログラムと入出力ファイルの置き場所、プログラムの実行方法を決めておく。
ここまでの検証で、プログラム(jarファイル)の置き場所は、
- S3
- マスタノード
の2パターン、入出力ファイルの置き場所は、
- S3
- HDFS
の2パターン。
実行方法は「色々あるのかな」と思うが、
- マネージメントコンソールから、Custom Jarのステップを登録する。
- Ruby Clientからステップを登録する。
- マスタノードにログインして実行する。
といったところを押さえておけばいいだろう。
以下では、
- AWSマネージメント・コンソールでクラスタを起動する(やり方は以前の記事)
- プログラムはS3に置く。
- 入出力もS3に置く。
- AWSマネージメント・コンソールからCustom Jarステップとしてステップを登録して実行する。
の手順を示す。
開発は引き続き、MacBook Pro(OSX 10.9.3)+Java6+Eclipseで行う。(NetBeansがいいよ、という声も聞こえるのだけど、とりいそぎ慣れたツールを選択)
Jarファイルの作成
Eclipseプロジェクトを選択後、右クリックしてエクスポート>Java>jar fileを選ぶ。
必要なプログラムだけを選択して、jarファイルを書き出す。
このとき、manifestを作ってmainクラスを指定しておけば、EMRに登録した際に、間違いなく目的のクラスが実行されるのだが、実行するするプログラムを変えるたびに、いちいちmanifestを書き換えるのは面倒くさい。ステップを登録する際にmainクラスを指定できるので、manifestはデフォルトのままにする。
jarファイルをS3に配備する。
S3の適当なバケット/フォルダーに書き出したjar(この例だと、hadoopsample.jar)を置く。
サンプルプログラムなので、フォルダーの冗長性を下げる(価格が少しお安いため)。
クラスタにステップを登録し、プログラムを実行する。
マネージメントコンソールでクラスタの詳細を表示して、Add Stepsよりステップを登録する。
AWSの公式マニュアルはこちら(日本語のページは古いGUIでの説明になっているが、英語ページは最新)。
step type | Custom JAR |
name | Word Count(任意のステップ名) |
JAR S3 Location | s3n://[your bucket]/[your folder]/hadoopsample.jar |
Arguments | [FQCN of main class] s3n://[your bucket]/[your input folder]/ s3n://[your bucket]/[your output folder]/ |
とする。
上に書いたように、Argumentsの最初でmainクラスを指定できる。そのあとは、arg[0]から順に引数が続くが、公式マニュアルに書いてあるように、区切りはスペースにする。
以上で登録が終わると、ステップが実行される。
実行ログ:マネージメントコンソール
以下では、Map、Reduceジョブごとのログの見方を示しておく。
Stepsのところで、view all jobsをクリックすると、ジョブの一覧が表示される。
これを辿って行くと、Map、Reduceジョブごとのログが参照できる。今回のジョブでは、Mapジョブが2つ、Reduceジョブが1つ実行された。
つづきは、
Amazon Elastic MapReduce : Hadoop2.4環境でワードカウントのプログラムを実行する(Ruby Client & SSH)。