hadoop - Namenode重启后如何重构全 block 信息?

标签 hadoop hadoop2 namenode

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

相关文章:

java - 在 map-reduce java 中切换字符串的奇怪错误

hadoop - Hadoop框架如何确定要运行Map作业的节点

hadoop - 色相500服务器错误

hadoop - 假设我有1000万个文件,大小为2 KB,那么我可以将其存储在hdfs中吗?

hadoop - 使用 MapDriver 测试 Hbase 连接

hadoop - 如何在多个hadoop集群中将一个节点用作数据节点

eclipse - 如何在Ubuntu上安装的Hadoop上减少连接/运行 map

hadoop - 配置单元总是减少到 0%

hadoop - 如何才能仅从hdfs联合中的一个 namespace 中排除某些数据节点?

apache - 重启电脑后名称节点不启动(hadoop 2.7.3)