Hadoop Balancer命令WARN消息 - 超出了线程配额

Sra*_*mar 6 hadoop2

我正在尝试运行Hadoop balancer命令,如下所示:
hadoop balancer -threshold 1
但是我收到几条WARN消息

无法将大小= 134217728的blk_1073742036_1212从192.168.30.4:50010移动到192.168.30.2:50010到192.168.30.4:50010:块移动失败:无法从/192.168.10.3:53115接收块1073742036,因为超出了线程配额.

并且最后......
没有块被移动了5次迭代.退出...平衡需要4.092883333333333分钟

我设置ulimit值如下:

核心文件大小(块,-c)0
数据seg大小(kbytes,-d)无限制
调度优先级(-e)0
文件大小(块,-f)无限制
挂起信号(-i)2065455
最大锁定内存(kbytes, - l)无限
最大内存大小(千字节,-m)无限制
打开文件(-n)64000
管道大小(512字节,-p)8
POSIX消息队列(字节,-q)819200
实时优先级(-r)0
堆栈size(kbytes,-s)10240
cpu time(seconds,-t)无限制
最大用户进程数(-u)65535
虚拟内存(kbytes,-v)无限制
文件锁(-x)无限制

但我仍然得到同样的错误.

有人可以给我一些建议.感谢您的帮助.

Pra*_*ota 9

很久以前就问过这个问题,为后人发布答案.

Hadoop均衡器有一个过早退出迭代的错误.这导致平衡器非常慢.这已在HDFS-6621中修复,并作为Apache Hadoop 2.6.0的一部分正式发布.由于这是Balancer本身的一个错误,因此可以在不升级群集的情况下运行Balancer的更新版本.

Datanodes将限制用于平衡的线程数,以便不占用集群/ datanode的所有资源.这就是导致你看到的WARN声明的原因.默认情况下,线程数为5.这在Apache Hadoop 2.5.0之前是不可配置的.HDFS-6595添加了此功能dfs.datanode.balance.max.concurrent.moves,允许您控制用于平衡的线程数.由于这是datanode端属性,因此如果要使用此设置,则需要升级到群集.

如果您使用的是由供应商打包的分发版(例如Hortonworks,Cloudera等),则所提到的修补程序可能已经过修补到早期版本.查看供应商发行说明以了解相关信息.