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

时间:2016-05-21 04:13:39

标签: hadoop hdfs bigdata

我有一个运行hdfs(hadoop 2.6.0)的集群,但是它的名称节点向我报告了有关丢失块的错误:

  

有102个缺失的块。以下文件可能已损坏:

当我跳转到名称节点并读取登录(namenode文件日志)时,我收到了许多警告:

  

DatanodeRegistration的错误报告(10.3.24.71,datanodeUuid = 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_1074188011_949972

我的硬盘或其他什么问题?

1 个答案:

答案 0 :(得分:2)

As described by this

<强>原因

HDFS文件系统中的某些文件因丢失最后一个块副本或仅仅是未充分复制而损坏。

注意:teragen生成的临时文件或虚假样本数据会有很大的风险,因为默认情况下这些文件的复制因子设置为1,如果托管该副本的datanode发生故障,文件被无可挽回地损坏(例如丢失)。

疑难解答步骤

要获取导致问题的文件的完整详细信息,可以运行以下命令:

  $ hdfs fsck / -files -blocks -locations

该命令的输出将标识在已损坏文件上设置的复制因子。

根据您的数据块,有不同的方法可以避免此问题..

1)条件可能只是暂时的,如果您的数据不足,它应该只是自动将块复制到其他数据节点以匹配复制因子

2)如果它没有自行复制运行平衡器(如果你使用HBase,请不要运行HDFS平衡器!)

3)您可以手动设置复制到特定文件的复制,该文件复制到比当前更高的位置,诱导群集创建更多副本。

4)如果它只是在您的推测执行任务很高时运行作业时创建的临时文件,请使推测执行任务几乎与复制因子匹配,这样它就不会抱怨临时文件工作。

作为最后的手段,如果您确定不需要这些文件并且只想消除错误,您可以运行此命令自动删除损坏的文件:

$ hdfs fsck / -delete