.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

Apache Hadoopは

  • Javaで書かれている。
  • 数千ノードおよびペタバイト級の分散処理を支えるOSSフレームワーク。
  • GoogleのMapReduceおよびGoogle File System(GFS)論文に触発されたもの。

アーキテクチャ

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

Hadoop Common

他のモジュールから共通して利用されるライブラリ群。

Hadoop Distributed File System (HDFS)

HDFS:Hadoop独自の分散ファイル・システム。

  • 大きなファイルを複数のブロック単位(デフォルトで128MB)に分割して、それらを複数のノードにまたがり格納する。
  • そのブロックの複製(レプリカ)を複数の異なるノードに格納することで信頼性を確保している。そのため、各ホストはRAIDを必要としない。
  • 通常のOSにマウントできないことは制限のひとつであったが、Hadoop 2.2以降のバージョンではNFSv3マウントに対応している。
  • HDFSはマスタースレーブ型の構成

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

機能

Hadoop 1系までのMapReduceからクラスタのリソース管理、ジョブスケジューリングを分離したもの。

  • HDFSと同様に、マスタースレーブ型の構成

などの様々な分散処理フレームワークが動作する。

Hadoop MapReduce?

  • MapReduceの実装。
    • 可能な限り入力データを保持するDataNodeと同一ノードでMapタスクが実行されるようにスケジューリングされる。
    • これにより、大規模データ処理においてもネットワークの負荷を抑えることが可能である。
  • Hadoop 2系以降は、MRv1をサポートしていない。
    YARN上でMapReduce上が動作し、MRv2と呼ばれる。

ファイル・システム

HDFS以外のファイル・システムもサポートしている。

  • Amazon Simple Storage Service (S3)
  • OpenStack? Swift
  • Microsoft Azure
  • FTP、HTTP、およびHTTPS経由でアクセス可能なファイル・システム

MRv1

MapReduceエンジンはひとつのJobTrackerを持ち、クライアントはこのJobTrackerに向けてMapReduceジョブを投入する。

MRv2

Hadoop MapReduceの管理コンポーネント

JobTracker?

旧マスタ(リソース管理、ジョブスケジューリング)ノード

TaskTracker?

旧スレーブ(割り当てられた処理の実行)ノード

  • TaskTrackerが停止するか、実行中のタスクがタイムアウトすると、その部分のタスクは再スケジュールされる。

ResourceManager?

投入されたMapReduceジョブを管理するノード。

NodeManager?

  • MapReduce用に特化したスロットではなく、
    より汎用化したコンテナ単位でリソースを割り当てる。
  • ApplicationMasterもそのコンテナ上で動作する。

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

HDFSHBaseの長年のギャップを埋める

Asakusa Framework

ノーチラス・テクノロジーズが開発した、Hadoop用の開発・運用フレームワーク

参考

MapReduce?

Google File System(GFS)


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-15 (金) 12:51:13 (4d)