SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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を実行するのが正しいと思います。

次のページ
2.入出力

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

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

日本アイ・ビー・エム公認 ソフトウェア・エバンジェリスト。alphaWorks、developerWorks、インキュベーション系製品、アセットなどのテクノロジーの推進をしつつ、テクノロジー戦略、エバンジェリストチームをリードしている。講演や執筆も多数。主な著書に「かんたんサーバーサイドJava」(翔泳社)、「Webサービス完全解説」(翔泳社)がある。developerWorks Japan ブログ 「米持幸寿のブログ

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5582 2010/11/30 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング