一、前言

   本文续上篇    http://fire7758.blog.51cto.com/993821/1373790

    HDFS 的单点故障问题是因为仅有一个NameNode。本文以共享 MetaData及SecondaryNamenode的2种方法讲述如何恢复备机为NameNode 进行工作。

   共享 MetaData的方法,即通过共享FsImage 和EditLog,这种方法解决了NameNode 的单点失效问题,当一个NameNode 出错以后,另外一个NameNode 可以接替原来的NameNode 继续工作。由于,两者是共享FsImage 和EditLog 的,所以两者保存的内容一致,不存在数据同步的问题。但是,这种方法又带来了新的问题,由于两个NameNode 共享相同的MetaData,而MetaData 服务器带来了新的单点失效问题,当其失效的时候,尽管两个NameNode 都正常,但是系统且不能继续运行。

   SecondaryNamenode的方法,是通过一段时间(默认1小时,或超过指定大小时)对FsImage 和EditLog进行合并,生成镜像文件。所以这种备份方式可能会丢失数据(最后一次checkpoint到故障点间的数据)。

二、故障切换操作:

   本文以namenode进程意外终止为例

   1)共享 MetaData恢复(即nfs备份恢复)

   a)停止原主机服务

   在mt-hadoop-name1上操作:

   使用hadoop用户操作:

   停止JobTracker服务

   hadoop-daemon.sh stop jobtracker

   停止vip

   sudo ifconfig eth0:0 down

   b)备机启动服务,恢复为主机

   在mt-hadoop-name2上配置并启动namenode:

   使用hadoop用户操作:

   备份name目录

   mv /srv/hadoop/name /srv/hadoop/name_`date +%Y%m%d`

   创建name目录

   mkdir /srv/hadoop/name

   从nfs备份中恢复namenode元数据

   cp -r /srv/hadoop/remote/name/* /srv/hadoop/name

   启动新namenode

   启动vip

   sudo ifconfig eth0:0 172.26.10.140 netmask 255.255.255.0

   启动新namenode

   hadoop-daemon.sh start namenode

   hadoop-daemon.sh start jobtracker


   2)checkpoint恢复

   a)停止原主机服务

   在mt-hadoop-name1上操作:

   使用hadoop用户操作:

   停止JobTracker服务

   hadoop-daemon.sh stop jobtracker

   停止vip

   sudo ifconfig eth0:0 down

   b)通过checkpoint恢复元数据

在mt-hadoop-name2上配置并启动namenode。

   使用hadoop用户操作:

备份本地name目录

   mv /srv/hadoop/name /srv/hadoop/name_`date +%Y%m%d`

   创建本地name目录

   mkdir /srv/hadoop/name

   备份nfs上name目录

   mv /srv/hadoop/remote/name /srv/hadoop/remote/name_`date +%Y%m%d`

   创建nfs上name目录

   mkdir /srv/hadoop/remote/name

   停止secondarynamenode

   hadoop-daemon stop secondarynamenode

   启动vip    (因checkpoint恢复时会启动namenode,这里namenode监听在vip上)

   sudo ifconfig eth0:0 172.26.10.140 netmask 255.255.255.0

   从checkpoint备份中恢复namenode元数据

   hadoop namenode -importCheckpoint

   停止namenode

   使用Ctrl+C结束

   正式启动新namenode       这里原来的secondarynamenode仍在这里运行

   hadoop-daemon.sh start namenode

   hadoop-daemon.sh start jobtracker

   hadoop-daemon.sh start secondarynamenode

三、验证

   查看hdfs内容

   hadoop fs -ls /

   查看datanode报告

   hadoop dfsadmin -report

   hdfs文件系统检查

   hadoop fsck /

wKiom1Mf3OjgOlEZAAHCn3KFEUo347.jpg