由于editlog记录了集群运行期间所有对HDFS的相关操作,所以这个文件会很大

集群关闭后再次启动时会将Fsimage,editlog加载到内存中,进行合并,恢复到集群上次关闭的那个状态
由于editlog文件很大,所以集群再次启动时会花费较长时间

为了加快集群的启动时间,所以使用secondarynameNode辅助NameNode合并Fsimage,editlog

原理:
SecondaryNameNode如何辅助NameNode管理Fsimage和Edits文件
1.SecondaryNameNode通知NameNode切换editlog
2.SecondaryNameNode从NameNode中获得Fsimage和editlog(通过http方式)
3.SecondaryNameNode将Fsimage载入内存,然后开始合并editlog,合并之后成为新的fsimage
4.SecondaryNameNode将新的fsimage发回给NameNode
5.NameNode用新的fsimage替换旧的fsimage

完成合并的是secondarynamenode,会请求namenode停止使用edits,暂时将新写操作放入一个新的文件中(edits.new)。secondarynamenode从namenode中通过http get获得edits,因为要和fsimage合并,所以也是通过http get的方式把fsimage加载到内存,然后逐一执行具体对文件系统的操作,与fsimage合并,生成新的fsimage,然后把fsimage发送给namenode,通过http post的方式。namenode从secondarynamenode获得fsimage后会把原有的fsimage替换为新的fsimage,把edits.new变成edits。

Hadoop进入安全模式时需要管理员使用dfsadmin的save namespace来创建新的检查点
secondarynamenode在合并edits和fsimage时需要消耗的内存和namenode差不多,所以一般把namenode和secondarynamenode放在不同的机器上

fsimage与edits的合并时机取决于两个参数:

第一个参数是默认1小时fsimage与edits合并一次
dfs.namenode.checkpoint.period :3600
第二个参数是hdfs操作次数达到1000000也会触发合并
dfs.namenode.checkpoint.txns :1000000
还有一个参数是每隔多长时间检查一次hdfs的操作次数
dfs.namenode.checkpoint.check.period :60

相关文章:

  • 2021-07-16
  • 2021-08-08
  • 2021-06-18
  • 2022-01-23
  • 2021-06-21
  • 2021-04-13
  • 2021-12-11
猜你喜欢
  • 2021-10-13
  • 2021-09-20
  • 2021-05-09
  • 2022-01-04
  • 2021-08-26
  • 2022-02-19
相关资源
相似解决方案