CodeZine(コードジン)

特集ページ一覧

Hadoop MapReduceプログラムを解剖する

サンプルコードを使って、MapReduceの構造を理解する

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/11/30 14:00

 オープンソース・ソフトウェア「Hadoop」のMapReduceジョブは、標準ではJavaで記述します。本記事では、MapReduceジョブのサンプルコードを使って、できる限り正しくコードの意味を理解し、MapReduceへの入り口を示したいと思います。

目次

Hadoop MapReduceプログラムを解剖する

 オープンソース・ソフトウェア「Hadoop」のMapReduceジョブは、標準ではJavaで記述します(その他には、Pig、Hive、JAQLといったものがあります)。しかし、意外と初心者には分かりにくいと筆者は感じます。本記事では、MapReduceジョブのサンプルコードを使って、できる限り正しくコードの意味を理解し、MapReduceへの入り口を示したいと思います。

 HadoopでMapReduceを記述するときに使うAPIが、0.19から0.20に変わるところで新しくなっています。実は、現時点でHadoopプロジェクト本体からでさえも、新APIを使ったサンプルが提示されていません。本記事では、新しいAPIで筆者が書き直したサンプルを使って解説しますので、このサンプルは0.19以前のHadoopでは動かないことに注意してください。この記事は、0.20.2を使って検証し、解説しています。

 当記事では、HadoopおよびMapReduceの紹介は省きます。既にHadoopの紹介記事などを読まれたり、環境構築をされたりしたあとで、MapReduceジョブのソースコードをきちんと理解したいと思う方を対象にしています。サンプルのMapReduceジョブを実行したことがあり、HDFSにファイルをコピー(hadoop fsコマンド等)などして投入できる程度の知識がある方を対象にします。

 本文中、Hadoopの専門用語やクラス名、メソッド名は青の太字で表現しています。本記事では、これらをきちんと理解していただくことを目標にします。

1.配布されるコードとされないコード

 ここで扱うMapReduceのサンプルコードは、以下の4つのメソッド(クラス)で成り立っています。

表1.サンプルコードの構成
名称 種類 配布 説明
MyMapper クラス * Mapタスクの実装
MyReducer クラス * Reduceタスクの実装
MyDriver#run メソッド   Toolのオーバーライド
MyDriver#main メソッド   キックするためのmain

 表を見て分かるように、MyMapperMyReducerは、TaskTrackerが稼働するノードで実行されます。runとmainの部分を「Driver」と呼びます。Driver最初のノードで実行され、MyMapperとMyReducerを含んだJARファイルを配布し、実行します(図1)。

 MyMapperとMyReducerをJARに入れ、外から別のDriverを実行することで、1つのJARを複数の別々のクラスターへサブミットすることもできます。

図1.MapとReduceの配布
図1.MapとReduceの配布

 多くのサンプルが、分かりやすいようにしたつもりか、1つのソースコードで説明されていると思われますが、逆に混乱させていると思います。Driver(あとで出てきますが、Configuredを継承し、Toolを実装したクラス)は配布される必要はないので、本来はMyMapperとMyReducerのみをJARに入れ、その外からmainとrunを実行するのが正しいと思います。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 米持 幸寿(ヨネモチ ユキヒサ)

    日本アイ・ビー・エム公認 ソフトウェア・エバンジェリスト。alphaWorks、developerWorks、インキュベーション系製品、アセットなどのテクノロジーの推進をしつつ、テクノロジー戦略、エバンジェリストチームをリードしている。講演や執筆も多数。主な著書に「かんたんサーバーサイドJava」(...

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5