Namenode在硬盘和内存中存储哪些信息?

时间:2016-11-27 10:15:25

标签: hadoop hdfs hadoop2

我正在尝试理解Namenode,我也提到了在线资料,并提到了书Hadoop: The definitive guide

我知道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

=============================================== ==========================

正如预期的那样,我在namenode中看到了所有这些文件。但是我还没有理解这个概念,我有以下问题,任何人都可以帮助我理解这一点。

Q1)什么是fsimage文件?为什么存在多个fsimage文件?

Q2)什么是edit_000文件?为什么存在多个edit_000文件?

Q3)有什么.md5文件?他们的目的是什么?

我还读到NAMENODE在MEMORY中保留了一些数据,并将一些数据保存在HARD-DISK中,但是要理解硬盘中存储的信息类型以及内存中剩余的信息有点令人困惑。

Q4)Namenode内存是否有从fsimage或edit_000或两者获取的信息?

Q5)重新启动Namenode和Datanode时,如何构建元数据(即哪个文件存储在哪个datanode,block等中)。

1 个答案:

答案 0 :(得分:2)

好的,我试着解释一下:

<强>的Editlog

EditLog是一个事务日志,用于记录文件系统元数据发生的每个更改。例如,创建新文件,重命名文件等。这将始终在EditLog中生成一个条目。

<强>的FsImage

此文件包含整个文件系统命名空间,包括块到文件和文件系统属性的映射。所以这个文件由哪些块组成。哪些块保存在哪里等等。

如果启动NameNode,Hadoop会将完整的FsImage文件加载到您的内存中。之后,将EditLog中的所有事务应用到FsImage的内存中表示,并将此新版本刷新到磁盘上的新FsImage中。这只发生一次(启动时)。之后,Hadoop仅使用内存中表示。您的硬盘上的FsImage不会被触及。

您的一些问题

Q1)为什么存在多个fsimage文件?

如前所述,加载了FsImage,刷新了EditLog,并保存了新版本。

Q1)为什么存在多个edit_000文件?

在Hadoop刷新EditLog并保留新版本的FsImage后,它启动一个新的EditLog。这在Hadoop中称为检查点

Q3)有什么.md5文件?他们的目的是什么?

MD5是一个哈希,用于检查FsImage是否未被破坏。

Q5)重新启动Namenode和Datanode时,如何构建元数据(即哪个文件存储在哪个datanode,block等)。

信息保存在FsImage中。

我希望我能提供帮助。