在启动hadoop hdfs时,用jps命令可以看到有个secondaryNameNode节点,这个就是用于把namenode的edits log与fsimage合并的。。这两个合并后就是最新的元数据了
一、合并流程
1、namenode检测到edits log达到某个阈值后,此时会告知secondaryNameNode要进行合并操作了;
2、secondaryNameNode收到namenode的请求后,会下载namenode中的edits log与fsiamge到secondaryNameNode节点的机器中;
3、namenode收到secondaryNameNode的下载请求后,会再创建一个新的edits log,此时客户端的操作日志都会写入这个新的edits log中,然后才会把旧的edit log和原本的fsimage给secondaryNameNode;
4、secondaryNameNode收到edits log与fsiamge后,会按照edits log里面记录的日志操作,一步一步执行里面的操作,把数据更新到fsimage文件中,等edits log里的所有操作都执行完了,此时的fsimage文件已经是最新的了,然后把新的fsimage返回给namenode;
5、在secondaryNameNode处理过程中,如果客户端进行了增删改操作,这些新的操作就会写入第3步中创建的新的edits log中,
不会修改已经被传到secondaryNameNode的旧的edit log。这样可以保证在这个时候namenode宕机可以通过旧的fsimage+旧的edits log+新的edits log恢复元数据。
6、在secondaryNameNode把新的fsimage发送到namenode中后,namenode就会把旧的fsiamge替换为secondaryNameNode发送过来的新的fsimage;而旧的editlog也会删除;
上面几个步骤就保证了磁盘上的元数据与内存中的元数据是一致的,namenode宕机了也可以从磁盘中重新获得元数据