namenode无数据损坏一般是磁盘损坏,或者是其它操作导致namenode数据丢失。如果发生文件损坏或者丢失,有如下两种方法可以恢复。前提是有secondarynamenode
1、Namenode所在机器服务正常
如果namenode所在机器服务正常,只是磁盘损坏,或者数据丢失。则可以此方法。
在namenode机器上(现网为132.37.8.136)操作以下步骤:
1、如果hadoop进程不存在,先启动start-all.sh。如果存在直接执行后面操作
2、namenode镜像所在的目录下(现网为/hadoopdata/data)内容清空。
3、执行 hadoop namenode -importCheckpoint命令(界面可能出去一些错误日志)
4、stop-all.sh
5、执行jps查看有没有组件存在(如 namenode等),如果有kill -9 强行停止。
6、start-all.sh 在界面上即可查看到相关信息
2、 Namenode所在机器服务异常
如果namenode所在机器出现问题(如 无法开机、网络有故障、硬件故障等导致此台机器不能再继续使用)。此时需要将namenode替换成其它机器。
1、停掉Hadoop及相关集群
2、备份secondarynamenode所在机器上dfs.name.dir所指向的目录(/hadoopdata/data)及文件
3、修改集群每一台机器上$HADOOP_HOME/conf/下配置文件
•修改core-site.xml中fs.default.name,将原hostname改为新主机hostname
•修改mapred-site.xml中mapred.job.tracker,将原hostname改为新主机hostname
•检查slaves文件和master文件(因为很多时候是从原集群中剥离一台机器,所以要特别注意是否有遗漏)
4、建立新Namenode到其自身及其他Datanode节点间的互信
5、 将第2步中备份的文件拷贝到新Namenode节点,且按照原Namenode文件结构放置文件(需要将secondarynamenode机器上复制的dfs文件夹下的namesecondary改为name)。
6、将第3步中修改后的配置文件分发到其他Datanode节点(也可以手动修改其他机器)
7、 start-all.sh启动HDFS,查看NameNode、SecondaryNameNode和各个DataNode状态是否正常