Hatena::ブログ(Diary)

放浪するエンジニアの覚え書き このページをアンテナに追加 RSSフィード

2014-06-15

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

| 08:54 | 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を選ぶ。

f:id:tetsuya_odaka:20140610132537p:image

必要なプログラムだけを選択して、jarファイルを書き出す。

このとき、manifestを作ってmainクラスを指定しておけば、EMRに登録した際に、間違いなく目的のクラスが実行されるのだが、実行するするプログラムを変えるたびに、いちいちmanifestを書き換えるのは面倒くさい。ステップを登録する際にmainクラスを指定できるので、manifestはデフォルトのままにする。

f:id:tetsuya_odaka:20140610132748p:image


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

S3の適当なバケット/フォルダーに書き出したjar(この例だと、hadoopsample.jar)を置く。

f:id:tetsuya_odaka:20140610133234p:image

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

f:id:tetsuya_odaka:20140610133412p:image


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

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

f:id:tetsuya_odaka:20140610133545p:image


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

マネージメントコンソールでクラスタの詳細を表示して、Add Stepsよりステップを登録する。

AWSの公式マニュアルはこちら(日本語のページは古いGUIでの説明になっているが、英語ページは最新)。

step typeCustom JAR
nameWord Count(任意のステップ名)
JAR S3 Locations3n://[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]から順に引数が続くが、公式マニュアルに書いてあるように、区切りはスペースにする。

f:id:tetsuya_odaka:20140610134247p:image


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

f:id:tetsuya_odaka:20140610134744p:image


結果の確認

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

f:id:tetsuya_odaka:20140610135025p:image

f:id:tetsuya_odaka:20140610135124p:image


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

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

f:id:tetsuya_odaka:20140610135359p:image

f:id:tetsuya_odaka:20140610140631p:image


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

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

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

f:id:tetsuya_odaka:20140610140957p:image

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

f:id:tetsuya_odaka:20140610141145p:image

f:id:tetsuya_odaka:20140610141225p:image

つづきは、

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

リンク元