ペタバイト規模のデータを格納させる分散コンピューティング用プラットフォームを探しているのであれば、そのフレームワークとして Hadoop の使用を検討すべきだろう。HadoopはJavaベースで作成されているため、Linux、Windows、Solaris、BSD、Mac OS Xにて使用できる。こうしたHadoopを実際に採用している組織に共通するのは、安価(特殊なハードウェアが不要)かつ効率的でスケーラビリティと信頼性を兼ね備えたプラットフォームによる、膨大な量のデータ処理を必要としているという点だ。
Hadoopでは、こうした膨大な量のデータを格納するために、Hadoop Distributed File System(HDFS)を採用している。実際、HDFSのマスタ/スレーブアーキテクチャは、Hadoopのクラスタ機能の中核を成している。ここでサポートされているのは、ファイルシステムのメタデータ管理用マスタサーバとして機能する1つのNameNodeおよび、実際のデータ群を格納する多数のDataNodesという基本構成だ。
ただしNameNodeは単一点障害(single point of failure)となる危険性があるため、HadoopではSecondary NameNodeを用意することで、名前空間の定期チェックをさせると同時に、NameNodeに保持させるHDFSの変更ログファイルを一定サイズ以下にするようにしている。こうしたHDFSのアーキテクチャについては、ダイヤグラムを用いた解説ドキュメントが公開されており、また「HDFS User Guide」というユーザの視点に立った包括的なHDFSの導入ガイドも参考になるだろう。
Hadoopにおけるデータ分散処理のベースとなっているのは、Googleにより提唱されたMapReduceというプログラミングモデルだ。このモデルをHadoopの場合は、各ノードにおけるJobTrackerプロセスが、クラスタのジョブスケジューラおよびアロケータとして機能し、個々のクラスタノードにおけるTaskTrackerへのジョブ割り当てを行うという方式にて実装している。つまりJobTrackerとTaskTrackerの関係は、前者がMapReduceマスタで、後者がMapReduceスレーブという位置付けと見ればいいだろう。
Hadoopクラスタの機能ユニットである、NameNode、DataNodes、JobTracker、TaskTrackerは、いずれもデーモンとして実装される。そしてすべてのノードには、クラスタの状態をチェックするためのWebサーバが組み込まれるようになっている。NameNodeにおけるこうしたWebサーバの役割は、DataNodesのステータス情報をレポートすることであり、これによって、ライブおよびデッド状態のノード、分散ファイルシステムの容量など、様々な情報を確認できる。TaskTrackerおよびその上で実行中のタスクに関するステータス情報は、JobTrackerにて動作するWebサーバにより監視できる。
本来Hadoopは、Nutchプロジェクト用のインフラストラクチャとして作成されたもので、これはインターネット上のWebページ群を巡回して検索エンジン用のインデックスを構築する、クローラとしての用途が意図されていた。このような背景を有しているHadoopにとって、膨大な量のデータを対象に同様のプロセスを実施するというタスクは、非常に親和性の高い分野なのである。
Hadoopは、3つの動作モードにて実行させることができ、その1つであるデフォルト状態のHadoopでは、分散型モデルではなく単一のJavaプロセスとして動作するように設定されている。これは実用には適さない設定ではあるが、複数のコンピュータを準備する必要がないため、Hadoopの操作法を学習するのには役立つはずだ。またこれと同様の目的で、Hadoopのデーモン群を1つのノード内で動作させつつ、Javaプロセスとしては各デーモンが個別に動作するという、疑似分散モードも用意されている。最後に残された完全分散モードの場合、当然ながらHadoopを実行するノード群では、NameNode、JobTracker、DataNodes、TaskTrackerを実際に分散させた形で使用することになる。なお、こうした分散モードによるHadoopのセットアップには、最低3つのノードが必要だ。