この記事は英語版の対応するページを翻訳することにより充実させることができます。(2026年10月) 翻訳前に重要な指示を読むには右にある[表示]をクリックしてください。
|
|
| |
| 開発元 | Apacheソフトウェア財団 |
|---|---|
| 初版 | 2006年4月1日 |
| 最新版 | |
| リポジトリ | |
| プログラミング 言語 | Java |
| 対応OS | クロスプラットフォーム |
| サポート状況 | Active |
| 種別 | ビッグデータ、分散ファイルシステム |
| ライセンス | Apache License 2.0 |
| 公式サイト |
hadoop |
Apache Hadoopは、多数の計算機で大規模なデータを分散して保存および並列処理するためのオープンソースのソフトウェアフレームワークである。
ビッグデータ処理基盤の代表的な実装の一つとして位置づけられ、Googleの分散処理技術の設計思想に基づいている。
Hadoopは、以下の4つのモジュールによって構成されている。
また、HadoopではHDFS以外のファイルシステムもサポートしている。2015年5月現在では、下記のファイルシステムをサポートしている。
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)は、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 Spark(英語版)、Apache Storm(英語版)、Apache Tez などの様々な分散処理フレームワークが動作する。
Hadoop 2系以降では、YARN上でMapReduceが動作する。これは、MRv2と呼ばれる。従来のJobTracker、TaskTrackerによるMapReduceはMRv1と呼ばれ、これらは区別される。Hadoop 2系以降では、MRv1をサポートしていない。MapReduceでは、可能な限り入力データを保持するDataNodeと同一ノードでMapタスクが実行されるようにスケジューリングされる。これにより、大規模データ処理においてもネットワークの負荷を抑えることが可能である。
クライアントがYARN上でMapReduceを実行する場合、ResourceManagerにジョブを投入する。ジョブが投入されると、ResourceManagerはApplicationMasterをNodeManager上で立ち上げる。ApplicationMasterは、Mapタスク、Reduceタスクの割り当てやタスクの進捗管理を担当し、タスクの実行に必要なリソースは都度ResourceManagerに問い合わせて払いだしてもらう。
MapReduceエンジンはひとつのJobTrackerを持ち、クライアントはこのJobTrackerに向けてMapReduceジョブを投入する。ジョブが投入されると、JobTrackerはクラスタ中の利用可能なTaskTrackerに仕事を依頼する。TaskTrackerが停止するか、実行中のタスクがタイムアウトすると、その部分のタスクは再スケジュールされる。何らかの異常によってJobTrackerが停止すると、実行中のMapReduceジョブも停止する。その場合は、JobTrackerを再起動してMapReduceジョブを再実行する必要がある。
上記のようなWeb系のテック企業はHadoopを利用している一方で、その他大部分の大企業はHadoopに落胆しているという意見もある。これはデータ量が10 TB以下と比較的少ない場合にメリットを見出せない事にあるとされる。
また、ガートナーの調査によれば、自社の抱える問題に対してHadoopは過剰であり、I/O比が低いという意見もある。実際に同社の調査によると回答者の半数強は投資を計画しておらず、2年以内の投資予定も18%とした。