Apache Hadoop

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Apache Hadoop
Hadoop logo.svg
開発元 Apacheソフトウェア財団
最新版 2.7.0 / 2015年4月21日(2か月前) (2015-04-21[1]
プログラミング言語 Java
対応OS クロスプラットフォーム
サポート状況 Active
種別 分散ファイルシステム
ライセンス Apache License 2.0
公式サイト http://hadoop.apache.org/
テンプレートを表示

Apache Hadoopは大規模データの分散処理を支えるオープンソースソフトウェアフレームワークであり、Javaで書かれている。Hadoopはアプリケーションが数千ノードおよびペタバイト級のデータを処理することを可能としている。HadoopはGoogleMapReduceおよびGoogle File System(GFS)論文に触発されたものである。

HadoopはApacheのトップレベルプロジェクトの1つであり、世界規模の開発貢献者コミュニティによって開発され、使用されている。[2]

アーキテクチャ[編集]

Hadoopは、以下の4つのモジュールによって構成されている。

  • Hadoop Common: 他のモジュールから共通して利用されるライブラリ群。
  • Hadoop Distributed File System (HDFS): Hadoop独自の分散ファイルシステム。
  • Hadoop YARN: Hadoopクラスタのリソース管理や、Hadoop上で動作するアプリケーションのスケジューリングを担当する。
  • Hadoop MapReduce: Hadoop上で動作するMapReduceフレームワークの実装。

また、HadoopではHDFS以外のファイルシステムもサポートしている。2015年5月現在では、下記のファイルシステムをサポートしている。

Hadoop Distributed File System (HDFS)[編集]

Hadoop Distributed File System (HDFS)は大きなファイルを複数のブロック単位(デフォルトで128MB)に分割して、それらを複数のノードにまたがり格納する。そして、そのブロックの複製を複数の異なるノードに格納することで信頼性を確保している。そのため、各ホストはRAIDを必要としない。レプリケーション数のデフォルトは3で、この場合、2つのデータを同じラック内のノードに、残り1つを異なるラック内のノードに保存する。

HDFSはマスタースレーブ型の構成で、マスターの役割を担当するのがNameNode、スレーブの役割を担当するのがDataNodeである。NameNodeはHDFSに関するメタ情報(ファイルとブロックの対応関係など)を保持し、DataNodeが実データ(ブロック)を保持する。DataNodeは数1000台規模までスケールアウト可能で、その場合、数10PB規模のデータを格納することができる。DataNodeが故障した場合は、NameNodeが自動でそれを検知し、故障したDataNodeが保持していたデータを別のDataNodeに複製するよう命令する。このようにしてDataNodeが故障した場合も自動的にレプリカ数が維持されるため、DataNodeが故障してもサービスに影響は発生しない。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から利用可能である。

  • クラスタ規模の拡大: Hadoop 1系までのMapReduceエンジンにおけるマスタ(JobTracker)が、クラスタのリソース管理、クラスタ内で実行されるMapReduceジョブのスケジューリング、また、MapReduceジョブ自体のスケジューリング(各タスクに対する入力データの割り当てや進捗管理)の3つを担当する必要があったため、JobTrackerの負荷が大きい。そのため、Hadoopクラスタの台数は1000台程度が限界であった。
  • リソース管理の効率化: Hadoop 1系までのMapReduceエンジンにおけるスレーブ(TaskTracker)ではMapタスク用、Reduceタスク用にそれぞれスロットが用意されており、そこにMapReduceの各タスクが割り当てられる。ここで、Mapタスク用のスロットに空きがない場合は、Reduceタスク用のスロットに空きがあったとしてもMapタスクをこれ以上割り当てることができず、TaskTrackerのリソース使用率が低下する問題があった。
  • MapReduce以外の分散処理の実行: Hadoopで分散処理するためには、必ずMapReduceの仕組みに当てはめる必要があった。MapReduceが2回以上連続するような処理を実行する場合、前段のMapReduceジョブの処理結果をHDFSに書き込み、それを後続のMapReduceで読み込む、という流れになるが、ここでHDFSに中間データを書き込むため、処理が非効率である。多段のMapReduceとなるような処理を高速化するために、MapReduceフレームワークとは異なる分散処理が必要であった。

YARNは、Hadoop 1系までのMapReduceからクラスタのリソース管理、ジョブスケジューリングを分離したものである。YARNもHDFSと同様に、マスタースレーブ型の構成で、マスターの役割(リソース管理、ジョブスケジューリング)を担当するのがResourceManager、スレーブの役割(割り当てられた処理の実行)を担当するのがNodeManagerである。MapReduceを含む各アプリケーション用にそれぞれ専用のApplicationMasterが実行され、アプリケーション自体のスケジューリングはApplicationMasterが担当する。NodeManagerはMapReduce用に特化したスロットではなく、より汎用化したコンテナ単位でリソースを割り当てる。ApplicationMasterもそのコンテナ上で動作する。また、YARN上ではMapReduce以外にも、 Apache Spark(英語版)Apache Storm(英語版)、Apache Tez[3]などの様々な分散処理フレームワークが動作する。

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ジョブを再実行する必要がある。

他のアプリケーション[編集]

主要なユーザ[編集]

Yahoo!におけるHadoop[編集]

他のユーザ[編集]

Yahoo! 以外にも様々な組織がHadoopを使って大規模分散システムを構築している。以下に例を挙げる:[4][5]

Amazon EC2/S3サービスにおけるHadoop[編集]

Sun Grid EngineにおけるHadoop[編集]

HadoopにおけるSun Grid Engine ― および於分散コンピューティング/コンピュータ・クラスター環境におけるジョブ管理システム。[6]

参考書籍[編集]

脚注[編集]

  1. ^ Hadoop Releases”. Hadoop.apache.org. 2015年5月16日閲覧。
  2. ^ Hadoop Users List
  3. ^ Apache Tez
  4. ^ PoweredBy
  5. ^ Apache HadoopやApache CassandraなどをはじめとするOSS(オープンソースソフトウエア)を活用
  6. ^ HDFS-Aware Scheduling With Grid Engine

関連事項[編集]

外部リンク[編集]