Apache Hadoopが登場したのは2006年。2011年にビッグデータ元年を迎えた日本でも、Apache Hadoopは有名になりました。Apache Hadoopとのコネクティビティーを強く意識し始めたソフトウエアベンダーは、DBベンダーにとどまらず、BI(ビジネスインテリジェンス)やDWH(データウエアハウス)ベンダーにも広がっているようです。

 しかしHadoopの応用は一筋縄ではいかないことも事実。今回はクラスターでのMapReduceの動作アーキテクチャーを、2012年6月現在世界中で最も使われている従来の0.20系(バージョン1)と、今後利用されていく最新の0.23系(バージョン2)の両方について解説しましょう。

 0.23系にはMapReduceの部分で大きな変更があります。0.20系の解説を一通り学んだだけで「Apache Hadoopの概要は大体理解した」と安心してはいけません。

「Hadoopバージョン2」の登場

 第3回の説明で「バージョン1.0.Xは基本的にバージョン0.20系の名前の付け替え」「バージョン0.23.Xの新機能は入ってない」と説明しました。この流れで、0.23系が2012年5月23日にバージョン2(2.0.0-alpha)となり再登場しました。

 このことにより、0.21系と0.22系が広く使われていく可能性はなくなりました。なおバージョン1の最新バージョンとしては、2012年5月16日に1.0.3がリリースされています。

 バージョン0.23系を元に2.0.0-alphaとして登場したことにより、これまでのバージョン番号の混乱は終息していくと思われます。Apache Hadoopのサイトでも、バージョンの定義は以下のようになっています。

  • 1.0.X:現在の安定稼働バージョン (リリース1.0)
  • 1.1.X:現在のβ(ベータ)バージョン (リリース1.1)
  • 2.X.X:現在のα(アルファ)バージョン
  • 0.22.X:セキュリティが含まれていない
  • 0.20.203.X:過去の安定稼働バージョン
  • 0.20.X:過去のバージョン

 既にApache Hadoopのプロジェクトに携わっている読者の皆さんが実際に触れているか、または(書籍などで)勉強中のApache Hadoopは0.20.Xがベースになっていることが多いと思います。

 これからはバージョン2が主流になります。ディストリビューターからも、2012年6月以降にバージョン2をベースとした新しいディストリビューションがリリースされていきます。これと同期を取るように、皆さんの現場でも最新バージョンの適用検討が始まるでしょう。

最新バージョンでの進化

 「MapReduce」「HDFS(Hadoop分散ファイルシステム)」の2つのサブコンポーネントがあるというHadoopの基本構成は、バージョン2になっても変わりません。バージョン2で大きく変更されたのは、MapReduce部分を「アプリケーション実行」レイヤーと「リソース管理とスケジューリング」レイヤーに分離し、MapReduce以外のアプリケーションもサポートするようになることです。

 この変更が行われた理由の1つ目として、Apache Hadoopのクラスターサイズが拡大し、かつ、クラスターへの負荷が増えるなかで、メンテナンス性を強化することが重要になってきたことが挙げられます。つまりMapReduce内部でジョブを管理するジョブトラッカーと呼ばれるデーモンを再設計する必要性が生じていました(ジョブトラッカーとタスクトラッカーに対するリファクタリングの提案は2007年後半にJIRA MapReduce-278が作成されています)。

 2つ目の理由は、アプリケーションの実行基盤としての変化です。MapReduce以外のプログラミングパラダイムの動作も可能になります。これは、スケールアウト型の優れた拡張性を持ったHadoopをMapReduceだけで利用するのはもったいないので、他のプログラミングパラダイムにも解放しようということでしょう。

 つまりバージョン1のMapReduceが、MapReduceアプリケーション専用の実行基盤として設計、実装されてきたのに対し(図1)、バージョン2では、異なるバージョンのMapReduceアプリケーションやMapReduce以外のアプリケーションを1つのクラスターで同時に動作させられるようになります。図2にバージョン2のMapReduce実行環境概念図を示します(図中の「コンテナ」については後述します)。

図1●0.20系のMapReduce実行環境概念図
図1●0.20系のMapReduce実行環境概念図
図2●0.23系のYARN実行環境概念図
図2●0.23系のYARN実行環境概念図