Namenode重启后如何重构全块信息?

How does Namenode reconstruct the full block information after restart?

我试图了解 Namenode,我参考了在线 material 并参考了 Hadoop 书:权威指南。

我知道 Namenode 有这样的概念:"edit logs"、"fsimage",我可以在我的 Namenode 中看到以下文件。

============================================= ===========================

-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 23 22:53 edits_0000000000000000001-0000000000000000001
-rw-r--r-- 1 root     root     1048576 Nov 23 23:42 edits_0000000000000000002-0000000000000000002
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 24 00:07 edits_0000000000000000003-0000000000000000003
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 24 21:03 edits_0000000000000000004-0000000000000000004
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 24 22:59 edits_0000000000000000005-0000000000000000005
-rw-r--r-- 1 root     root     1048576 Nov 24 23:00 edits_0000000000000000006-0000000000000000006
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 25 21:15 edits_0000000000000000007-0000000000000000007
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 25 21:34 edits_0000000000000000008-0000000000000000008
-rw-r--r-- 1 root     root     1048576 Nov 26 02:13 edits_inprogress_0000000000000000009
-rw-rw-r-- 1 vevaan24 vevaan24     355 Nov 25 21:15 fsimage_0000000000000000006
-rw-rw-r-- 1 vevaan24 vevaan24      62 Nov 25 21:15 fsimage_0000000000000000006.md5
-rw-r--r-- 1 root     root         355 Nov 26 00:12 fsimage_0000000000000000008
-rw-r--r-- 1 root     root          62 Nov 26 00:12 fsimage_0000000000000000008.md5
-rw-r--r-- 1 root     root           2 Nov 26 00:12 seen_txid
-rw-rw-r-- 1 vevaan24 vevaan24     201 Nov 26 00:12 VERSION

在那本书中提到 fsimage 不在其中存储块位置

我有以下问题:

1) edit logs 是否也存储块位置? (对于新交易?)

2) Namenode和Datanode重启后,Namenode如何获取块地址?我的疑问是NN读取fsimage重建文件系统信息,但是fsimage没有块位置信息,那么这些信息是如何重建的?

3) fsimage 仅存储 BLOCK ID 是真的吗,如果是这样,BLOCK ID 在 Datanodes 中是否唯一? BLOCK ID是否与BLOCK地址相同?

块位置,即存储块的数据节点既不保存在 fsimage 文件中,也不保存在 [=11= 中]。 Namenode 仅在内存中保留此映射。

每个数据节点都有责任保存它正在存储的块列表的信息。

在重新启动期间,Namenode 将 fsimage 文件加载到内存中并应用来自 edit log 的编辑,块位置的缺失信息是在数据节点检查其块列表时从中获取的. Namenode 使用来自块列表的信息,构建块与其在内存中的位置的映射。

fsimage 比块 ID 多。它包含文件块、块大小、复制因子、访问时间、修改时间、文件权限等信息,但不包含块的位置。

是的,块 ID 是唯一的。块地址将引用块所在的数据节点的地址。