本文介绍当高可用集群中的ZKFC(ZooKeeper Failover Controller)日志出现Mismatched address stored in ZK
异常时,导致HDFS无法选出Active NameNode问题的原因及解决方案。
具体报错
java.lang.RuntimeException: Mismatched address stored in ZK for NameNode at /**.**.**.**:8020: Stored protobuf was nameserviceId: "hdfs-cluster"
namenodeId: "nn1"
port:8020
zkfcPort:8019
,address from our own configuration for this NameNode was xxxxx.emr.aliyuncs.com/**.**.**.**:8021
问题原因
该问题通常说明高可用集群中的ZKFC在ZooKeeper中存储的NameNode的信息与Hadoop配置文件中的不匹配,导致HDFS无法选出Active NameNode。存储在ZKFC中的端口是8020,而实际的NameNode ServiceRPC的端口是8021。早期部分EMR版本未开启ServiceRPC功能,如果您手动配置了ServiceRPC的8021端口,则需要初始化ZKFC的信息。
解决方案
方案一
在EMR控制台停止ZKFC组件。
您可以在目标集群HDFS服务的状态页面,单击ZKFC组件操作列中的停止。
登录集群,执行以下命令,初始化ZKFC。
su - hdfs hdfs zkfc -formatZK
在EMR控制台启动ZKFC组件。
您可以在目标集群HDFS服务的状态页面,单击ZKFC组件操作列中的启动。
方案二
在EMR控制台删除之前的ServiceRPC配置。
您可以在目标集群HDFS服务的配置页面,在hdfs-site.xml页签,将以下配置项的参数值置为空。
dfs.namenode.servicerpc-address.hdfs-cluster.nn1 dfs.namenode.servicerpc-address.hdfs-cluster.nn2 dfs.namenode.servicerpc-address.hdfs-cluster.nn3 (仅适用Hadoop3) 或 dfs.namenode.servicerpc-address.emr-cluster.nn1 dfs.namenode.servicerpc-address.emr-cluster.nn2 dfs.namenode.servicerpc-address.emr-cluster.nn3 (仅适用Hadoop3)
在EMR控制台重启HDFS。
您可以在目标集群HDFS服务的状态页面,在右上角选择
,来重启HDFS服务。
文档内容是否对您有帮助?