secondarynameNode如何辅助管理FSImage与Edits文件

  • 由于editlog记录了集群运行期间所有对HDFS的相关操作,所以这个文件会很大,集群关闭后再次启动时会将Fsimage和editlog加载到内存中,进行合并,恢复到集群的。
  • 由于editlog文件很大所以,集群再次启动时会花费较长时间。
  • 为了加快集群的启动时间,所以使用secondaryNameNode辅助NameNode合并Fsimage和editlog

原理如下:

secondarynameNode如何辅助管理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加载到内存,然后逐一执行具体对文件系统的操作,与edits合并,生成新的fsimage,然后把fsimage发送给NameNode,通过http post的方式。NameNode从secondaryNameNode获得了fsimage后会将新的fsimage替换旧的fsimage,把edits.new变成edits。

Hadoop进入安全模式时需要管理员使用dfsadmin的save namespace来创建新的检查点。

secondaryNameNode在合并edits和fsimage时需要消耗的内存和NameNode差不多,所以一般把NameNode和secondaryNameNode放在不同的机器上。