0x00 文章内容
- 恢复非HA状态
- 删除HA状态时多余的文件
说明:此教程的上一篇教程是:HDFS的高可用性HA配置实战,请先学习上一教程。如果没有进行HA的配置,则不需要操作此教程。
0x01 恢复非HA状态
1. 备份并恢复HA配置文件
a. 如启动了集群,先关闭集群:
stop-dfs.sh
b. 备份HDFS的HA配置文件(以后可能会用到,所以备份一下):
mv hdfs-site.xml hdfs-site.xml_ha mv core-site.xml core-site.xml_ha
c. 还原非HA的配置文件(我们在上一教程已经备份了)
mv hdfs-site.xml_bak hdfs-site.xml mv core-site.xml_bak core-site.xml
d. 将配置同步到slave1和slave2
scp hdfs-site.xml core-site.xml hadoop-sny@slave1:~/bigdata/hadoop-2.7.5/etc/hadoop scp hdfs-site.xml core-site.xml hadoop-sny@slave2:~/bigdata/hadoop-2.7.5/etc/hadoop
2. 恢复master的Edits Log
a. 拷贝master上journalNode中的Edits Log数据到master的NameNode所管理的Edits Log目录(注意此处不能覆盖)
cp -i ~/bigdata/dfs/journal/data/mycluster/current/edits_0* ~/bigdata/dfs/name/current/
此过程会提示是否覆盖,输入n,回车表示不覆盖。
b. 解析:如果不拷贝过去,启动集群的时候,你可能会发现master上namenode进程没有启动起来,去看报错日志。会报master上缺失个别edits.log,这是因为在上一次教程时,我们试验了几次master、slave1的主从替换,在master上的edits.log其实有可能是不完整的。解决方法可以去把slave1的拷贝到master上,但是如果内容很多的话,步骤就比较繁琐,所以我们可以直接去同步journalNode里面的数据过去即可。
注意:此处用-i参数,用途是若目的文件已经存在时,在覆盖时会先询问是否真的动作。否则cp会默认将journal里面的数据全部覆盖current下面的edits_0*,而我们这里只是将缺的放过去。
如果不想按n,可以执行这一句,awk相关知识请自行搜索资料:
awk 'BEGIN { cmd="cp -ri ~/bigdata/dfs/journal/data/mycluster/current/edits_0* ~/bigdata/dfs/name/current/"; print "n" |cmd; }'
0x02 校验结果
a. 启动HDFS,发现我们就恢复到了最开始的情况, 而且资源也还在。
start-dfs.sh
如果发现上面恢复master的Edits Log这一步还是无法启动namenode,则用第a步的方式。
PS:
日志路径为cd $HADOOP_HOME/logs,如hadoop-hadoop-sny-namenode-master.log为master的日志。如果发现~/bigdata/dfs/name/current/中有重复的,则用journal里的。
可用下面命令查看报错的信息:
tail -fn200 hadoop-hadoop-sny-namenode-master.log
0x03 删除HA状态时多余的文件
1. 删除zookeeper上的相关数据
a. 启动Zookeeper客户端
zkServer.sh start
zkCli.sh
b. 删除HA相关节点
delete /hadoop-ha/mycluster/ActiveBreadCrumb delete /hadoop-ha/mycluster delete /hadoop-ha
也可多级删除:
rmr /hadoop-ha
2. 删除journalNode管理的数据
a. master、slave1、slave2上均需执行
rm -r ~/bigdata/dfs/journal/*
3. 删除slave1上NameNode管理的数据
a. 在slave1上执行
rm -r ~/bigdata/dfs/name/*
0xFF 总结
- HA相关文章,有时间会补充更多:
HDFS的高可用性HA配置实战
在HDFS的HA模式下配置HBase - HA的原理是非常重要的,而学习的话,其实用非HA状态即可,但是HA的实操也是比较重要的,有利于理解。