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

时间:2014-08-09 20:17:11

标签: 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接收块1073742036: 53115因为超出了线程配额。

最后......
5次迭代没有移动任何块。退出... 平衡花了4.092883333333333分钟

我按如下方式设置了ulimit值:

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

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

有人可以就此提出建议。感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

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

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

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

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