【告警现象】本人在使用hadoop2.7.3 执行hdfs balancer的时候,出现了以下告警:
java.io.IOException: Got error, status message Not able to copy block 1073778252 to /172.13.6.52:30810 because threads quota is exceeded
【告警原因】
1,在小于hadoop2.6的版本,有一个bug,就是:过早退出balancer的迭代过程。所以从hadoop2.6.0开始就修复了该问题。
2,Data nodes会限制负载均衡器的线程数目,以防止耗光hdfs集群的所有资源,这就是产生这个告警的原因(此线程数默认值为5)。在hadoop 2.5及之前的版本,这个线程数目可通过修改dfs.datanode.balance.max.concurrent.moves来配置。
【解决办法】
1,hadoop2.5版本以及之前的版本
# 调大dfs.datanode.balance.max.concurrent.moves的值,例如改成60
# 修改dfs.datanode.balance.bandwidthPerSec的值,例如改成52428800,即50M,如果带宽允许,可调高到100Mb
# 修改dfs.datanode.max.transfer.threads的值,例如4096 (如果运行hbase的话建议改成16384)
# 到HDFS的web UI实时查看DataNode的负载状况,可以查看