我试图理解 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
不在其中存储 block 位置。
我有以下问题:
1) edit logs
是否也存储 block 位置? (对于新交易?)
2)当Namenode和Datanode重启后,Namenode如何获取 block 地址?我的疑惑是NN读取fsimage
重建文件系统信息,但是fsimage
没有 block 位置信息,那么这些信息是如何重建的?
3) fsimage
存储BLOCK ID only 是真的吗,如果是这样,BLOCK ID 在Datanodes 中是唯一的吗? BLOCK ID是否与BLOCK地址相同?
最佳答案
block 位置,即存储 block 的数据节点既不保存在 fsimage
文件中,也不保存在 edit log
。 Namenode 仅在内存中保留此映射。
每个数据节点都有责任保存它正在存储的 block 列表的信息。
在重新启动期间,Namenode 将 fsimage
文件加载到内存中并应用来自 edit log
的编辑, block 位置的缺失信息是从数据节点检查时获得的在他们的阻止列表中。 Namenode 使用来自 block 列表的信息,构建 block 与其在内存中的位置的映射。
fsimage
不仅仅是 block ID。它包含文件 block 、 block 大小、复制因子、访问时间、修改时间、文件权限等信息,但不包含 block 的位置。
是, block ID 是唯一的。 block 地址是指 block 所在的数据节点的地址。
关于hadoop - Namenode重启后如何重构全 block 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43408972/