在HDFS相关的守护进程中,有NameNode进程、DataNode进程、SecondaryNameNode进程等。NameNode和DataNode职责比较清晰,咱们都知道是做什么的,那么SecondaryNameNode的效果是什么呢?为什么SecondayNameNode要和NameNode布置在不同的节点上呢?有人说SecondaryNameNode是NameNode的备份,这种说法正确吗?咱们来理解一下SecondaryNameNode是什么,主要是做什么作业的。

在正式的介绍SecondaryNameNode之前,咱们先来认识两种文件: fsimage 和 eidts。咱们都知道NameNode有一个效果便是维护HDFS分布式文件体系的目录树结构。在HDFS上有什么目录、每一个目录下又有什么文件等等,这些信息是需求维护的。

NameNode在内存中维护文件体系的目录树结构,而这样的目录树结构跟着HDFS的重启不会丢掉,也就说明NameNode会将其序列化到本地磁盘上,以文件的方式保存下来。这个文件便是fsimage文件。咱们可以在NameNode地点的节点发现这个文件。

10分钟为你全面解答HDFS的SecondaryNamenode的作用

那么,是不是咱们每次对HDFS进行操作的时分,NameNode都会将内存中记载的HDFS的目录树结构序列化下来呢?明显不该该是这样的,因为假如你的文件体系中的文件比较多、比较复杂,在内存中维护的数据量也会比较巨大,咱们假设1G。那么假如每当对目录树结构发生了修正之后,都需求将内存中的数据序列化到磁盘上的话,就发生大量的磁盘IO。并且在序列化期间,假如NameNode宕机的话,会出现数据丢掉的状况。

因此,NameNode并不会实时的将每一次的改变都序列化到本地磁盘上。而是会周期性的进行序列化,一般来说一个小时序列化一次,生成fsimage文件。那么在这一个小时的时刻之内,假如发生了新的文件结构改变怎么办?这个时分,NameNode会将新的操作以edit log的方式保存在文件中,edit log中并不会保存悉数的目录结构,而仅仅记载了某一次的改变操作。

10分钟为你全面解答HDFS的SecondaryNamenode的作用

在NameNode启动的时分,首要加载本地磁盘上的fsimage文件,将一个完好的目录结构读取到内存中。然后再依次读取每一个edit log中的记载,在内存中进行引荐,对目录树结构进行推演。这样就可以得到前次关机的时分完好的目录树结构。

10分钟为你全面解答HDFS的SecondaryNamenode的作用

那么,SecondaryNameNode是干什么的呢?上面提到了,NameNode会周期性的对内存中的目录结构进行序列化,生成fsimage文件。其实这个作业是由SecondaryNameNode来完结的。SecondaryNameNode会辅助NameNode进行fsimage和edit log的兼并作业,减小editlog的大小,然后可以缩减下一次启动NameNode的时刻。两个文件的兼并周期,称之为查看点机制(checkpoint),是可以经过hdfs-default.xml配置文件进行修正的:

<property>
    <name>dfs.namenode.checkpoint.period</name>
    <value>3600</value>
    <description>两次查看点距离的秒数,默许是1个小时</description>
</property>		 
<property>
    <name>dfs.namenode.checkpoint.txns</name>
    <value>1000000</value>
    <description>txid履行的次数到达100w次,也履行checkpoint</description>
</property>		 
<property>
    <name>dfs.namenode.checkpoint.check.period</name>
    <value>60</value>
    <description>60秒一查看txid的履行次数</description>
</property>

10分钟为你全面解答HDFS的SecondaryNamenode的作用

  1. SecondaryNamenode恳求Namenode停止使用正在编辑的editlog文件,Namenode会创立新的editlog文件,同时更新seed_txid文件。

  2. SecondaryNamenode经过HTTP协议获取Namenode上的fsimage和editlog文件。

  3. SecondaryNamenode将fsimage读进内存傍边,并逐步分析editlog文件里的数据,进行兼并操作,然后写入新文件fsimage_x.ckpt文件中。

  4. SecondaryNamenode将新文件fsimage_x.ckpt经过HTTP协议发送回Namenode。

  5. Namenode再进行更名操作。


帮助到你的话就点个关注吧~