HDFS中SecondaryNamenode工作原理(7)
流程图如下:
主要过程: 1、 secnonaryNN通知NameNode切换editlog 2、secondaryNN从NameNode中获得FSImage和editlog(通过http方式) 3、secondaryNN将FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage 4、secondaryNN将新的fsimage发回给NameNode 5、NameNode用新的fsimage替换旧的fsimage ~ 备注: 1.NN为NameNode的缩写 2.每执行一次上面的流程,最后都会有一个新版本的Edits和Fsimage代替之前的版本,但旧版本依然会保存在对应的节点上(NameNode和SeconddayNameNode都有旧版本的记录)
拓展: 1.完成合并的是secondarynamenode,会请求namenode停止使用edits,暂时将新写操作放入一个新的文件中(edits.new)。secondarynamenode从namenode中通过http get获得edits,因为要和fsimage合并,所以也是通过http get 的方式把fsimage加载到内存,然后逐一执行具体对文件系统的操作,与fsimage合并,生成新的fsimage,然后把fsimage发送给namenode,通过http post的方式。namenode从secondarynamenode获得了fsimage后会把原有的fsimage替换为新的fsimage,把edits.new变成edits。 2.Hadoop进入安全模式时需要管理员使用dfsadmin的save namespace来创建新的检查点。 3.secondarynamenode在合并edits和fsimage时需要消耗的内存和namenode差不多,所以一般把namenode和secondarynamenode放在不同的机器上。 4.fsimage与edits的合并时机取决于两个参数,第一个参数是默认1小时fsimage与edits合并一次。第二个参数是hdfs操作次数达到1000000 也会触发合并! 其中: 第一个参数:时间达到一个小时fsimage与edits就会进行合并 dfs.namenode.checkpoint.period :3600 第二个参数:hdfs操作达到1000000次也会进行合并 dfs.namenode.checkpoint.txns :1000000 还有一个参数是每隔多长时间检查一次hdfs的操作次数 dfs.namenode.checkpoint.check.period :60
总结:
前提:不使用SNN,日志文件会很大,日志大会导致集群恢复到上次关机前的状态花费很长时间,这个时候集群处于安全模式,集群不可用。长时间处于安全模式。 目标:加快集群二次启动的速度。(减少集群二次启动的时间) SecondaryNamenode周期性复制NameNode的FSIMAGE 和edits到本机(SecondaryNamenode本机),将两个文件进行合并,最终生成全新的Fsimage,将最新的Fsimage发送回Namenode 。 意义:辅助NameNode合并Fsimage Edits.减小了日志的大小,加快了集群的二次启动速度。 附:SecondaryNamenode自己独立部署在有一个节点上。此节点的配置要与NameNode相同(至少,有条件也可以大于NameNode的配置)。