现象:
1、大数据Hadoop集群,HDFS扩容后,为了使各节点数据均衡,执行balance操作。
2、启动 hdfs balance 时,一直出现其他的balance在执行中,其实并没有执行。
java.io.IOException: Another Balancer is running… Exiting …
解决方法:
网上的思路:
①HDFS在运行Balancer的时候,会将运行Balancer的主机名写入到balancer.id这个文件里面,
通过这个Mark File来检测Balancer是否运行,该文件存放在HDFS上的/system目录下。
②查看/system目录下的balancer.id文件内容,内容为空,确实没有正在运行Balancer的主机。
hdfs dfs -cat /system/balancer.id
上述命令没有内容输出。
③删除balancer.id这个文件
④重新执行Balancer命令,可以正常执行数据均衡操作
如果没有balancer.id这个文件:
这是Hadoop的一个已知bug:
修改当前执行命令节点core_site.xml 的配置fs.defaultFS,去掉最后的 / 。
--core_site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata/</value>
</property>
-------修改为
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata</value>
</property>
再次执行 hdfs balancer,正常
balancer命令:
hadoop/sbin/start-balancer.sh -threshold 5
bug描述:
https://issues.apache.org/jira/browse/HDFS-8897