ダメSE uramonの奮闘記

インフラ関連技術など

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が実際のデータを保持する。