hadoop集群中的Namenode以及fsimage和Edit_logs概念

时间:2020-01-31 09:43:20

标签: hadoop hdfs namenode

我想简短介绍一下namenodes和fsimage/edit_logs,以及namenode在hadoop集群中的工作原理,

NameNode将对文件系统的修改存储为日志,并附加到本机文件系统文件中,以进行编辑。

NameNode启动时,它将从图像文件fsimage中读取HDFS状态,然后从编辑日志文件中应用编辑。

然后将新的HDFS状态写入fsimage,并使用空的编辑文件开始正常操作。

FsImage是存储在OS文件系统上的文件,其中包含HDFS的完整目录结构(命名空间),其中包含有关数据在数据块上的位置以及哪些块存储在哪个节点上的详细信息。 / p>

EditLogs是一个事务日志,记录HDFS文件系统中的更改或在HDFS集群上执行的任何操作,例如添加新块,

复制,删除等,它记录自创建上一个FsImage以来的更改,

然后将更改合并到FsImage文件中以创建新的FsImage文件。

当我们启动namenode时,最新的FsImage文件将被加载到“内存中”,同时

如果EditLog文件不包含最新信息,也会将

FsImage文件加载到内存中。

Namenode将元数据存储在“内存中”,以便尽可能快地满足多个客户端请求。

如果不这样做,则对于每个操作,namenode必须将元数据信息从磁盘读取到内存中。此过程将为每个操作消耗更多的磁盘查找时间。

让我们进行总结


HDFS元数据的持久性大致包括两类文件:

fsimage

在某个时间点包含文件系统的完整状态。每次文件系统修改都会分配一个唯一的,单调增加的事务ID。 fsimage文件代表所有修改后直到特定事务​​ID的文件系统状态。

编辑文件

包含一个日志,其中列出了在最近的fsimage之后进行的每个文件系统更改(文件创建,删除或修改)。

检查点

是合并最新fsimage内容的过程,合并该fsimage之后将应用所有编辑,以创建新的fsimage。检查点可以通过配置策略自动触发,也可以通过HDFS管理命令手动触发。


直到现在有关namenode和编辑日志的摘要

现在让我们谈论一下我们的集群(其基于HDP版本2.6.5

在每个/var/hadoop/hdfs/namenode/current的文件夹namenode中,我们有以下fsimage文件

fsimage_0000000000000031788                                                                                                                                100%  104KB 104.1KB/s   00:00
fsimage_0000000000000031788.md5                                                                                                                            100%   62     0.1KB/s   00:00
fsimage_0000000000000041641                                                                                                                                100%  104KB 104.1KB/s   00:00
fsimage_0000000000000041641.md5                                                                                                                            100%   62     0.1KB/s   00:00

编辑日志

 .
 .
 .

-rw-r--r--  1 hdfs hadoop  328138542 Jan 23 12:37 edits_0000000022056979997-0000000022059239786
-rw-r--r--  1 hdfs hadoop  301415558 Jan 23 13:07 edits_0000000022059239787-0000000022061345588
-rw-r--r--  1 hdfs hadoop  311747850 Jan 23 13:37 edits_0000000022061345589-0000000022063490851
-rw-r--r--  1 hdfs hadoop         12 Jan 23 13:37 seen_txid
-rw-r--r--  1 hdfs hadoop  330301440 Jan 24 07:10 edits_0000000022063490852-0000000022065448335

现在,我们同时启动namenode

namenode日志中,我们看到namenode正在重播每个编辑日志(因此,例如,如果我们有1965 edit_logs,则namenode会一个一个地重播它们。 ...)

示例:

2020-01-27 06:20:37,306 INFO  namenode.FSEditLogLoader (FSEditLogLoader.java:loadEditRecords(266)) - replaying edit log: 2072759/2282427 transactions completed. (91%)
2020-01-27 06:20:38,307 INFO  namenode.FSEditLogLoader (FSEditLogLoader.java:loadEditRecords(266)) - replaying edit log: 2214991/2282427 transactions completed. (97%)

因此,namenode在重播了所有1965 edit_logs之后完全从活动/备用状态开始, 这需要将近17个小时

因此,我们同时重启两个namenodes后,我们希望获得fsimage个文件为最新

例如:

-rw-r--r-- 1 hdfs hadoop  445716 Jan 31 08:11 fsimage_0000000000000132222
-rw-r--r-- 1 hdfs hadoop      62 Jan 31 08:11 fsimage_0000000000000132222.md5

但是在我们的例子中,两个namenode重新启动后,我们得到了这个示例(fsimage无法更新-时间从1月3日开始)

-rw-r--r-- 1 hdfs hadoop  445716 Jan 03 07:11 fsimage_0000000000000132222
-rw-r--r-- 1 hdfs hadoop      62 Jan 03 07:11 fsimage_0000000000000132222.md5

所以我们可以看到fsimage尚未更新,尽管namenode已完全启动(17小时后)并且处于活动/备用状态

任何建议,为什么fsimage不会在当前时间更新?

0 个答案:

没有答案