fsimage 和 editlog 的工作原理
- fsimage和editlog都是为NameNode存储文件信息的。
- Fsimage:fsimage保存了最新的元数据检查点,在HDFS启动时加载fsimage的信息,包含了整个HDFS文件系统的所有目录和文件的信息;
- Editlog:editlog主要是在NameNode已经启动情况下对HDFS进行的各种更新操作进行记录,HDFS客户端执行所有的写操作都会被记录到editlog中。
- 对于更新操作都会记录在editlog中,为了避免editlog不断增大,secondary namenode会周期性合并fsimage和edits成新的fsimage,新的操作记录会写入新的editlog中。
合并过程:
- secondary namenode周期性,通过getEditLog获取editlog大小,当其达到合并的大小时通过RollEditLog方法进行合并。
- namenode停止使用edits文件,并生成一个新的临时的edits.new文件。
- Secondarynamenode通过namenode内建的Http服务器,以get的方式获取edits与fsimage文件,Get方法中携带着fsimage与edits的路径。
- Secondaryname将fsimage载入内存并逐一执行edits中的操作,生成新的fsimage.ckpt文件。
- 执行结束后,会向namenode发送http请求,告知namenode合并结束,namenode通过http post的方式获取新fsimage.ckpt文件。
- Namenode更新fsimage.ckpt文件中记录检查点执行的时间,并改名为fsimage文件。
- Edit.new文件更名为edit文件。