2016-05-21 52 views
1

我有运行HDFS集群(Hadoop的2.6.0)报告,但其名称节点向我报告一个错误失踪块:我HDFS总是很多损坏的块

有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

是我的硬盘或其他东西的问题?

+0

你能附加更多的日志关于ID为blk_1074188011_949972的区块? – waltersu

+0

@tnk_peka:回答下方有用吗? –

回答

2

As described by this

原因

某些文件(S)在HDFS文件系统已损坏或者因失去他们的最后一块复制品或者干脆被underreplicated。

注意:由teragen生成的临时文件或伪造示例数据存在很大风险,因为默认情况下,这些文件常常将复制因子设置为1,并且如果托管该一个副本的datanode出现故障,该文件被无可挽回地损坏(例如丢失)。

故障排除步骤

要获得文件的完整细节是造成你的问题,你可以运行下面的命令:

$ hdfs fsck/-files -blocks -locations 

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

有不同的方式,你能避免这个问题取决于您的数据块..

1)条件可能仅仅是暂时的,如果你有一个数据在复制的它应该只是自动复制块到其他数据节点,如果它不是在你自己的运行复制平衡器(如果你使用HBase的不运行HDFS均衡匹配复制因子

2)!)

3)您也可以手动设置复制上一个特定的文件被复制到比当前更高的值,从而哄骗集群t o创建更多副本。 4)如果它只是当您的推测性执行任务较高时运行作业时创建的临时文件,则使推测性执行任务与复制因子几乎匹配,以便它不会在之后抱怨临时文件工作运行。

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

$ hdfs fsck/-delete