Skip to content
Published on

HDFS NameNodeとDataNode

Authors

HDFSアーキテクチャ

hadoop-hdfs-architecture

HDFSのアーキテクチャは、上の図のように大きく分けて、ファイルシステムのメタ情報を格納するNameNodeと、実際のデータを格納するDataNodeに分類できます。ブロック単位に分割されたデータは、ワーカーノードに常駐するDataNodeと呼ばれるプロセスによって管理され、このデータブロックがどこにあるか、どのように複製されているかはNameNodeに保存されています。クライアントはデータを取得するために、必ずNameNodeにアクセスしてブロックの位置情報を取得してから、DataNodeにアクセスする必要があります。

NameNode

  • fsimage: ブロック情報を含むメタデータはリアルタイム性を保証するためにNameNodeのメモリに格納されますが、永続性のためにこれを定期的にスナップショット形式のファイルとして保存します。これをfsimageと呼びます。
  • edit log: 最新のfsimageから現在までの変更履歴を保管します。
  • DataNode監視: DataNodeは自身の状態を示すハートビートをNameNodeに送信し、一定時間内にハートビートがない場合、そのDataNodeをデッドノードと見なします。
  • レプリカ管理: DataNodeはいつでもダウンする可能性があるため、パイプラインで構成された複数のDataNodeにブロックのコピーを複製(レプリケーション)するよう設定されています。デフォルト設定値は3で、ラック全体がダウンした場合でもデータ損失を防ぐために、ラックアウェアネスを考慮して、すべてのコピーブロックを1つのラックに保存することを避けるよう設定されています。
  • アクセス制御: NameNodeにアクセスするユーザーまたはグループ情報に基づいて、ファイルやディレクトリへのアクセスを管理します。

DataNode

  • データ格納: DataNodeはHDFSの実際のデータブロックを格納します。クライアントまたは他のDataNodeからデータを受信してローカルファイルシステムに保存し、必要に応じてデータを読み取って転送します。

  • データ複製: HDFSは耐障害性を保証するため、各データブロックを複数のDataNodeに複製します。NameNodeの指示に従い、DataNodeは他のDataNodeにデータブロックを複製したり、他のDataNodeからデータブロックを受け取って保存します。

  • ハートビートとブロックレポート: DataNodeは定期的にNameNodeに「ハートビート」メッセージを送信し、自身の状態と容量を報告します。また、一定の間隔で保有するすべてのデータブロックのリストである「ブロックレポート」をNameNodeに送信します。

  • データ検証: DataNodeは定期的に格納されたデータブロックを検査し、データの整合性を確認します。この検査を通じて、データのエラーや破損を検知し、対処することができます。

  • クライアントリクエスト処理: クライアントがデータの読み書きを要求した場合、DataNodeはそのリクエストを処理してデータを転送または受信します。

  • 削除と再配置: NameNodeの指示に従い、DataNodeはデータブロックを削除したり、他のDataNodeに移動させることができます。これはストレージ空間の効率的な活用とレプリケーションファクタの要件を満たすための作業です。

  • ブロック復旧: ブロックが破損またはアクセス不能な場合、DataNodeは他のDataNodeのレプリカから該当ブロックを復旧することができます。