仮想化道場

並列分散処理のフレームワークとなるHadoop 2.0 (NameNodeのHA機能をサポートしたHadoop 2.x)

NameNodeのHA機能をサポートしたHadoop 2.x

Hadoopシステムの概要図。DataNodeで処理を行い、NameNodeやJobTrackerが処理をDataNodeに振り分けるNTTデータの資料より)

 さて次に、具体的な機能面の違いを見ていく。

 Hadoopでは、複数のDataNodeでデータの処理を行い、このDataNodeの管理をNameNodeが行う仕組みになっている。

 Hadoop 1.x系で弱点といわれていた点に、NameNodeが冗長化されていないことがある。NameNodeが1つしか存在しないため、ここにトラブルが起こってシステムがダウンすると、DataNodeの結果も無に帰してしまうのだ。

 そこで多くのシステムでは、Hadoopとは別のアプリケーションやミドルウェアを利用し、NameNodeサーバーをHA化していたが、Hadoop 2.xでは、NameNode自体にHA化の機能が搭載された。

 Hadoop 2.xのHA対応には、ZooKeeperが使われている。ZooKeeperは、Apache Hadoopの1プロジェクトとして開発が始まった。ZooKeeperでは、設定情報の保守、名前付け、分散同期化の提供、および各種グループサービスの提供を目的とした集中型サービスとなっている。これを利用することで、システムダウンを検知してフェイルオーバーを行う。

 編集ログについては、Quorum Journal Managerにより分散してJournalNodeへ書き込む仕組みを利用することで、可用性を確保している。

【お詫びと訂正】
初出時、「NameNodeの共有ストレージとしてはNFSが利用されているが、将来的には共有ストレージを必要としない仕組みの実装も予定されている」と記載しておりましたが、すでにQuorum Journal Managerによる仕組みが実装されておりました。お詫びして訂正いたします。

HDFS HAでは、NameNodeが単一障害点だったことを冗長化している(Clouderaの資料より)
編集ログ書き込みの仕組み(同)

 Hadoopでは前述のように、複数のDataNodeでデータの処理を行い、このDataNodeの管理をNameNodeが行っている。1つのHadoopシステムには、NameNodeが1つだけ用意されている(HAなどで複数あるのは別)ため、1度に1つのデータ処理しか行えない。

 これを改善し、1つのHadoopシステムを複数のテナントで利用できるようにする仕組みがHDFS Federationだ。1つのHadoopシステムに複数のNameNodeが動作するようにすることで、1つのHadoopシステムの中で、独立した形で複数のデータ処理を行えるようになった。つまりHDFS Federationは、1つの大規模なHadoopシステムを複数のテナントで利用できるような仕組みといえる。

HDFS Federationは、マルチテナントをサポートする(HortonworksのWebサイトより)

 HDFS関連では、HDFS Snapshotがサポートされた。

 HDFSは、データを分割して、複数のDataNodeのストレージに保存している。これにより、データを多重化して、冗長性を確保している。

 しかし、Hadoopシステム内部でデータを冗長化していると、ディザスタリカバリなどが行えないため、読み取り専用のHDFSコピーを作成するHDFS Snapshotが用意された。名前の通り、よく使われるストレージ機能のスナップショットと同じようなものだ。

 HDFS Snapshotは、データを丸ままバックアップするのではなく、差分だけをバックアップするため、スナップショットのデータ量は小さくなる。さらに、スナップショットにかかる時間も短縮されている。

(山本 雅史)