如何修复损坏的HDFS FIles

时间:2013-10-06 03:17:41

标签: hadoop hdfs

有人如何修复腐败的HDFS?我查看了Apache / Hadoop网站,它说它fsck command,但没有修复它。希望之前遇到此问题的人可以告诉我如何解决这个问题。

  

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

当我运行bin/hadoop fsck / -delete时,它列出了损坏或丢失块的文件。我如何让它不腐败?这是在练习机器上,所以我可以把所有东西吹走,但是当我们上线时,我将无法通过吹掉所有东西来“修复”它,所以我现在想要解决它。

4 个答案:

答案 0 :(得分:84)

您可以使用

  hdfs fsck /

确定哪些文件存在问题。查看输出中是否存在丢失或损坏的块(暂时忽略未复制的块)。这个命令真的 详细说明大型HDFS文件系统,所以我通常会这样做 带有

的有意义的输出
  hdfs fsck / | egrep -v '^\.+$' | grep -v eplica

忽略除了点和线之外的线条,而不是复制。

找到损坏的文件后

  hdfs fsck /path/to/corrupt/file -locations -blocks -files

使用该输出确定块可能存在的位置。如果文件是 大于块大小,它可能有多个块。

您可以使用报告的块编号转到 datanode和namenode日志搜索机器 块居住的地方。尝试查找文件系统错误 在那些机器上。缺少挂载点,datanode未运行, 文件系统重新格式化/重新配置。如果你能找到问题 以这种方式将块恢复到网上该文件将是健康的 试。

泡沫冲洗并重复,直到所有文件都健康或您耗尽 寻找区块的所有替代方案。

一旦确定发生了什么,你就无法恢复任何阻挡, 只需使用

  hdfs fs -rm /path/to/file/with/permanently/missing/blocks

命令让你的HDFS文件系统恢复健康,这样你就可以开始了 跟踪发生的新错误。

答案 1 :(得分:13)

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

这将列出损坏的HDFS块:

hdfs fsck -list-corruptfileblocks

这将删除损坏的HDFS块:

hdfs fsck / -delete

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

答案 2 :(得分:0)

这里的解决方案对我有用: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

答案 3 :(得分:-5)

启动所有守护进程并运行命令为&#34; hadoop namenode -recover -force&#34;停止守护进程并重新开始..等待一段时间恢复数据。