namenode如何在重启后重建完整的块信息?

g9icjywg  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(363)

我试图理解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如何获得块地址?我的疑问是 fsimage 重建文件系统信息,但是 fsimage 没有区块位置信息,如何重建这些信息?
3) 是真的吗 fsimage 只存储块id,如果是,块id在数据节点之间是唯一的吗?块id和块地址的id相同吗?

gab6jxml

gab6jxml1#

块位置,即存储块的数据节点,既不在 fsimage 文件中也没有 edit log . namenode只在内存中保留此Map。
每个数据节点负责保存其存储的块列表的信息。
在重新启动期间,namenode加载 fsimage 文件到内存中并应用 edit log ,块位置的缺失信息是在数据节点使用其块列表签入时从数据节点获取的。namenode利用块列表中的信息构造块的Map及其在内存中的位置。 fsimage 包含的信息多于块id。它包含文件的块、块大小、复制因子、访问时间、修改时间、文件权限等信息,但不包含块的位置。
是的,块ID是唯一的。块地址是指块所在的数据节点的地址。

相关问题