Hadoopって何だ?
以前から気になっていた「Hadoop」。これっていったい何?早速調べてみた。
大規模データ分散システムを支えるJavaフレームワーク
Hadoopは、大規模データの分散システムを支えるJavaソフトウェアフレームワークらしい。Googleのデータセンターで利用されているクラウド基盤システム(BigtableやMapReduce)の論文をヒントとし、Yahoo!のメンバーが主体となり開発されたもの。
オープンソースソフトウェア
Hadoopは、Google File System(GFS)とMapReduceのオープンソース実装版である。全てJavaで記述される。
何の為に使うのか?
複数のマシンに処理を分散させることで、1台で数日かかっていた処理を1日で終わらせるといったことが可能になる。
Hadoopには以下のような特徴がある。これを見ると分かるように、少ないデータを扱う場合にHadoopを使うのはもったいないし、データに信頼性を求めるなら、従来どおりRDBを使いなさい、となる。
■ 向いているシステム
- フル・スキャンするバッチ処理を行うシステム
- TB、PBクラスの大規模データを扱うシステム
- データウェアハウス等の情報系システム
- コモディティ・サーバーを使用した、スケールアウト構成のシステム
■ 向いていないシステム
- オンライントランザクション処理(OLTP)行うシステム
- ランダムアクセスを行うシステム
- 厳密なデータ整合性が求められるシステム
- 信頼性を求められる基幹システムや業務システム
主なコンポーネント
Hadoopは、主に以下のコンポーネントで構成される。
■ MapReduce
処理を記述するプログラミングモデル。
■ HDFS
ファイルシステム。複数マシンを1つのストレージとして扱う。HDFS上に構築されるデータベースとして、『HBase』がある。
アーキテクチャ
ざっくりとしたアーキテクチャは図の通り。
MapReduceレイヤでは、JobTrackerがクラスタのジョブスケジューラおよびアロケータとして機能し、個々のスレーブノードにおけるTaskTrackerへのジョブ割り当てを行う。
HDFSレイヤでは、Name nodeがファイルのメタデータ("場所")を管理し、Data nodeが実際のデータを保持する。