Amazon Elastic MapReduce : Hadoop2.4でワードカウントのプログラムを実行する。

前回の記事で作成したワードカウントをAmzon Elastic MapReduceで実行してみる。

まず、プログラムと入出力ファイルの置き場所、プログラムの実行方法を決めておく。
ここまでの検証で、プログラム(jarファイル)の置き場所は、

  • S3
  • マスタノード

の2パターン、入出力ファイルの置き場所は、

の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)を置く。

サンプルプログラムなので、フォルダーの冗長性を下げる(価格が少しお安いため)。

入力ファイルをS3に配備する。

S3の適当なバケット/フォルダーに先ほどの例で使用したテキストファイルを配備する。ここでも低冗長化ストレージを選択する。

クラスタにステップを登録し、プログラムを実行する。

マネージメントコンソールでクラスタの詳細を表示して、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]から順に引数が続くが、公式マニュアルに書いてあるように、区切りはスペースにする。


以上で登録が終わると、ステップが実行される。

結果の確認

S3のフォルダーを参照して結果を確認する。

実行ログ:S3フォルダー内

実行ログの書き出し先は、クラスタ起動時に指定する。なぜか、stderrに出力されている。なにか悪かったのかなぁ。

実行ログ:マネージメントコンソール

以下では、Map、Reduceジョブごとのログの見方を示しておく。

Stepsのところで、view all jobsをクリックすると、ジョブの一覧が表示される。

これを辿って行くと、Map、Reduceジョブごとのログが参照できる。今回のジョブでは、Mapジョブが2つ、Reduceジョブが1つ実行された。

つづきは、
Amazon Elastic MapReduce : Hadoop2.4環境でワードカウントのプログラムを実行する(Ruby Client & SSH)。