Hadoop 我的HDF总是报告许多损坏的块

Hadoop 我的HDF总是报告许多损坏的块,hadoop,hdfs,bigdata,Hadoop,Hdfs,Bigdata,我有一个运行hdfs(hadoop 2.6.0)的集群,但它的名称节点向我报告了一个关于丢失块的错误: 有102个街区缺失。以下文件可能已损坏: 当我跳转到名称节点并读取登录(名称节点文件日志)时,我收到了许多警告,如: 来自DatanodeRegistration的错误报告(10.3.24.71,DataNodeUID=b1aa43eb-bd9c-4e1a-b919-d7c99ad0fcdf,infoPort=50075,ipcPort=50020,storageInfo=lv=-56;cid

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

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

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

来自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_1074188011_949972

我的硬盘有问题吗?

原因

HDFS文件系统中的某些文件由于丢失最后一个块副本或只是复制不足而损坏

注意:teragen生成的临时文件或虚假样本数据存在很大的风险,因为通常情况下,这些文件的复制系数默认设置为1,如果承载一个复制副本的datanode发生故障,则该文件将无法修复地损坏(例如丢失)

故障排除步骤

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

  $ hdfs fsck / -files -blocks -locations
该命令的输出将标识损坏文件上设置的复制因子

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

1) 这种情况可能只是暂时的,如果您有一个未被复制的数据,它应该自动将块复制到其他数据节点,以匹配复制因子

2) 如果不是自己复制,请运行平衡器(如果使用HBase,请不要运行HDFS平衡器!)

3) 您可以手动将未被复制的特定文件上的复制设置为比当前更高的级别,从而引导集群创建更多副本

4) 如果只是一个临时文件,它是在推测执行任务较高时运行作业时创建的,请使推测执行任务几乎与复制因子匹配,以便它不会在作业运行后抱怨临时文件

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

$ hdfs fsck / -delete

你能附上更多关于id为blk_1074188011_949972的区块的日志吗?@tnk_peka:下面的答案有用吗?