
Secondary NameNode 是合并 NameNode 的 edit logs 到 fsimage 文件中; 它的具体工作机制: (1)Secondary NameNode 询问 NameNode 是否需要 checkpoint。直接带回 NameNode 是否检查结果 (2)Secondary NameNode 请求执行 checkpoint (3)NameNode 滚动正在写的 edits 日志 (4)将滚动前的编辑日志和镜像文件拷贝到 Secondary NameNode (5)Secondary NameNode 加载编辑日志和镜像文件到内存,并合并 (6)生成新的镜像文件 fsimage.chkpoint (7)拷贝 fsimage.chkpoint 到 NameNode (8)NameNode 将 fsimage.chkpoint 重新命名成 fsimage 所以如果 NameNode 中的元数据丢失,是可以从 Secondary NameNode 恢复一部 分元数据信息的,但不是全部,因为 NameNode 正在写的 edits 日志还没有拷贝 到 Secondary NameNode,这部分恢复不了
另一容易理解的版本:

1、 secnonaryNN通知NameNode切换editlog,生成edits.new 2、secondaryNN从NameNode中获得FSImage和editlog(通过http方式),将FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage 3、secondaryNN将新的fsimage.ckpt发回给NameNode 4、NameNode用新的fsimage.ckpt替换旧的fsimage 5、NameNode用新的edits.new替换旧的edits