3

本 Hadoop: The Definitive Guide を読んでいるときに、次の行を含むこのページに出くわしました。

ネームノードは、特定のファイルのすべてのブロックが配置されているデータノードも認識していますが、システムの起動時にデータノードからこの情報が再構築されるため、ブロックの場所を永続的に保存することはありません

これがどのように機能するかを理解するのに苦労しています。たとえば、レプリケーション ファクター 3 の 8 ノード クラスターに 1 GB のファイルをコピーするとします。したがって、各データノードには 1 つのブロックがあり、これらのブロックは他のノードにレプリケートされ、各ノードのブロックの総数は事実上 3 になります。 . これで、namenode は各ブロックの位置を含むインデックスを保持することになっています。しかし、テキストによると、 namenode がブロックの場所を永続的に保存しない場合、クラスターがシャットダウンされて再起動された後、それらはどのように再構築されますか。どのブロックがどのファイルに属しているかを知る方法はありません。誰かが私にこれを説明してもらえますか?

4

2 に答える 2

3

namenode は、ファイルに関するいくつかの状態 (名前、パス、サイズ、ブロック サイズ、ブロック ID など) を保持しますが、ブロックの物理的な場所は保持しません。

データ ノードが起動すると、dfs データ ディレクトリを効果的にツリー ウォークして、所有するすべてのファイル ブロックを検出し、完了すると、ホストするブロックを名前ノードに報告します。

namenode は、ファイルのマップを作成して、各データ ノードからのレポートから場所をブロックします。

これは、クラスタの初回起動時にセーフ モードから復帰するのに数分かかる場合がある理由の 1 つです。多数のファイルがある場合、各データ ノードがツリー ウォークしてブロックを検出するのに数分かかることがあります。ホスト。

于 2013-01-22T12:25:28.633 に答える
-1

各 fsimage ファイルには、ファイルシステム内のすべてのディレクトリおよびファイル i ノードのシリアル化された形式が含まれています。各 inode は、ファイルまたはディレクトリのメタデータの内部表現であり、ファイルのレプリケーション レベル、変更とアクセス時間、アクセス許可、ブロック サイズ、ファイルを構成するブロックなどの情報が含まれています。ディレクトリの場合、変更時刻、権限、クォータ メタデータが保存されます。fsimage ファイルには、ブロックが保存されているデータノードは記録されません。代わりに、namenode はこのマッピングをメモリに保持します。これは、データノードがクラスターに参加するときにブロックリストを要求し、その後定期的に namenode のブロックマッピングが最新であることを確認することによって構築されます。

于 2016-06-02T22:09:10.700 に答える