准备工作:删除所有的 fsimage 文件和 edits 文件(模拟fsimage 文件和 edits 文件丢失的情况)

删除 fsimage 文件
rm -rf  fsimage 文件存放地址
例如:
rm -rf /export/install/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas/current/
如果不知道fsimage文件在哪个目录下可以打开 hdfs-site.xml 文件查看 (建议打开一个新连接)
vi /hadoop安装目录/etc/hadoop/hdfs-site.xml

找到如下内容 (有些人的配置文件里面可能没有 file:// 那就直接复制全路径就行)
在这里插入图片描述进入此目录

cd /export/install/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas

查看一下此目录 ll
可以看到有两个文件
在这里插入图片描述进入current 目录 然后查看

cd current

在这里插入图片描述然后删除该目录下的所有文件

rm -rf ./*  (注意有个小点)

在这里插入图片描述

删除edits 文件
rm -rf edits文件存放目录
rm -rf /export/install/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits/current/*

如果找不到跟之前一样打开hdfs-site.xml配置文件查看找到
在这里插入图片描述重复之前的操作
复制地址 --> 进入此目录下的current 目录 然后

rm -rf ./*      (注意有个小点)

进入之后如下
在这里插入图片描述准备工作完成之后就可以进入以的下操作了
重启hadoop 集群

cd /hadoop的安装目录/etc/sbin/
./stop-all.sh
./start-all.sh  

jps查看 发现namenode 没启动成功
在这里插入图片描述查看日志文件
发现爆了如下错误
在这里插入图片描述

解决方法:

第一步:

关闭 hadoop 集群

cd  /hadoop安装目录/sbin/
例如:cd /export/install/hadoop-2.6.0-cdh5.14.0/sbin/
执行脚本进行关闭
./stop-all.sh

第二步:

使用secondaryNameNode 还原 fsimage 和 edits
首先找到 secondaryNameNode 里面 fsimage 的文件
找不到的可以 打开 hdfs-site.xml 文件查看

vi /hadoop安装目录/etc/hadoop/hdfs-site.xml

打开之后找到如下内容在这里插入图片描述

拷贝fsimage文件 (注意替换地址  把 secondaryNameNode 下的fsimage文件复制到namenode目录下 fsimage 存放的地址)
cp -r /export/install/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/snn/name/current   /export/install/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas/current
拷贝edits文件 (注意替换地址 把 secondaryNameNode 下的edits文件复制到namenode目录下 edits 存放的地址)
cp -r /export/install/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/snn/edits/current /export/install/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits/current 

复制完毕之后记得检查一遍确定文件复制没有问题,尤其是注意路径不要出错

第三步:

重启hadoop 集群

cd /hadoop安装目录/sbin

可以发现namenode 已经能正常重启了

缺点:

会丢失最近一段时间的操作数据
原因:因为secondaryName 是周期性的合并fsimage和edits 文件(丢失文件的多少与你的secondaryName 设置的合并周期有关默认是1一百万次操作 或者 一个小时执行一次)

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐