連載
» 2008年09月29日 00時00分 公開

MapReduceのJava実装Apache Hadoopを使ってみたいま再注目の分散処理技術(後編)(3/3 ページ)

[小山博史,株式会社ガリレオ]
前のページへ 1|2|3       

Hadoopプログラムをコンパイルして実行

 ソースコードを作成したら、コンパイルし、JARファイルを作成しましょう。

$ /usr/java/latest/bin/javac -cp hadoop-0.18.0-core.jar sample/*.java
$ /usr/java/latest/bin/jar cvf charcount.jar sample/*.class
マニフェストが追加されました。
sample/CharCount.class を追加中です。(入 = 1801) (出 = 843)(53% 収縮されました)
sample/MapClass.class を追加中です。(入 = 1853) (出 = 755)(59% 収縮されました)
sample/Reduce.class を追加中です。(入 = 1530) (出 = 607)(60% 収縮されました)

 サンプルを実行するには、次のようにします。サンプルを動作させた場合には、一度「input」ディレクトリ内のファイルをすべて削除してから、入力データとなるa.txt、b.txtだけをあらためて用意します。「output」ディレクトリは自動的に生成され、そこに結果が出力されます。

 ただし、既存のoutputディレクトリがあると、実行時にエラーになりますから、実行前にあらかじめ削除しておいてください。

$ cat input/a.txt
Hello World.
$ cat input/b.txt
Hello Java.
Hello Apache Hadoop.
$ HADOOP_CLASSPATH=charcount.jar bin/hadoop sample.CharCount input output
08/09/10 18:31:23 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=

……(略)…

08/09/10 18:31:24 INFO mapred.JobClient: Map output records=43
08/09/10 18:31:24 INFO mapred.JobClient: Reduce input records=23
$ cat output/part-00000
4
. 3
A 1
H 4
J 1
W 1
a 4
c 1
d 2
e 4
h 1
l 7
o 6
p 2
r 1
v 1

 実行結果はこのようになり、「.」は3つ、「A」は1つ、となっていることからも分かるように、確かに文字がカウントされています。

Hadoop用のEclipseプラグインもあるが……

 今回は使用しませんでしたが、米IBMのAlphaworksでは「IBM MapReduce Tools for Eclipse」が公開されています。このプラグインを使うと、Hadoopを使ったJavaプログラムの開発が楽にできるようです。ほかにも都内クラウド検証施設でHdoopのデモを行うなど米IBMはHadoopに力を入れているようです(参考:IBMが都内にクラウド検証施設、Hadoopのデモも実施)。

 ただし、これを入手するためには、IBM IDが必要です。持っていない場合は登録が必要になります。また、このソフトウェアは、Early Access版として提供されているようで、ダウンロード時に表示されるライセンスによると、「生産目的には利用できない」「評価は90日間以内で行う必要がある」などと書いてあります。

 評価用にしか使えませんから、Hadoopのプログラムを試しに動かしてみる、といった目的であればよいのですが、製品を作成するという用途には使えません。利用する場合は、その点に注意してください。

使い方

 使い方は簡単で、ダウンロードした「mapreduce_tools.zip」をEclipseをインストールしたディレクトリの「plugin」フォルダへ展開するだけです。Eclipseを起動したら、[File]→[New]→[Project]を指定すると、[New Project]のウィザードが表示されます。

 選択肢として[MapReduce Project]が表示されるので、それを指定します。[Next]をクリックすると、[MapReduce Project]のダイアログが表示されますから、[Project name]に「Sample」と入力します。[Configure Hadoop install directory...]をクリックして、設定画面を表示し、[Hadoop main directory]にHadoopをインストールしたディレクトリを指定します。今回の例であれば、「/home/hadoop/hadoop-0.18.0」を指定します。設定は以上です。

 [Help]→[Cheat Sheets]を指定し表示される画面で[MapReduce]→[Write a MapReduce application]を指定します。すると、使い方のヘルプが表示されます。

 英語ですが、それほど難しい内容ではないので、プロジェクトを作成してから、パッケージを作成して、Mapクラス、Reduceクラス、Driverクラス(今回の例でいえばCharCountクラスに相当します)と順にクラスを作成して、最後にDriverクラスを実行するという手順だということを忘れないようにしながら読めば、使い方は大体分かるはずです。

注意

 きちんと確認したわけではないのですが、ウィザードを使うと非推奨のメソッドを使うクラスが生成されるため、最新版のHadoop用に使う場合には、それなりに修正する必要がありそうです。

 また、今回は、手元の仮想マシン上にEclipse 3.4(Ganymede)をインストールして動かしてみたのですが、実行時にHeapメモリが足りないというエラーが発生してしまい、残念ながら実行できませんでした。これは、もともと、JDK5、Eclipse 3.2.2上で動作確認されて公開されているプラグインのため、手元の環境に問題があるのかもしれません。

 ライセンスについても制限が厳しいので、現時点では実際の開発には使いにくいプラグインですが、Hadoopがどういったものかを知りたい人にとっては役に立ちそうなので、紹介しました。

巨大なデータを処理するときの選択肢の1つとして

 さて、いかがだったでしょうか。ユーザーが定義しないといけないクラスはたった3つですが、これだけで分散処理ができるプログラムが完成してしまいます。前編で理解した内容を思い出しながら、Hadoopで用意されているクラスの説明を読めば、基本的な部分は問題なく理解できるはずです。

 Hadoopの本格的な使用方法については、本家のドキュメントを確認していただくことにして、これだけで分散処理のプログラムが作成できるという点をご理解いただければと思います。

 今後は、分散処理によって巨大なデータを処理したいことが増えてくるでしょう。Erlangなどのプログラミングを勉強するのも1つの方法ですが、Hadoopのようなソフトウェアを使うのも選択肢の1つとして、覚えておくといいのではないでしょうか(参考:「Javaに並列処理と関数型言語の要素を」、ティム・ブレイ氏)。

筆者プロフィール

株式会社ガリレオ
小山博史(こやま ひろし)

情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)bugs(J)の活動へも参加している。

著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。