我试图了解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,块等中)。

最佳答案

好吧,我尝试解释一下:

编辑日志

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

FsImage

该文件包含整个文件系统 namespace ,包括块到文件的映射以及文件系统属性。因此,wich文件由哪些块组成。哪些块保存在哪里等等。

如果启动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,块等中)。

该信息将保留在FsImage中。

我希望我能帮上忙。

09-11 02:11