「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
Apache Hadoopは
アーキテクチャ †
Hadoopは、以下の4つのモジュールによって構成されている。
Hadoop Common †
他のモジュールから共通して利用されるライブラリ群。
Hadoop Distributed File System (HDFS) †
HDFS:Hadoop独自の分散ファイル・システム。
- 大きなファイルを複数のブロック単位(デフォルトで128MB)に分割して、それらを複数のノードにまたがり格納する。
- そのブロックの複製(レプリカ)を複数の異なるノードに格納することで信頼性を確保している。そのため、各ホストはRAIDを必要としない。
- 通常のOSにマウントできないことは制限のひとつであったが、Hadoop 2.2以降のバージョンではNFSv3マウントに対応している。
NameNode? †
マスターの役割を担当する。
- HDFSに関するメタ情報(ファイルとブロックの対応関係など)を保持し、各DataNodeが実データをブロック単位で保持する。
- 任意のDataNodeが故障した場合は、自動でそれを検知し、故障したDataNodeの保持ブロックを別のDataNodeから参照するよう命令する。
- このようにしてDataNodeが故障した場合も自動的にレプリケーション数が維持されるため、DataNodeが故障してもサービスに影響は発生しない。
- 単一障害点であったが、Hadoop 2.2でHA機能が実装されたため単一障害点ではなくなった。
DataNode? †
スレーブの役割を担当する。
- レプリケーション数のデフォルトは3で、この場合、2つのデータを同じラック内のノードに、残り1つを異なるラック内のノードに保存する。
- 数1000台規模までスケールアウト可能。その場合、数10PB規模のデータを格納できる。
Hadoop Yet Another Resource Negotiator (YARN) †
Hadoopクラスタのリソース管理、ジョブスケジューリングを担当。Hadoop 2.2から利用可能。
課題 †
- リソース管理の効率化
- Hadoop 1系までのMapReduceエンジンにおけるスレーブ(TaskTracker)ではMapタスク用、
Reduceタスク用にそれぞれスロットが用意されており、そこにMapReduceの各タスクが割り当てられる。
- ここで、Mapタスク用のスロットに空きがない場合は、Reduceタスク用のスロットに空きがあったとしても
Mapタスクをこれ以上割り当てることができず、TaskTrackerのリソース使用率が低下する問題があった。
機能 †
Hadoop 1系までのMapReduceからクラスタのリソース管理、ジョブスケジューリングを分離したもの。
などの様々な分散処理フレームワークが動作する。
Hadoop MapReduce? †
- MapReduceの実装。
- 可能な限り入力データを保持するDataNodeと同一ノードでMapタスクが実行されるようにスケジューリングされる。
- これにより、大規模データ処理においてもネットワークの負荷を抑えることが可能である。
ファイル・システム †
HDFS以外のファイル・システムもサポートしている。
- Amazon Simple Storage Service (S3)
- OpenStack? Swift
- Microsoft Azure
- FTP、HTTP、およびHTTPS経由でアクセス可能なファイル・システム
MRv1 †
MapReduceエンジンはひとつのJobTrackerを持ち、クライアントはこのJobTrackerに向けてMapReduceジョブを投入する。
MRv2 †
JobTracker? †
旧マスタ(リソース管理、ジョブスケジューリング)ノード
TaskTracker? †
旧スレーブ(割り当てられた処理の実行)ノード
- TaskTrackerが停止するか、実行中のタスクがタイムアウトすると、その部分のタスクは再スケジュールされる。
ResourceManager? †
投入されたMapReduceジョブを管理するノード。
NodeManager? †
ApplicationMaster? †
MapReduceを含む各アプリケーション用にそれぞれ専用のApplicationMaster?が実行される。
- Mapタスク、Reduceタスクの割り当てやタスクの進捗管理を担当する。
- 必要なリソースは都度ResourceManagerに問合せ払い出してもらう。
エコシステム †
分散処理フレームワーク †
分散処理エンジン †
分散ストリーム処理 †
Apache HBase †
- オープンソースの、列指向、分散データベース。HDFSを活用する。
- ビッグデータに対してランダムなリアルタイムの読み書きアクセスを行う必要がある場合に使う。
普通のハードウェアのクラスタ上で、数十億行 x 数百万列規模の超巨大テーブルを格納できる。
概要 †
- Javaにより書かれている。
- Powerset社において自然言語処理を行うため、
大規模データの処理プロジェクトとして始まった。
機能 †
- HDFSの上でGoogleのBigTable?のような機能を提供する。
MapReduceジョブではなくデータベース上でリアルタイムに実行される。
- 独自のメタデータリポジトリとカラム型ストレージレイアウトがある。
- テーブルはHadoop上のMapReduceジョブの入出力として機能
- Java APIのほか、REST、Avro、ThriftといったゲートウェイAPIを通じアクセス可能
- クエリ
- カスタム言語でパーサ、クエリプランナ、クエリ実行エンジンを利用できる。
- 完全にACIDに準拠しておらず、複雑なアクセスパターン(結合など)は使用できない。
- 近年ではパフォーマンスが向上し、データ駆動型のWebサイトでも使用されている。
参考 †
Apache Hive †
概要 †
Hadoopの上に構築されたデータウェアハウス 構築環境
- 事前定義されたスキーマを提供する必要がある。
- Hadoop用高級言語(Pigと同様にSQLライクな記法でMapReduceを書けるDSL)
機能 †
データウェアハウススタイルのバッチ分析ワークロードを処理する機能。
- クエリの高速化のため、ビットマップインデックスを含めたインデクス機能
- 日付型・文字列型を扱ったり他のデータ操作を可能とする組み込みユーザ定義関数
- MapReduceをサポートしたSQLライクなHiveQLでデータの集約・問合・分析を行う。
コンパイラがHiveQL文をMapReduceジョブの有向非巡回グラフに変換し、それがHadoopに渡され実行される。
- SQLに基づいている。
- JDBCに準拠するものの、厳密にはSQL-92をフルサポートしてはいない。
- 副問い合わせ、インデクスのサポートも限定的。
- 更新処理、トランザクション、マテリアライズドビューはサポートしない。
- ストレージタイプ
- プレーンテキスト、RCFile、HBase
- メタデータをRDBMSに格納する機能
- Hadoop環境に格納された圧縮データを扱う機能
コンポーネント †
以下の5つの主要コンポーネントで構成されている。
- クエリプランナ
- クエリ実行エンジン
- メタデータリポジトリ
- カラム型ストレージレイアウト
参考 †
Apache Kudu †
HDFSとHBaseの長年のギャップを埋める
ノーチラス・テクノロジーズが開発した、Hadoop用の開発・運用フレームワーク
参考 †
MapReduce? †
Google File System(GFS) †