HDFS Reoccurring Error: Under-Replicated Blocks

HDFS Reoccurring Error: Under-Replicated Blocks

我们的 Hadoop 集群每天都报告有 “复制不足的块”。它通过 Cloudera Manager 进行管理。健康警告的一个例子是:

! Under-Replicated Blocks

Concerning: 767 under replicated blocks in the cluster. 3,115 total blocks in the cluster. Percentage under replicated blocks: 24.62%. Warning threshold: 10.00%.

我已经 运行 命令修复了问题,但第二天早上警告又回来了,有时没有添加任何新数据。暂时成功的命令之一是

hdfs dfs -setrep -R 2 /*

我也试过了another recommended command

su hdfs
hdfs fsck / | grep 'Under replicated' | awk -F':' '{print }' >> /tmp/under_replicated_files 
for hdfsfile in `cat /tmp/under_replicated_files`; do echo "Fixing $hdfsfile :" ;  hadoop fs -setrep 2 $hdfsfile; done

两者都有效,但修复不是永久性的。

在 Cloudera Manager 中,Replication FactorMinimal Block Replication 都设置为 2

由于该问题大约每 24 小时只发生一次,因此尝试修复既困难又耗时,我唯一的办法就是反复试验。我不知道为什么这个错误不断回来!任何建议,将不胜感激。谢谢

通过在 Cloudera Manager 中设置以下 HDFS 配置解决了问题:

  1. 转到 HDFS 服务。
  2. 单击“配置”选项卡。
  3. Select 范围 > NameNode。
  4. Filesystem Trash Interval: 0 day(s)

    输入“0”将禁用垃圾桶功能。

这个属性也可以用fs.trash.interval配置

一旦我设置了这个,我就删除了所有有问题的未复制的垃圾块 - 通过查看 运行 生成的 under_replicated_files 文件显示以下命令:

hdfs fsck / | grep 'Under replicated' | awk -F':' '{print }' >> /tmp/under_replicated_files 

我最终只是为用户删除了所有 .Trash。

一旦它被删除,这一切就阻止了其他任何东西被移动到 .Trash 中(我意识到这可能不是每个人都能接受的解决方案,但对于我的用例来说这完全没问题)。此外,删除所有未复制的块意味着警告消失了。