您可以使用
hdfs fsck /
以确定哪些文件有问题。查看输出中是否存在丢失或损坏的块(暂时忽略复制不足的块)。这个命令非常冗长,尤其是在大型 HDFS 文件系统上,所以我通常会使用有意义的输出
hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
它忽略了只有点和线谈论复制的线条。
一旦你发现一个损坏的文件
hdfs fsck /path/to/corrupt/file -locations -blocks -files
使用该输出来确定块可能存在的位置。如果文件大于您的块大小,它可能有多个块。
您可以使用报告的块编号转到数据节点和名称节点日志,以搜索块所在的机器或机器。尝试在这些机器上查找文件系统错误。缺少挂载点,datanode 未运行,文件系统重新格式化/重新配置。如果您可以通过这种方式找到问题并将块重新联机,则该文件将再次正常运行。
泡沫冲洗并重复,直到所有文件都是健康的,或者你用尽所有寻找块的替代品。
一旦您确定发生了什么并且您无法再恢复任何块,只需使用
hdfs fs -rm /path/to/file/with/permanently/missing/blocks
命令让你的 HDFS 文件系统恢复健康,这样你就可以在新错误发生时开始跟踪它们。