【问题标题】:How does Namenode reconstruct the full block information after restart?Namenode重启后如何重建完整的区块信息?
【发布时间】:2017-04-14 09:36:40
【问题描述】:

我正在尝试了解 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如何获取block地址?我的疑问是NN读取fsimage重构文件系统信息,但是fsimage没有块位置信息,那么这些信息是如何重构的?

3) fsimage 是否只存储BLOCK ID,如果是,BLOCK ID 在Datanodes 中是否唯一? BLOCK IDBLOCK地址一样吗?

【问题讨论】:

    标签: hadoop hadoop2 namenode


    【解决方案1】:

    块位置,即存储块的数据节点既不保存在 fsimage 文件中,也不保存在 edit log 中。 Namenode 只在内存中保存这个映射。

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

    在重新启动期间,Namenode 将fsimage 文件加载到内存中并应用来自edit log 的编辑,在数据节点签入其块列表时,会从数据节点中获取缺失的块位置信息。 Namenode 使用块列表中的信息,构建块与其在内存中的位置的映射。

    fsimage 拥有多个块 ID。它包含文件块、块大小、复制因子、访问时间、修改时间、文件权限等信息,但不包含块的位置。

    是的,块 ID 是唯一的。块地址是指块所在的数据节点的地址。

    【讨论】:

    • 非常感谢您提供的详细信息。但是有一件事我仍然无法理解。 Datanode 有块形式的数据,但是 DN 如何知道给定块属于哪个文件?我同意 DN 向 NN 提供块信息,但这如何有助于在 DN 上找到给定文件的块地址。
    • 块由它们的块 id 标识并且它们是唯一的。数据节点在其中保存这些信息。
    • 这是否意味着 DN 会将块 id 发送给 NN,并且由于 fsimage 具有块 id 信息,它会根据块 id 进行映射。如果这是正确的,那么它是有道理的。对于这项工作,块 ID 需要在所有 hdfs 集群中都是唯一的。这是正确的理解吗?
    • 是的。这就是我在答案中解释的。对于每个区块池,区块 ID 都是唯一的。
    • 非常感谢,了解了这一点。谢谢一吨!
    猜你喜欢
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2017-12-24
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多