HDFS恢复非HA状态

文章目录

0x00 文章内容
  1. 恢复非HA状态
  2. 删除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; }'
HDFS恢复非HA状态

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

HDFS恢复非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 总结
  1. HA相关文章,有时间会补充更多:
    HDFS的高可用性HA配置实战
    在HDFS的HA模式下配置HBase

  2. HA的原理是非常重要的,而学习的话,其实用非HA状态即可,但是HA的实操也是比较重要的,有利于理解。


作者简介:邵奈一
全栈工程师、市场洞察者、专栏编辑
| 公众号 | 微信 | 微博 | CSDN | 简书 |

福利:
邵奈一的技术博客导航
邵奈一 原创不易,如转载请标明出处。


上一篇:vscode 代码跳转


下一篇:YARN与MapReduce的配置与使用