我试图理解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/