64

有人如何修复损坏的 HDFS?我查看了 Apache/Hadoop 网站,它说它的fsckcommand,它没有修复它。希望以前遇到过这个问题的人可以告诉我如何解决这个问题。

与用于本机文件系统的传统 fsck 实用程序不同,此命令不会更正它检测到的错误。通常 NameNode 会自动纠正大部分可恢复的故障。

当我运行bin/hadoop fsck / -delete时,它列出了损坏或丢失块的文件。我怎样才能让它不腐败?这是在练习机上,所以我可以把所有东西都吹走,但是当我们上线时,我无法通过吹走所有东西来“修复”它,所以我现在正试图弄清楚。

4

4 回答 4

102

您可以使用

  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 文件系统恢复健康,这样你就可以在新错误发生时开始跟踪它们。

于 2013-10-07T01:53:43.993 回答
30

如果您只是想让 HDFS 恢复正常状态并且不太担心数据,那么

这将列出损坏的 HDFS 块:

hdfs fsck -list-corruptfileblocks

这将删除损坏的 HDFS 块:

hdfs fsck / -delete

请注意,sudo -u hdfs如果您不是 sudo 用户,则可能必须使用(假设“hdfs”是 sudo 用户的名称)

于 2017-05-30T11:55:32.300 回答
1

这里的解决方案对我有用:https ://community.hortonworks.com/articles/4427/fix-under-replicated-blocks-in-hdfs-manually.html

su - <$hdfs_user>

bash-4.1$ hdfs fsck / | grep 'Under replicated' | awk -F':' '{print $1}' >> /tmp/under_replicated_files 

-bash-4.1$ for hdfsfile in `cat /tmp/under_replicated_files`; do echo "Fixing $hdfsfile :" ;  hadoop fs -setrep 3 $hdfsfile; done
于 2018-07-19T21:32:04.493 回答
-6

启动所有守护程序并以“hadoop namenode -recover -force”运行命令停止守护程序并重新启动.. 等待一段时间以恢复数据。

于 2015-08-13T07:39:54.580 回答