HDFS中的SecondaryNameNode节点解析

大家都知道,在HDFS的集群中有三类节点:NameNode、SecondaryNameNode和DataNode,同时在集群中只有一个NameNode节点,一个SecondaryNameNode节点,剩余的就都是DataNode节点。那么就会存在一个致命的问题,那就NameNode节点的单点故障问题,尽管它发生的概率微乎其微。当然本文不会讨论有关NameNode节点单点故障的社区解决方案,而是主要讲解SecondaryNameNode节点(从NameNode)在HDFS中扮演了怎样的角色?

SecondaryNameNode节点启动之后会不断的对NameNode节点保存的元数据进行备份,具体的说来就是:SecondaryNameNode的run方法每隔一段时间执行doCheckpoint(),从NameNode的主要工作都在这个方法里。这个方法会从NameNode上取下FSImage和操作日志(当然也包括版本文件和fstime),然后再本地合并,然后再把合并后的FSImage传回NameNode。这样既可以保存一个NameNode上的数据备份,又可以为NameNode节点分担一部分压力。具体的流程如下:

1.调用startCheckpoint,为接下来的工作准备空间。首先存放FSImage和EditsLog的目录分别由配置文件中的fs.checkpoint.dir项和fs.checkpoint.edits.dir项来设置,然后会分别对这两类目录进行检查和恢复,对于已经存在的chechpoint要将它们设置成为lastCheckpoint。

2.调用NameNode的rollEditLog方法,让NameNode停止向edits上写操作日志,而是转向edits.new上写日志。同时NameNode端的FSImage检查点状态要设置为ROLLED_EDITS。最后会返回一个检查点签名CheckpointSignature

3.通过NameNode的http服务从NameNode上下载FSImage和操作日志。之后设置本地的检查点状态设置为UPLOAD_DONE。

4.加载下载的FSImage和操作日志,从而合并成一个新的FSImage。

5.让NameNode通过SecondaryNameNode的http服务来下载新的FSImage。

6.调用NameNode的rollFsImage,来根据下载的最新FSImage替换原来的FSImage。

7.结束本地的一次doCheckpoint。

还是来整一张图吧!

HDFS中的SecondaryNameNode节点解析

在这里,我还学要补充的一点就是SecondaryNameNode节点备份的时机,在run的循环方法中,当满足两种情况中的任意一个,SecondaryNameNode节点都会开始备份,这两种情况是:一.设定的间隔时间到了,这个时间可以通过配置文件中fs.checkpoint.period项来设置;二.操作日志文件的大小达到了checkpointSize,这个值也可以通过配置文件中fs.checkpoint.size项来设置。

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

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