Apache Hadoop

Apache Hadoopは大規模データの分散処理を支えるオープンソースのソフトウェアフレームワークであり、Javaで書かれている。Hadoopはアプリケーションが数千ノードおよびペタバイト級のデータを処理することを可能としている。HadoopはGoogleのMapReduceおよびGoogle File System(GFS)論文に触発されたものである。
HadoopはApacheのトップレベルプロジェクトの1つであり、世界規模の開発貢献者コミュニティによって開発され、使用されている。 
アーキテクチャ.
Hadoopは、以下の4つのモジュールによって構成されている。
また、HadoopではHDFS以外のファイルシステムもサポートしている。2015年5月現在では、下記のファイルシステムをサポートしている。
Hadoop Distributed File System (HDFS).
Hadoop Distributed File System (HDFS)はHadoop独自の分散ファイルシステムである。HDFSでは大きなファイルを複数のブロック単位(デフォルトで128MB)に分割して、それらを複数のノードにまたがり格納する。そして、そのブロックの複製(レプリカ)を複数の異なるノードに格納することで信頼性を確保している。そのため、各ホストはRAIDを必要としない。レプリケーション数のデフォルトは3で、この場合、2つのデータを同じラック内のノードに、残り1つを異なるラック内のノードに保存する。
HDFSはマスタースレーブ型の構成で、マスターの役割を担当するのがNameNode、スレーブの役割を担当するのが複数のDataNodeである。NameNodeはHDFSに関するメタ情報(ファイルとブロックの対応関係など)を保持し、各DataNodeが実データをブロック単位で保持する。任意のDataNodeが故障した場合は、NameNodeが自動でそれを検知し、故障したDataNodeの保持ブロックを別のDataNodeが持つ同一な保持ブロックから参照するよう命令する。このようにしてDataNodeが故障した場合も自動的にレプリケーション数が維持されるため、DataNodeが故障してもサービスに影響は発生しない。
DataNodeは数1000台規模までスケールアウト可能で、その場合、数10PB規模のデータを格納することができる。
NameNodeは単一障害点であったが、Hadoop 2.2でHA機能が実装されたため単一障害点ではなくなった。また、通常のオペレーティングシステムにマウントできないことは制限のひとつであったが、Hadoop 2.2以降のバージョンではNFSv3マウントに対応している。
Yet Another Resource Negotiator (YARN).
Yet Another Resource Negotiator (YARN)は、Hadoopクラスタのリソース管理、ジョブスケジューリングを担当する。Hadoop 1系まで、Hadoopを構成するモジュールはHDFSとMapReduceの2つであったが、以下の課題を達成するためにYARNが開発され、Hadoop 2.2から利用可能である。
YARNは、Hadoop 1系までのMapReduceからクラスタのリソース管理、ジョブスケジューリングを分離したものである。YARNもHDFSと同様に、マスタースレーブ型の構成で、マスターの役割(リソース管理、ジョブスケジューリング)を担当するのがResourceManager、スレーブの役割(割り当てられた処理の実行)を担当するのがNodeManagerである。MapReduceを含む各アプリケーション用にそれぞれ専用のApplicationMasterが実行され、アプリケーション自体のスケジューリングはApplicationMasterが担当する。NodeManagerはMapReduce用に特化したスロットではなく、より汎用化したコンテナ単位でリソースを割り当てる。ApplicationMasterもそのコンテナ上で動作する。また、YARN上ではMapReduce以外にも、、、Apache Tez などの様々な分散処理フレームワークが動作する。
Hadoop MapReduce.
Hadoop 2系以降では、YARN上でMapReduce上が動作する。これは、MRv2と呼ばれる。従来のJobTracker、TaskTrackerによるMapReduceはMRv1と呼ばれ、これらは区別される。Hadoop 2系以降では、MRv1をサポートしていない。MapReduceでは、可能な限り入力データを保持するDataNodeと同一ノードでMapタスクが実行されるようにスケジューリングされる。これにより、大規模データ処理においてもネットワークの負荷を抑えることが可能である。
MRv2.
クライアントがYARN上でMapReduceを実行する場合、ResourceManagerにジョブを投入する。ジョブが投入されると、ResourceManagerはApplicationMasterをNodeManager上で立ち上げる。ApplicationMasterは、Mapタスク、Reduceタスクの割り当てやタスクの進捗管理を担当し、タスクの実行に必要なリソースは都度ResourceManagerに問い合わせて払いだしてもらう。
MRv1.
MapReduceエンジンはひとつのJobTrackerを持ち、クライアントはこのJobTrackerに向けてMapReduceジョブを投入する。ジョブが投入されると、JobTrackerはクラスタ中の利用可能なTaskTrackerに仕事を依頼する。TaskTrackerが停止するか、実行中のタスクがタイムアウトすると、その部分のタスクは再スケジュールされる。何らかの異常によってJobTrackerが停止すると、実行中のMapReduceジョブも停止する。その場合は、JobTrackerを再起動してMapReduceジョブを再実行する必要がある。
普及.
上記のようなWeb系のテック企業はHadoopを利用している一方で、その他大部分の大企業はHadoopに落胆しているという意見もある。これはデータ量が10 TB以下と比較的少ない場合にメリットを見出せない事にあるとされる。
また、ガートナーの調査によれば、自社の抱える問題に対してHadoopは過剰であり、I/O比が低いという意見もある。実際に同社の調査によると回答者の半数強は投資を計画しておらず、2年以内の投資予定も18％とした。