如何修复损坏的hdfs文件

cigdeys3  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(827)

如何修复损坏的hdfs?我在apache/hadoop网站上看到它说 fsck 命令,但不能解决它。希望以前遇到过这个问题的人能告诉我怎么解决这个问题。
与用于本机文件系统的传统fsck实用程序不同,此命令不会更正它检测到的错误。通常,namenode会自动更正大多数可恢复故障。
当我跑的时候 bin/hadoop fsck / -delete ,它列出了损坏或丢失块的文件。我如何使它不腐败?这是一个练习机,所以我可以吹走一切,但当我们去生活,我将无法“修复”它吹走一切,所以我现在试图找出它。

cfh9epnr

cfh9epnr1#

你可以用

hdfs fsck /

以确定哪些文件有问题。查看输出中是否有丢失或损坏的块(暂时忽略复制块下的)。这个命令非常冗长,尤其是在大型hdfs文件系统上,因此我通常会使用

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

它忽略了只有点和线的线来谈论复制。
一旦发现文件损坏

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

使用该输出确定块可能存在的位置。如果文件大于块大小,则可能有多个块。
您可以使用报告的块编号转到datanodes和namenode日志,搜索块所在的一台或多台计算机。尝试在这些机器上查找文件系统错误。缺少装入点、datanode未运行、文件系统已重新格式化/重新配置。如果你能找到一个问题,以这种方式,使块恢复在线,该文件将再次健康。
用泡沫冲洗并重复,直到所有的文件都是健康的或你用尽所有的替代品寻找块。
一旦确定发生了什么并且无法恢复更多的块,只需使用

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

命令使您的hdfs文件系统恢复正常,以便您可以在新错误发生时开始跟踪它们。

emeijp43

emeijp432#

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

izj3ouym3#

如果你只是想让你的hdfs恢复到正常状态,而不太担心数据,那么
这将列出损坏的hdfs块: hdfs fsck -list-corruptfileblocks 这将删除损坏的hdfs块: hdfs fsck / -delete 请注意,您可能必须使用 sudo -u hdfs 如果您不是sudo用户(假设“hdfs”是sudo用户的名称)

eqfvzcg8

eqfvzcg84#

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

相关问题