有人如何修复腐败的HDFS?我查看了Apache/Hadoop网站,它说它的fsck命令,但没有解决它.希望之前遇到此问题的人可以告诉我如何解决这个问题.
与用于本机文件系统的传统fsck实用程序不同,此命令不会更正它检测到的错误.通常,NameNode会自动更正大多数可恢复的故障.
当我运行时bin/hadoop fsck / -delete,它列出了损坏或丢失块的文件.我如何让它不腐败?这是在练习机器上,所以我可以把所有东西吹走,但是当我们上线时,我将无法通过吹掉所有东西来"修复"它,所以我现在想要解决它.
mob*_*ent 90
您可以使用
hdfs fsck /
Run Code Online (Sandbox Code Playgroud)
确定哪些文件有问题.查看输出中是否存在丢失或损坏的块(暂时忽略未复制的块).这个命令真的很冗长,尤其是在一个大型HDFS文件系统上,所以我通常会得到有意义的输出
hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
Run Code Online (Sandbox Code Playgroud)
除了点和线谈论复制之外什么都忽略了.
一旦找到损坏的文件
hdfs fsck /path/to/corrupt/file -locations -blocks -files
Run Code Online (Sandbox Code Playgroud)
使用该输出来确定块可能存在的位置.如果文件大于块大小,则可能有多个块.
您可以使用报告的块编号转到datanode,并使用namenode日志搜索块所在的机器.尝试在这些计算机上查找文件系统错误.缺少挂载点,datanode未运行,文件系统重新格式化/重新配置.如果您能以这种方式找到问题并将该块重新联机,那么该文件将再次健康.
泡沫冲洗并重复,直到所有文件都健康或您耗尽所有替代品寻找块.
一旦你确定发生了什么,你无法恢复任何更多的块,只需使用
hdfs fs -rm /path/to/file/with/permanently/missing/blocks
Run Code Online (Sandbox Code Playgroud)
命令让您的HDFS文件系统恢复健康,以便您可以在发生新错误时开始跟踪它们.
dae*_*n12 16
如果您只是想让HDFS恢复正常状态并且不担心数据,那么
这将列出损坏的HDFS块:
hdfs fsck -list-corruptfileblocks
这将删除损坏的HDFS块:
hdfs fsck / -delete
请注意,sudo -u hdfs如果您不是sudo用户,则可能必须使用(假设"hdfs"是sudo用户的名称)