MapReduceのJava実装Apache Hadoopを使ってみた:いま再注目の分散処理技術(後編)(3/3 ページ)
最近注目を浴びている分散処理技術「MapReduce」の利点をサンプルからアルゴリズムレベルで理解し、昔からあるJava関連の分散処理技術を見直す特集企画(編集部)
Hadoopプログラムをコンパイルして実行
ソースコードを作成したら、コンパイルし、JARファイルを作成しましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
サンプルを実行するには、次のようにします。サンプルを動作させた場合には、一度「input」ディレクトリ内のファイルをすべて削除してから、入力データとなるa.txt、b.txtだけをあらためて用意します。「output」ディレクトリは自動的に生成され、そこに結果が出力されます。
ただし、既存のoutputディレクトリがあると、実行時にエラーになりますから、実行前にあらかじめ削除しておいてください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実行結果はこのようになり、「.」は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コレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- スキルアップのための分散オブジェクト入門
分散オブジェクト技術はシステム・インテグレーションを行うエンジニアにとって重要な基礎知識。本連載では分散オブジェクト技術の目的から、個々の分散オブジェクト技術についてわかりやすく解説します - いまなぜCORBAなの?
CORBAは「難しい」「仕事に関係ない」「古い」と思っているJavaエンジニアの皆さん。実はEJBの登場でCORBAの役割が再びクローズアップされてきているのです - HORBと遊ぼう
HORBは、日本で開発された分散オブジェクト環境だ。使いやすさを中心テーマに開発されたHORBを使い、楽しく遊びながらJavaによる分散オブジェクト環境を学んでみよう - 次世代を予感させるグリッドコンピューティング
安藤幸央のランダウン(7) 地球外知性探索のSETI@Homeなどで知られるグリッドコンピューティング。今、商用化や標準化など、さまざまな試みに発展している - J2EEと外部システムを連携する方法
[連載]Java初心者のためのWebシステム入門(7) J2EEがサポートする接続方法は多様だ。今回はJ2EEと外部のシステムとの連携方法を解説する - 樋口研究室 パソコンで試してわかるWebサービス
パソコンとフリーのソフトウェアを使いWebサービスの環境を作ってみよう。自分で試せば、きっとサービスが理解できます - 第1回 Webサービスを試す環境を作る
- 第2回 SOAPの3つの機能
- 第3回 JavaBeansからWebサービスを作る
- 第4回 Webサービスの動作を決めるスコープの謎
- 第5回 Webサービスにも必要なセッション管理
- 第6回 WSDLでWebサービスを記述する
- 第7回 WSDLをうまく使いWebサービスをオートマ運転
- 第8回 統合開発環境でWebサービスを作成する
- 最終回 EJBからWebサービスをつくる
- SOAPの先進機能を斬る!
米持先進技術工房−@IT分室(1) テクノロジー・エバンジェリスト 米持氏がJ2EEの最新技術情報を提供。先端技術をいち早くキャッチアップしたい読者のためのコーナー