HDFS rebalancer Exception: Another Balancer is running..

转载来自:公众号"Hadoop足迹"(微信号:gh_606ce9db5c8e) 

作者:罗康

 

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 isrunning..  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

 

参考文章:

http://mail-archives.apache.org/mod_mbox/hadoop-mapreduce-user/201601.mbox/%3CCANXtaKBEVjrZjBMY+rMbkScuMxqvNTX6fAuDpMwuNzvLC6taCA@mail.gmail.com%3E

https://stackoverflow.com/questions/35501920/hdfs-balancer-not-working

 

 

 

When your talent can’t support your ambition,
You should calm down and learn.
When your ability cannot realize you dreams,
You should practice with all your heart.
Ask yourself,
What kind of life you pursue.

2025-03-18 14:41:38,515 WARN hdfs.DataStreamer: Exception in createBlockOutputStream blk_1073742742_1918 java.io.IOException: Invalid token in javax.security.sasl.qop: DI at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.DataTransferSaslUtil.readSaslMessage(DataTransferSaslUtil.java:220) at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.DataTransferSaslUtil.readSaslMessage(DataTransferSaslUtil.java:237) at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.SaslDataTransferClient.doSaslHandshake(SaslDataTransferClient.java:544) at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.SaslDataTransferClient.getSaslStreams(SaslDataTransferClient.java:446) at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.SaslDataTransferClient.send(SaslDataTransferClient.java:289) at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.SaslDataTransferClient.checkTrustAndSend(SaslDataTransferClient.java:236) at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.SaslDataTransferClient.socketSend(SaslDataTransferClient.java:203) at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.SaslDataTransferClient.socketSend(SaslDataTransferClient.java:193) at org.apache.hadoop.hdfs.DataStreamer.createBlockOutputStream(DataStreamer.java:1780) at org.apache.hadoop.hdfs.DataStreamer.nextBlockOutputStream(DataStreamer.java:1728) at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:713) 2025-03-18 14:41:38,518 WARN hdfs.DataStreamer: Abandoning BP-1654643170-10.4.136.105-1741764777416:blk_1073742742_1918 2025-03-18 14:41:38,523 WARN hdfs.DataStreamer: Excluding datanode DatanodeInfoWithStorage[10.4.136.115:1026,DS-b87f7d43-952f-484b-a735-11c2dfc16dc8,DISK] 2025-03-18 14:41:38,540 WARN hdfs.DataStreamer: Exception in createBlockOutputStream blk_1073742743_1919 java.io.IOException: Invalid token in javax.security.sasl.qop: DI at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.DataTransferSaslUtil.rea
最新发布
03-19
<think>嗯,用户遇到了Hadoop HDFS中的SASL握手失败问题,具体错误是IOException 'Invalid token in javax.security.sasl.qop'。我需要先理解这个错误的常见原因。根据经验,SASL相关的问题通常与Kerberos配置有关,或者QoP设置不一致。 首先,用户提到可能由于ZooKeeper中的残留文件导致的问题,比如version-2目录。之前引用[4]提到删除version-2并重启后解决了HMaster的问题,可能需要检查ZooKeeper的数据一致性。不过SASL握手失败更可能直接关联到Hadoop和Kerberos的配置。 接下来,检查Kerberos是否配置正确。引用[5]提到Hadoop使用Kerberos进行身份验证,所以需要确认所有节点的Kerberos票据是否有效,时间是否同步,以及jaas.conf文件是否正确。引用[1]和[2]都提到了设置JVMFLAGS指定jaas.conf路径,这可能与SASL配置有关,需要确认这些配置是否存在且路径正确。 然后,QoP(质量保护)设置。错误信息中提到了javax.security.sasl.qop无效,说明客户端和服务端的QoP配置不一致。Hadoop中的配置项如hadoop.rpc.protection、dfs.data.transfer.protection需要检查是否一致,是否在服务端和客户端有相同的值。 另外,SASL相关配置文件的正确性也很重要,比如core-site.xml、hdfs-site.xml中的安全配置是否正确,是否有遗漏的参数。同时,查看日志文件,如HDFS的NameNode和DataNode日志,以及客户端的错误日志,可以帮助定位具体问题。 用户可能遗漏的步骤包括更新配置后未重启服务,或者Kerberos票据过期。需要提醒用户检查kinit是否成功,keytab文件是否正确,并重启相关服务。此外,ZooKeeper的残留数据可能影响协调服务,但在此错误中可能不是主要原因,不过如果问题持续,清理ZooKeeper数据并重启也是一个可能的解决步骤。 最后,综合以上可能原因,分步骤给出解决方案,从检查Kerberos配置、QoP设置、配置文件、日志分析等方面逐一排查,并提醒用户注意配置一致性和服务重启的重要性。</think>针对Hadoop HDFS中出现的`SASL handshake failure IOException 'Invalid token in javax.security.sasl.qop'`问题,以下是系统性解决方案: --- ### **问题原因分析** 该错误通常由以下原因导致: 1. **Kerberos配置不一致**:Hadoop集群未正确配置Kerberos认证,或票据过期[^5]。 2. **QoP(Quality of Protection)参数不匹配**:客户端与服务端的`hadoop.rpc.protection`或`dfs.data.transfer.protection`参数配置不一致。 3. **ZooKeeper残留数据**:若集群依赖ZooKeeper(如HBase),残留的`version-2`目录可能导致协调服务异常[^4]。 --- ### **解决步骤** #### 1. 检查Kerberos配置 - **验证票据有效性**: 执行`klist`检查Kerberos票据是否过期,若过期需重新获取: ```bash kinit -kt <keytab_path> <principal> ``` - **检查`jaas.conf`文件**: 确保所有节点的`jaas.conf`路径正确,并通过环境变量`JVMFLAGS`指定(如引用[1][^1][^2]): ```bash export JVMFLAGS="-Djava.security.auth.login.config=/path/to/jaas.conf" ``` #### 2. 统一QoP参数 - **修改Hadoop配置文件**: 在`core-site.xml`中设置一致的QoP参数: ```xml <property> <name>hadoop.rpc.protection</name> <value>privacy</value> <!-- 可选值:authentication, integrity, privacy --> </property> ``` 在`hdfs-site.xml`中配置数据传输保护: ```xml <property> <name>dfs.data.transfer.protection</name> <value>privacy</value> </property> ``` - **同步配置到所有节点**: 确保客户端与服务端配置完全一致,并重启HDFS服务。 #### 3. 清理ZooKeeper残留数据 - 停止ZooKeeper服务后,删除`dataDir`目录下的`version-2`和`zookeeper_server.pid`文件(参考引用[4]): ```bash rm -rf /opt/zookeeper/data/version-2 rm -f /opt/zookeeper/data/zookeeper_server.pid ``` - 重启ZooKeeper服务,生成新数据目录。 #### 4. 验证与日志分析 - **检查HDFS服务日志**: 查看NameNode和DataNode的日志(`logs/hadoop-*-namenode-*.log`),定位具体握手失败的位置。 - **网络与时间同步**: 使用`ntpdate`确保集群节点时间同步,避免Kerberos因时间偏差拒绝认证。 --- ### **相关配置示例** ```bash # 启动HDFS前加载Kerberos配置 export HADOOP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf" hdfs namenode -format start-dfs.sh ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值