Hadoop 0.21的bakupnode的工作过程分析(2)

3、在convergeJournalSpool中,首先装载已经spool的数据,再将jsState设置为WAIT,这样会暂停新的数据写入,从而保证全部加载完全部的数据,再将状态转为OFF

4、在接收到edit数据时,也就是处理jouranl函数时,如果jsState是WAIT或者OFF时,都会更新内存中的FSImage,区别是WAIT要等待spool装载完成信号后再更新;如果jsState是INPROGRESS状态时,不更新内存的fsImage;无论jsState状态如何,jouranl数据都会写入eidtLog

通过上面的分析,我们可以看出整个spool的工作过程,具体如下:

1、在backupnode刚启动时,jsState处在INPROGRESS状态,此时fsImage还没有加载到backupnode的内存中,因此接收到的jouranl数据直接保存在spool里

2、backupnode通过docheckpoint工作,将namenode的FSImage做了checkpoint,同时将Image数据加载到自己的内存中,

3、在doCheckpoint的最后阶段,通过convergeJournalSpool将前期缓存在spool中的journal数据加载到内存里,期间通过将jsState设置成WAIT,可以缩短namenode在调用journal是被阻塞的时间,当spool的数据被加载完毕后,jsState被设置成OFF,spool的功能也被关闭,以后再收到的journal数据将实时的被更新到内存的Image中,同时写在本地的edit文件中

4、遗留一个问题,如果bakupnode定期的做checkpoint时,是否还要启动spool机制呢?我觉得是不需要的,

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pszxj.html