公众号"Hadoop足迹"
作者:罗康
1.文档编写目的
本文主要讲述如何解决HDFS运行Balancer提示“Another Balancer is running..”导致Balancer失败的问题。
- 测试环境:
1.操作系统版本为Redhat7.2
2.CM和CDH版本为5.11.2
3.HDFS已启用HA
- 文章目录结构:
1.文档编写目的
2.问题描述
3.解决方案
3.1问题解决思路
3.2问题解决步骤
3.3相关建议
4.总结
2.问题描述
运行HDFS的Balancer命令后,中止过该命令一次,再次运行Balancer命令出现如下报错:
Tue Jul 17 17:50:52 CST 2018
Current working directory: /run/cloudera-scm-agent/process/10390-hdfs-BALANCER
Launching one-off process: /usr/lib64/cmf/service/hdfs/hdfs.sh balancer -threshold 10.0 -policy DataNode
Tue Jul 17 17:50:52 CST 2018
JAVA_HOME=/usr/java/jdk1.8.0_111/
using /usr/java/jdk1.8.0_111/ as JAVA_HOME
using 5 as CDH_VERSION
using /run/cloudera-scm-agent/process/10390-hdfs-BALANCER as CONF_DIR
using as SECURE_USER
using as SECURE_GROUP
CONF_DIR=/run/cloudera-scm-agent/process/10390-hdfs-BALANCER
CMF_CONF_DIR=/etc/cloudera-scm-agent
unlimited
2018-07-17 17:50:52,829 INFO [main] balancer.Balancer (Balancer.java:parse(832)) - Using a threshold of 10.0
2018-07-17 17:50:52,832 INFO [main] balancer.Balancer (Balancer.java:run(647)) - namenodes = [hdfs://nameservice1]
2018-07-17 17:50:52,833 INFO [main] balancer.Balancer (Balancer.java:run(648)) - parameters = Balancer.Parameters [BalancingPolicy.Node, threshold = 10.0, max idle iteration = 5, #excluded nodes = 0, #included nodes = 0, #source nodes = 0, run during upgrade = false]
2018-07-17 17:50:52,833 INFO [main] balancer.Balancer (Balancer.java:run(649)) - included nodes = []
2018-07-17 17:50:52,834 INFO [main] balancer.Balancer (Balancer.java:run(650)) - excluded nodes = []
2018-07-17 17:50:52,834 INFO [main] balancer.Balancer (Balancer.java:run(651)) - source nodes = []
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
java.io.IOException: Another Balancer is running.. Exiting ...
Jul 17, 2018 5:50:53 PM Balancing took 1.054 seconds
Exit code: 252
异常信息提示为:”java.io.IOException: Another Balancer is running.. Exiting ...”
经过仔细检查,并未发现有任何运行Balancer的主机。
3.解决方案
3.1.问题解决思路
HDFS在运行Balancer的时候,会将运行Balancer的主机名写入到balancer.id这个文件里面,通过这个Mark File来检测Balancer是否运行,该文件存放在HDFS上的/system目录下。
3.2.问题解决步骤
1.查看/system目录下的balancer.id文件内容,内容为空,确实没有正在运行Balancer的主机
2删除balancer.id这个文件
3.重新执行Balancer命令,可以正常执行数据均衡操作
4.查看balancer.id文件内容,与实际结果一致,即运行balancer的主机为bigdata2
3.3.相关建议
如果HDFS的Balancer在非正常情况下终止,建议在重新执行Balancer前,清除掉balancer.id这个文件。
4.总结
1.HDFS在运行Balancer的时候,会产生一个以“balancer.id”命名的Mark File,通过这个Mark File来监测Balancer的运行状况。
2.以“balancer.id”命名的Mark File存储了运行Balancer主机的主机名,位于HDFS的/system目录下,如果执行Balancer出现”java.io.IOException:Another Balancer is running.. Exiting...”这类异常问题,先查看“balancer.id”文件内容,检查是否有其他主机在运行Balancer,如果没有,则删除该文件,重新执行Balancer即可恢复正常。
3.如果是HDP集群,且HDFS由非HA转换为启用HA,那么出现该类问题有可能是遇见了AMBARI-13946这个Bug,Ambari 2.2.2及以上版本已修复,详见:
https://issues.apache.org/jira/browse/AMBARI-13946
参考文章:
https://stackoverflow.com/questions/35501920/hdfs-balancer-not-working