SecondaryNameNode工作原理

一、SecondaryNameNode用途

  SNN是用来保存namenode中对HDFS metadata的信息的备份,并减少namenode重启的时间,SNN进程默认运行在 namenode 机器上,如果这台机器出错,宕机,对恢复HDFS文件系统是很大的灾难,因此最佳方式是将SNN进程配置在另外一台机器上运行。

  在hadoop中,namenode负责对HDFS的metadata的持久化存储,并且处理来自客户端的对HDFS的各种操作的交互反馈。为了保证交互速度,HDFS文件系统的metadata是被load到namenode机器的内存中的,并且会将内存中的这些数据保存到磁盘进行持久化存储。为了保证这个持久化过程不会成为HDFS操作的瓶颈。

  hadoop采取的策略是:把HDFS最近一段时间的操作list保存到namenode中的一个叫Editlog的文件中去。当重启namenode时,除了load fslmage意外,还会对这个Editlog文件中记录的HDFS操作进行replay,以恢复HDFS重启之前的最终状态。 而SecondaryNameNode,会周期性地将Editlog中记录的对HDFS的操作合并到一个checkpoint中,然后清空 Editlog。所以namenode的重启就会Load最新的一个checkpoint,并replay Editlog中记录的hdfs操作,由于Editlog中记录的是从上一次checkpoint以后到现在的操作列表,所以就会比较小。如果没有snn 的这个周期性的合并过程,那么当每次重启namenode的时候,就会花费很长的时间。而这样周期性的合并就能减少重启的时间。同时也能保证HDFS系统的完整性。这就是SecondaryNameNode所做的事情。所以SNN并不能分担namenode上对HDFS交互性操作的压力。尽管如此,当namenode机器宕机或者namenode进程出问题时,namenode的daemon进程,可以通过人工的方式从snn上拷贝一份metadata 来恢复HDFS文件系统.

  SNN工作原理:

  1、SecondaryNameNode通知NameNode准备提交edits文件,此时namenode节点产生edits.new

  2、SecondaryNameNode通过http get方式获取NameNode的fsimage与edits文件(在SecondaryNameNode的current同级目录下可见到 temp.check-point或者previous-checkpoint目录,这些目录中存储着从namenode拷贝来的镜像文件)。

  3、SecondaryNameNode开始合并获取的上述两个文件,产生一个新的fsimage文件fsimage.ckpt
     4、SecondaryNameNode用http post方式发送fsimage.ckpt至NameNode
     5、NameNode将fsimage.ckpt与edits.new文件分别重命名为fsimage与edits,然后更新fstime,整个checkpoint过程到此结束。在新版本的hadoop中,SecondaryNameNode两个作用被两个节点替换,checkpoint node与backup node.

  

  SecondaryNameNode备份由三个参数控制fs.checkpoint.period控制周期,fs.checkpoint.size控制日志文件超过多少大小时合并, dfs.http.address表示http地址,这个参数在SecondaryNameNode为单独节点时需要设置。

扫描二维码关注公众号,回复: 9429357 查看本文章

二、配置SNN

  HDFS的一次运行实例是通过在namenode机器上的$HADOOP_HOME/bin/start-dfs.sh(或者start-all.sh) 脚本来启动的。并在运行该脚本的机器上启动namenode进程,而slaves机器都会启动DataNode进程,slave机器的列表保存 在conf/slaves文件中,一行一台机器。并且会在另外一台机器上启动一个snn进程,这台机器由conf/masters文件指定。

  所以,conf/masters文件中指定的机器是SNN进程运行的机器,而不是jobtracker或者namenode进程要运行机器,因为这些进程是运行在launch bin/start-dfs.sh或者bin/start-mapred.sh(start-all.sh)的机器上的。

  通过以下步骤配置SNN运行在另一台或多台机器上:

  1、将所有想要运行secondarynamenode进程的机器写到masters文件中,一行一台。

  2、修改在masters文件中配置了的机器上的conf/hdfs-site.xml文件,加上如下内容:

  <property>

    <name>dfs.secondary.http.address</name>

    <value>192.168.1.152:50090</value>##如果secondarynamenode为多个话可以设置为0.0.0.0:50090

  </property> 

  <property> 

    <name>dfs.http.address</name>

    <value>192.168.1.151:50070</value>

  </property>

  core-site.xml:这里有2个参数可配置,但一般来说我们不做修改。fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。fs.checkpoint.size表示一次记录多大的size,默认64M。

  <property>

    <name>fs.checkpoint.period</name>

    <value>3600</value>

    <description>The number of seconds between two periodic checkpoints.</description>

  </property>

  <property>

    <name>fs.checkpoint.size</name>

    <value>67108864</value>

    <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired. </description>

  </property>

  <property>

    <name>fs.checkpoint.dir</name>

    <value>/app/user/hdfs/namesecondary</value>

    <description>Determines where on the local filesystem the DFS secondary namenode should store the temporary images to merge.If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy.</description>

  </property>

  3、配置检查。配置完成之后,我们需要检查一次是否成功。我们可以通过查看运行secondarynamenode的机器上文件目录来确定是否成功配置。

  系统恢复

  1、配置完成后,如何恢复?首先我们kill掉namenode进程,然后将hadoop.tmp.dir目录下的数据删除掉。制造master挂掉情况。

     2、在配置参数dfs.name.dir指定的位置建立一个空文件夹;把检查点目录的位置赋值给配置参数fs.checkpoint.dir;启动namenode,并加上-importCheckpoint。

     3、启动namenode的时候采用hadoop namenode -importCheckpoint.

  Secondarynamenode的启动和停止

  启动:

    bin/hadoop-daemons.sh --config conf/ --hosts masters start secondarynamenode

  停止:

    bin/hadoop-daemons.sh --config conf/ --hosts masters stop secondarynamenode

  总结

     1、secondarynamenode可以配置多个,修改conf/masters文件。

     2、如果要恢复数据是需要手动拷贝到namenode机器上的。

发布了7 篇原创文章 · 获赞 3 · 访问量 429

猜你喜欢

转载自blog.csdn.net/mzqadl/article/details/104508392