我的hdfs总是报告许多损坏的块

h22fl7wq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(393)

我有一个运行hdfs(hadoop 2.6.0)的群集,但它的名称节点向我报告了一个有关缺少块的错误:
缺了102个街区。以下文件可能已损坏:
当我跳转到name node并读取login(namenode文件日志)时,我收到许多警告,如:
来自datanoderegistration的错误报告(10.3.24.71,DataNodeUID=b1aa43eb-bd9c-4e1a-b919-d7c99ad0fcdf,infoport=50075,ipcport=50020,storageinfo=lv=-56;cid=cid-9f27dfea-17f6-41eb-95d2-50424dc78fa9;nsid=197210444;c=0):
无法发送无效块bp-352432948-10.3.24.65-1433821675295:blk_
我的硬盘有问题吗?

k5hmc34c

k5hmc34c1#

如本文所述
原因
hdfs文件系统中的某些文件由于丢失最后一个块副本或只是复制不足而损坏。
注意:对于teragen生成的临时文件或伪样本数据,发生这种情况的风险很大,因为通常这些文件的复制因子在默认情况下设置为1,如果承载一个复制副本的datanode发生故障,则该文件将无法修复地损坏(例如丢失)。
故障排除步骤
要获取导致问题的文件的完整详细信息,可以运行以下命令:

$ hdfs fsck / -files -blocks -locations

该命令的输出将标识在损坏文件上设置的复制因子。
根据数据块的不同,有不同的方法可以避免此问题。。
1) 这种情况可能只是暂时的,如果您有一个未复制的数据,它应该自动将这些块复制到其他数据节点,以匹配复制因子
2) 如果不是自己复制,请运行平衡器(如果使用hbase,请不要运行hdfs平衡器!)
3) 您可以手动设置对某个特定文件的复制,该文件被复制到比当前更高的位置,从而引导集群创建更多的副本。
4) 如果只是一个临时文件,它是在推测性执行任务较高时运行作业时创建的,请使推测性执行任务与复制因子几乎匹配,这样它就不会在作业运行后抱怨临时文件。
作为最后手段,如果您确定不需要这些文件并且只想消除错误,则可以运行此命令自动删除损坏的文件:

$ hdfs fsck / -delete

相关问题