我想简单介绍一下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
不使用当前时间更新?
暂无答案!
目前还没有任何答案,快来回答吧!