如何修复损坏的HDFS文件

如何修复一个已经损坏的HDFS? 我查看了Apache / Hadoop网站,并说它的fsck命令不能解决这个问题。 希望之前遇到这个问题的人可以告诉我如何解决这个问题。

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

当我运行bin/hadoop fsck / -delete ,它列出了损坏或丢失块的文件。 我如何使它不腐败? 这是在一台练习机上,所以我可以吹走所有的东西,但是当我们活着的时候,我将无法通过吹走所有东西来“修复”它,所以我现在想弄明白。

您可以使用

  hdfs fsck / 

以确定哪些文件有问题。 查看丢失或损坏块的输出(现在忽略未复制块)。 这个命令真的很冗长,特别是在一个大的HDFS文件系统上,所以我通常会用有意义的输出

  hdfs fsck / | egrep -v '^\.+$' | grep -v eplica 

它忽略了除了点和线之外的任何线条,而只是谈论复制。

一旦find损坏的文件

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

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

您可以使用报告的块号转到datanode和namenode日志,以search块所在的一台或多台机器。 尝试在这些机器上查找文件系统错误。 挂载点丢失,datanode没有运行,文件系统重新格式化/重新configuration。 如果您能以这种方式发现问题,并将该块重新联机,则该文件将再次健康。

泡沫冲洗并重复,直到所有的文件是健康的,或用尽所有替代scheme寻找块。

一旦你确定发生了什么,你不能恢复更多的块,只需使用

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

命令让你的HDFS文件系统恢复正常,所以你可以开始跟踪新的错误发生。

如果你只是想让你的HDFS恢复到正常状态,那么不用担心太多的数据

这将列出损坏的HDFS块:

hdfs fsck -list-corruptfileblocks

这将删除损坏的HDFS块:

hdfs fsck / -delete

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

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