Co2y's Blog

hadoop故障修复方法

hadoop集群中又出现了许多corrupted block, 在此记录一些可能的解决方法。

hadoop

首先可以通过fsck工具查看损坏情况和block情况,但是此工具不具备修复功能。

可以通过hadoop namenode -recover尝试修复。然后检查datanode是否有宕机,进程是否有被意外杀死。

hadoop的数据文件在机器的/hadoop/data目录下,根据HDFS-7281 missing block marked as corrupted block是有可能恢复的。

可以通过hdfs dfs -ls /corrupt/file查看replication数目和missing block,之后在datanode上通过

1
2
3
4
find /<path_to_the_data_directory> -type f | grep <missing block>
eg. find /<path_to_data_directory> -type f | grep 'BP-2034730372-10.15.230.22-1428441473000'
找到文件

另外hdfs的namenode和secondnamenode要分开,namenode元数据要定期备份。

hbase

hbase的文件是放在hdfs上的,如果表实在无法恢复了,通过hadoop fsck / -delete之后缺失了很多元文件,如果是hbase.idhbase.version可以尝试新建一个集群,然后替换损坏的文件。

hbase本身有hbck工具,有一些修复功能,另外ZK上数据不一致也可能导致问题,因此需要在ZK里rmr /hbase或者hbase clean --cleanZk。hbck的修复大部分需要HMaster启动起来才行,另外还有离线修复的方法。