1.前提: 不使用SNN,日志文件会很大,日志大会导致集群恢复到上次关机前的状态花费很长时间,这个时候集群处于安全模式,集群不可用,长时间处于安全安全模式
2.目标:加快集群的二次启动时速度.(减少集群二次启动的时间)
SecondaryNameNode周期性复制NameNode的FSimage和Edits到本机(SecondaryNameNode本机),文件进行合并,最终生成全新的Fsimage,将最新的FSimage发送回NameNode
3.意义:辅助NameNode合并Fsimage Edits,减少了日志的大小,加快了集群的二次启动速度
4.图解SecondaryNameNode
-
NameNode中有Fsimage和Edits两个文件
-
生成一个新的edits.new文件
-
调用Http的Get方法,将连个文件传输到secondaryNameNode中
-
将两个文件导入内幕才能,应用edits中的操作,生成新的Fsimage
-
使用Http的post将文件传输会NameNode
-
将NameNode中的edits.new替换掉原来的edits文件(原来的edits文件将会被覆盖,也就是没有了)
如果secondaryNameNode耗费了1分钟的时间,edits.new文件中如果客户端有操作,则该文件中会有一分钟的数据
- Fsimage.ckpt替换掉原来的Fsimage文件(原来的edits文件将会被覆盖,也就是没有了)
一套操作下来,NameNode中就只会有连个较小的文件(Fsimage与edits),如果这时系统关机,重新启动,将这两个加载到内存中,将会大大的提高恢复上一次关机前的状态的速度.因此,secondaryNameNode降低了恢复上次关机前状态时的时间.
重点:1.secondaryNameNode将文件加载到内存中消耗的内存与NameNode差不多,一般将secondaryNameNode与NameNode放在两个不同的节点中
- Fsimage与edits的合并时机取决于两个参数
1.一个小时合并一次
dfs.namenode.checkpoint.period :3600
2.操作次数达到100W次也会触发合并
dfs.namenode.checkpoint.txns :1000000
- 还有一个参数是多久检查一次是否合并
dfs.namenode.checkpoint.check.period :60