我试图理解Namenode,并且我参考了在线资料,也参考了书Hadoop:权威指南。

我知道Namenode具有类似“编辑日志”,“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在各个Datanode中是否唯一? BLOCK ID 是否与 BLOCK地址相同?

最佳答案

块位置,即存储块的数据节点既不持久保存在 fsimage 文件中,也不持久化在 edit log 中。 Namenode仅将此映射保留在内存中。

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

在重新启动期间,Namenode将fsimage文件加载到内存中,并应用edit log进行的编辑,从数据节点在检查其阻止列表时,会从数据节点获得丢失的块位置信息。 Namenode具有块列表中的信息,可构造块及其在内存中的位置的映射。
fsimage的功能不仅仅在于Block ID。它包含信息,例如文件的块,块大小,复制因子,访问时间,修改时间,文件许可权,但不包含块的位置。

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

关于hadoop - 重新启动后,Namenode如何重建完整的块信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43408972/

10-16 03:23