有人如何修复腐败的HDFS?我查看了Apache / Hadoop网站,它说它fsck
command,但没有修复它。希望之前遇到此问题的人可以告诉我如何解决这个问题。
与本机文件系统的传统fsck实用程序不同,此命令不会更正它检测到的错误。通常,NameNode会自动更正大部分可恢复的故障。
当我运行bin/hadoop fsck / -delete
时,它列出了损坏或丢失块的文件。我如何让它不腐败?这是在练习机器上,所以我可以把所有东西吹走,但是当我们上线时,我将无法通过吹掉所有东西来“修复”它,所以我现在想要解决它。
答案 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;停止守护进程并重新开始..等待一段时间恢复数据。