edits文件记录了客户端对HDFS所做的各种更新操作,客户端所有的写操作都被记录在了此文件中。
而fsimage文件记录了元数据的文件,这个文件不是实时的,通俗来说,更像是对HDFS的一个快照,它记录了某个时刻下的HDFS的状态信息。
触发这两个文件合并的条件
- HDFS的重新启动
- edits文件达到指定的大小(默认64M,可更改)
- 设置了指定时间促使两文件合并(默认3600s,可更改)
合并过程(在SecondaryNameNode上)
- NameNode中产生一个新的edits文件,名为edits.new后续的更新操作写在此文件中
- SecondaryNameNode通过http协议从Name上获取edits文件和fsimage文件
- 在SecondaryNameNode上将fsimage文件加载到内存中,然后将edits文件的操作更新到内存中,然后写成一个新的文件fsimage.ckpt
- SecondaryNameNode通过http协议将fsimage.ckpt文件发送到NameNode上
- NameNode将fsimage.ckpt文件更名为fsimage,将edits.new更名为edits
SecondaryNameNode不是NameNode的热备,但也能起到一定的备份作用,这就说明在一定情况下可能会产生数据丢失情况,所以在Hadoop2.0完全分布式中,抛弃了SecondaryNameNode,采用了双NameNode机制来进行热备
edits文件和fsimage文件的合并发生在SecondaryNameNode上是因为这两个文件比较合并耗时,如果在NameNode上合并可能会导致系统卡顿,所以在SecondaryNameNode上进行