说明:此教程的上一篇教程是:HDFS的高可用性HA配置实战,请先学习上一教程。如果没有进行HA的配置,则不需要操作此教程。
0x01 恢复非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
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; }'
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
a. 启动Zookeeper客户端zkServer.sh start
zkCli.sh
b. 删除HA相关节点
delete /hadoop-ha/mycluster/ActiveBreadCrumb delete /hadoop-ha/mycluster delete /hadoop-ha
也可多级删除:rmr /hadoop-ha
a. master、slave1、slave2上均需执行rm -r ~/bigdata/dfs/journal/*
a. 在slave1上执行rm -r ~/bigdata/dfs/name/*
HA相关文章,有时间会补充更多:
HDFS的高可用性HA配置实战
在HDFS的HA模式下配置HBase
HA的原理是非常重要的,而学习的话,其实用非HA状态即可,但是HA的实操也是比较重要的,有利于理解。
作者简介:邵奈一
全栈工程师、市场洞察者、专栏编辑
| 公众号 | 微信 | 微博 | CSDN | 简书 |
福利:
邵奈一的技术博客导航
邵奈一 原创不易,如转载请标明出处。