阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop集群管理之SecondaryNameNode与NameNode

136次阅读
没有评论

共计 3821 个字符,预计需要花费 10 分钟才能阅读完成。

光从字面上来理解,很容易让一些初学者先入为主的认为:SecondaryNameNode(snn)就是 NameNode(nn)的热备进程。其 实不是。snn 是 HDFS 架构中的一个组成部分,但是经常由于名字而被人误解它真正的用途,其实它真正的用途,是用来保存 namenode 中对 HDFS metadata 的信息的备份,并减少 namenode 重启的时间。对于 Hadoop 进程中,要配置好并正确的使用 snn,还是需要做一些工作的。hadoop 的默认配置中让 snn 进程默认运行在了 namenode 的那台机器上,但是这样的话,如果这台机器出错,宕机,对恢复 HDFS 文件系统是很大的灾难,更好的方式是:将 snn 的进程配置在另外一台机器 上运行。

在 hadoop 中,namenode 负责对 HDFS 的 metadata 的持久化存储,并且处理来自客户端的对 HDFS 的各种操作的交互反馈。为了保 证交互速度,HDFS 文件系统的 metadata 是被 load 到 namenode 机器的内存中的,并且会将内存中的这些数据保存到磁盘进行持久化存储。为 了保证这个持久化过程不会成为 HDFS 操作的瓶颈,hadoop 采取的方式是:没有对任何一次的当前文件系统的 snapshot 进行持久化,对 HDFS 最 近一段时间的操作 list 会被保存到 namenode 中的一个叫 Editlog 的文件中去。当重启 namenode 时,除了 load fsImage 意外,还会对这个 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 进程运行在一台非 NameNode 的 机器上,这主要出于两点考虑:

  1. 可扩展性:创建一个新的 HDFS 的 snapshot 需要将 namenode 中 load 到内存的 metadata 信息全部拷贝一遍,这样的操作需要的内存就需要 和 namenode 占用的内存一样,由于分配给 namenode 进程的内存其实是对 HDFS 文件系统的限制,如果分布式文件系统非常的大,那么 namenode 那台机器的内存就可能会被 namenode 进程全部占据。
  2. 容错性:当 snn 创建一个 checkpoint 的时候,它会将 checkpoint 拷贝成 metadata 的几个拷贝。将这个操作运行到另外一台机器,还可以提供分布式文件系统的容错性。

配置将 SecondaryNameNode 运行在另外一台机器上

HDFS 的一次运行实例是通过在 namenode 机器上的 $HADOOP_HOME/bin/start-dfs.sh(或者 start-all.sh)脚本来启动的。这个脚本会在运行该脚本的机器上启动 namenode 进程,而 slaves 机器上都会启动 DataNode 进程,slave 机器的列表保存在 conf/slaves 文件中,一行一台机器。并且会在另外一台机器上启动一个 snn 进程,这台机器由 conf/masters 文件指定。所以,这里需要严格注意,conf/masters 文件中指定的机器,并不是说 jobtracker 或者 namenode 进程要 运行在这台机器上,因为这些进程是运行在 launch bin/start-dfs.sh 或者 bin/start-mapred.sh(start-all.sh)的机器上的。所以,masters 这个文件名是非常的令人混淆的,应该叫做 secondaries 会比较合适。然后,通过以下步骤:

  1. 将所有想要运行 secondarynamenode 进程的机器写到 masters 文件中,一行一台。
  2. 修改在 masters 文件中配置了的机器上的 conf/hadoop-site.xml 文件,加上如下选项:
Java 代码Hadoop 集群管理之 SecondaryNameNode 与 NameNode
  1. <property>
  2. <name>dfs.http.address</name>
  3. <value>namenode.hadoop-host.com:50070</value>
  4. </property>

 

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

 

Java 代码Hadoop 集群管理之 SecondaryNameNode 与 NameNode
  1. <property>
  2. <name>fs.checkpoint.period</name>
  3. <value>3600</value>
  4. <description>The number of seconds between two periodic checkpoints.
  5. </description>
  6. </property>
  7. <property>
  8. <name>fs.checkpoint.size</name>
  9. <value>67108864</value>
  10. <description>The size of the current edit log (in bytes) that triggers
  11. a periodic checkpoint even if the fs.checkpoint.period hasn’t expired.
  12. </description>
  13. </property>
  14. <property>
  15. <name>fs.checkpoint.dir</value>
  16. <value>yourdir</value>
  17. </property>

 

 

3、配置检查。配置完成之后,我们需要检查一下是否成功。我们可以通过查看运行 secondarynamenode 的机器上文件目录来确定是否成功 配置。首先输入 jps 查看是否存在 secondarynamenode 进程。如果存在,在查看对应的目录下是否有备份记录。如下图:

Hadoop 集群管理之 SecondaryNameNode 与 NameNode

该目录一般存在于 hadoop.tmp.dir/dfs/namesecondary/ 下面。

四、恢复

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

2、在配置参数 dfs.name.dir 指定的位置建立一个空文件夹;把检查点目录的位置赋值给配置参数 fs.checkpoint.dir;

namesecondary 中的文件复制到fs.checkpoint.dir

./hadoop namenode -importCheckpoint;

启动 NameNode,并加上 -importCheckpoint。(这句话抄袭的是 hadoop-0.20.2/hadoop-0.20.2/docs/cn/hdfs_user_guide.html#Secondary+NameNode,看看文档,有说明)

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

五、总结

1、secondarynamenode 可以配置多个,master 文件里面多写几个就可以。

2、千万记得 如果要恢复数据是需要手动拷贝到 namenode 机器上的。不是自动的(参看上面写的恢复操作)。

3、镜像备份的周期时间是可以修改的,如果不想一个小时备份一次,可以改的时间短点。core-site.xml 中的 fs.checkpoint.period 值

相关阅读

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计3821字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中