読者です 読者をやめる 読者になる 読者になる

HDFS Architecture Guideを読んだ

HDFS(Hadoop Distributed File System)はHadoopのデータストアとして使われる分散ファイルシステムである。
Google File System」を元に設計されている。
高い耐障害性を持つこと、高いスループットが大きな特徴である。
また、大規模データ処理に使われるため、巨大なデータを格納できるように設計してある。

以下、メモ書き。

3 NameNode and DataNode

  • HDFSはマスタースレーブ型のアーキテクチャを採用している。
  • マスターノードのことをNameNode、スレーブノードのことをDataNodeと呼ぶ。
  • NameNodeはファイルやディレクトリの操作をとり行う。また、ブロック(後述)をどのDataNodeで作成するかを決定する。
  • DataNodeはNameNodeからの命令を受けて、ブロックの作成・削除・複製を行う。

4 The File System Namespace

  • HDFSでは通常のファイルシステムのようにディレクトリをつくることができる。
  • ファイルの作成、消去、移動ができる。
  • ファイルの変更はできない。
  • ハードリンクやソフトリンクを作ることはできない。
  • こういったファイル操作はNameNodeに伝えられ、記録される。

5 Data Replication

  • ファイルは同じ大きさの複数のブロック(最後のブロックのみ大きさが違うことを許容する)に分割される。
  • 一つのブロックがDataNodeのローカルのファイルシステムに一つのファイルとして保存される。
  • ブロックの大きさは設定によって変えることができる。(デフォルトは64MB)
  • ブロックは耐障害性のために複製される。
  • 複製数は設定によって変更できる。(デフォルトは3)
  • 故障検知のため、NameNodeは定期的にDataNodeからハートビートとBlockreportを受け取る。
  • BlockreportにはDataNodeが持っているブロックの情報が含まれている。
  • 複製はラックを考慮して行われる。(例えば、複製数が3つの場合、2つの複製は同じラックに、後の一つは別のラックに。こうすることにより、ネットワーク負荷を下げると共に、ラック全体が故障したときの故障耐性が得られる。)

6 The Persistence of File System Metadata

  • NameNodeはファイル操作(ファイルの作成、削除、複製数の設定の変更)の情報をEditLogに記録する。
  • NameNodeはファイルシステムの情報(ファイルやディレクトリの情報、ファイルとブロックの対応関係の情報、ファイルシステムメタデータに関する情報)をFsImageに記録する。
  • EditLogとFsImageはNameNodeのローカルのファイルシステムで保存されている。
  • NameNodeは起動するとFsImageとEditLogを読み出し、EditLogをもとにFsImageを更新する。
  • DataNodeは起動するとNameNodeにBlockreportを送る。これによってNameNodeはブロックとそのブロックを保持しているDataNodeの対応関係を知ることができる。

8 Robustness

  • DataNodeからのハートビートが途切れるとNameNodeはそのDataNodeを死んだものと見なし、今後一切のリクエストを送らなくなる。
  • DataNodeが死ぬと、ブロックの複製数が設定値を下回るので再びブロックの複製を行う。
  • DataNodeに保存されているブロックの容量が一定以上になると、自動的にそのDataNodeのブロックは他のDateNodeに移動させられる。
  • EditLogとFsImageが消失すると、HDFSは処理を続行できなくなる。
  • NameNodeはHDFSの単一障害点である。