「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- Apache Hadoopは
- Javaで書かれている。
- 数千ノードおよびペタバイト級の分散処理を支えるOSSフレームワーク。
- Google MapReduce?およびGoogle File System(GFS)論文に触発されたもの。
- 実行プラン作成の観点において、手続き型言語と宣言型言語の中間的なもの。
※ 参考:
Hadoop MapReduce? †
特性 †
- ワークロード
- 非構造化データを対象としたETL(Extract-Transform-Load)処理を想定。
- 並列データベースの構造化データに対する分析クエリような処理は想定していない。
構成 †
- MapReduce?処理系
- 高速なファイルの読み書きが可能な分散ファイルシステム
処理系 †
- 複数の計算機上で効率的に処理を行う、
データ処理用のプログラミング・モデル
Hadoop YARN †
- Hadoop YARN(Yet Another Resource Negotiator)
- Hadoop 2.2から利用可能なリソース管理コンポーネント
特性 †
旧管理コンポーネントとの違い
構成 †
マスタ ・スレーブ型の構成
処理系 †
- マスタも高可用(HA)構成を取ることができる。
- マスタが任意のタイミングで切り替わっても動作が停止しない
- マスタが保持している管理情報は投入されるジョブ数に比例して増加はするが、
- 管理情報(ジョブの投入状況および進捗状況の変更)をApache ZooKeeperに保持して捌く。
詳細 †
Hadoop MapReduce? †
耐障害性設計 †
- 分散ファイルシステムのレプリケーションによりブロックの高い可用性を実現。
- 中間データを二次記憶に適宜書き出すことにより、ジョブのリランが可能。
スケーラビリティ設計 †
- 大きなブロック単位の入出力
従来のNFSなどの分散ファイルシステムと比較し、
高いシーケンシャルアクセス性能を活用できる。
- 近年におけるコモディティサーバはでは、
ネットワークスイッチのI/O性能が各計算機のI/O性能よりも低い。
- 集約処理
・通常の処理
Map側で集約キーによって出力データを分割、
ネットワークを介して分配し、Reduce側でキー毎の集約を行う。
・可換則と結合則を満たす集約処理
Map側で集約処理(部分集約)を行い、
ネットワークへのデータ転送量の削減を試みる。
抽象化インターフェース設計 †
- map()とreduce()なる2つの関数だけをプログラマに定義させる。
- その他の処理はすべて処理系で行う。
Hadoop YARN †
アーキテクチャ †
Hadoopは、以下のモジュールによって構成されている。
Hadoop Common †
他のモジュールから共通して利用されるライブラリ群。
Hadoop MapReduce? †
- MapReduceの実装。
- 可能な限り入力データを保持するDataNodeと同一ノードでMapタスクが実行されるようにスケジューリングされる。
- これにより、大規模データ処理においてもネットワークの負荷を抑えることが可能である。
ファイル・システム †
HDFS以外のファイル・システムもサポートしている。
- Amazon Simple Storage Service (S3)
- OpenStack? Swift
- Microsoft Azure
- FTP、HTTP、およびHTTPS経由で
アクセス可能なファイル・システム
MRv1 †
MapReduceエンジンはひとつのJobTrackerを持ち、
クライアントはこのJobTrackerに向けてMapReduceジョブを投入する。
MRv2 †
Hadoop Distributed File System (HDFS) †
HDFS:Hadoop独自の分散ファイル・システム。
- 大きなファイルを複数のブロック単位(デフォルトで128MB)に分割して、それらを複数のノードにまたがり格納する。
- そのブロックの複製(レプリカ)を複数の異なるノードに格納することで信頼性を確保している。そのため、各ホストはRAIDを必要としない。
- 通常のOSにマウントできないことは制限のひとつであったが、Hadoop 2.2以降のバージョンではNFSv3マウントに対応している。
NameNode? †
マスタの役割を担当する。
- HDFSに関するメタ情報(ファイルとブロックの対応関係など)を保持し、各DataNodeが実データをブロック単位で保持する。
- 単一障害点であったが、Hadoop 2.2でHA機能が実装されたため単一障害点ではなくなった。
DataNode? †
スレーブの役割を担当する。
- レプリケーション数のデフォルトは3で、この場合、
- 2つのデータを同じラック内のノードに、
- 残り1つを異なるラック内のノードに
保存する。
- 数1000台規模までスケールアウト可能。
その場合、数10PB規模のデータを格納できる。
旧管理コンポーネント †
Hadoopクラスタの
JobTracker? †
旧マスタ(リソース管理、ジョブ・スケジューリング)ノード
TaskTracker? †
旧スレーブ(割り当てられた処理の実行)ノード
Hadoop Yet Another Resource Negotiator (YARN) †
課題 †
- リソース管理の効率化
- Hadoop 1系までのMapReduceエンジンにおけるスレーブ(TaskTracker)ではMapタスク用、
Reduceタスク用にそれぞれスロットが用意されており、そこにMapReduceの各タスクが割り当てられる。
- ここで、Mapタスク用のスロットに空きがない場合は、Reduceタスク用のスロットに空きがあったとしても
Mapタスクをこれ以上割り当てることができず、TaskTrackerのリソース使用率が低下する問題があった。
機能 †
を分離したもの。
などの様々な分散処理フレームワークが動作する。
ResourceManager? †
NodeManager? †
- より汎用化したコンテナ単位でリソースを割り当てるので、
ApplicationMaster? †
- MapReduceを含む各アプリケーション用に
それぞれ専用のApplicationMaster?が実行される。
マスタ ・スレーブ型のアーキテクチャ †
Hadoop Common(ライブラリ)を除き、
すべてマスタ ・スレーブ型のアーキテクチャを採る。
特徴 †
- マスタ・スレーブ型は、
スケーラビリティよりも一貫性や単純さを重視する傾向がある。
- 単一障害点となり可用性が低下する場合
- ボトルネックとなり高いスケーラビリティが実現できない場合
がある。
実装 †
Apache ZooKeeperや専用のストレージを利用してマスタの冗長構成を取る
エコシステム †
分散処理フレームワーク †
分散処理エンジン †
SQLクエリエンジン †
分散ストリーム処理 †
DWH、データストア †
HBase、Kudu †
ノーチラス・テクノロジーズが開発した、
Hadoop用の開発・運用フレームワーク。
参考 †
Wikipedia †
MapReduce? †
Google File System(GFS) †
gihyo.jp … 技術評論社 †
Hadoopはどのように動くのか
Hadoopの設計と実装~並列データ処理系Hadoop MapReduce? †
計算機クラスタのためのリソース管理基盤 Hadoop YARN †
Hadoopの歴史 †