fsimage文件:即命名空间映像文件,是内存中的元数据在硬盘上的checkpoint,包含文件系统中的所有目录和文件inode的序列化信息。
editlog:文件系统的写操作首先把它记录在editlog中。
检查点机制:定时将fsimage和editlog合并并产生新的fsimage的过程,这一过程非常耗费cpu和IO,一般放在Secondary Namenode(非HA)和Standby Namenode(HA)中完成。
(一)secondary namenode执行检查点操作(非HA):
-
secondary namenode通过周期性(五分钟),通过getEditLog获取editlog大小,当其达到合并的大小时通过RollEditLog方法进行合并。
-
namenode停止使用edits文件,并生成一个新的临时的edits.new文件。
-
Secondarynamenode通过namenode内建的Http服务器,以get的方式获取edits与fsimage文件。Get方法中携带着fsimage与edits的路径。
-
Secondaryname将fsimage载入内存并逐一执行edits中的操作,生成新的fsimage文件。
-
执行结束后,会向namenode发送http请求,告知namenode合并结束,namenode通过http post的方式获取新fsimage文件。
-
Namenode更新fsimage文件中记录检查点执行的时间,并改名为fsimage文件。
-
Edit.new文件更名为edit文件。
注:由此可知namenode 与 secondarynamenode 有着相似的内存需求,因为secondarynamenode也会将fsimage载入内存,因此secondarynamenode需要运行在一台专门机器上。
(一)Standby Namenode执行检查点操作(hadoop2以后的HA模式):
HA有两个集群,一个是Active Namenode,另一个是Standby Namenode,中间有奇数个JournalNode在持久化editlog(只有持久化成功才能保证命名空间修改的安全性)。Active Namenode会向JournalNode发送更新的editlog文件,Standby Namenode会观察JournalNode中editlog的变化,不断读取最新的editlog文件与当前命名空间合并,所以,Standby Namenode始终保持最新命名空间。editlog和fsimage合并过程在Standby Namenode进行,Standby Namenode向Active Namenode发送http请求,Active Namenode根据请求的事务id、下载地址和端口下载fsimage文件。