namenode以及fsimage和edit\ logs concept

5sxhfpxr  于 2021-05-27  发布在  Hadoop
关注(0)|答案(0)|浏览(284)

我想简单介绍一下namenodes和 fsimage/edit_logs ,以及namenode在hadoop集群中的工作方式,
这个 NameNode 将对文件系统的修改存储为附加到本机文件系统文件的日志。
NameNode 启动时,它从图像文件中读取hdfs状态, fsimage ,然后应用编辑日志文件中的编辑。
然后它将新的hdfs状态写入 fsimage 并以空编辑文件开始正常操作。 FsImage 是存储在操作系统文件系统上的一个文件,其中包含hdfs的完整目录结构(命名空间),详细说明数据块上的数据位置以及哪些块存储在哪个节点上。 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个编辑日志,那么 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 在重放所有数据后,以活动/备用状态完全启动 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 not update-时间从2003年1月开始)

-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 不使用当前时间更新?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题