由于Zookeeper未知后异常,HBase HMaster无法启动

由于Zookeeper未知后异常,HBase HMaster无法启动,hbase,apache-zookeeper,Hbase,Apache Zookeeper,在Centos 7上运行带有Hadoop 2.8.5的HBase 2.0.4,1个主节点,4个从节点。我在HBase 2.1.3中尝试了相同的设置,但出现了相同的问题 从该错误日志中可以看出,由于Zookeeper未解析HRegionservers,HMaster无法启动 2019-03-29 13:58:34,961 INFO [main] zookeeper.ZooKeeper: Initiating client connection, connectString=node0.ken:2

在Centos 7上运行带有Hadoop 2.8.5的HBase 2.0.4,1个主节点,4个从节点。我在HBase 2.1.3中尝试了相同的设置,但出现了相同的问题

从该错误日志中可以看出,由于Zookeeper未解析HRegionservers,HMaster无法启动

2019-03-29 13:58:34,961 INFO  [main] zookeeper.ZooKeeper: Initiating client connection, connectString=node0.ken:2181, node1.ken:2181, node2.ken:2181, node3.ken:2181, node4.ken:21
81 sessionTimeout=90000 watcher=org.apache.hadoop.hbase.zookeeper.PendingWatcher@165e389b
2019-03-29 13:58:34,965 WARN  [main] zookeeper.RecoverableZooKeeper: Unable to create ZooKeeper Connection
java.net.UnknownHostException:  node1.ken: Name or service not known
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
        at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929)
        at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324)
        at java.net.InetAddress.getAllByName0(InetAddress.java:1277)
        at java.net.InetAddress.getAllByName(InetAddress.java:1193)
        at java.net.InetAddress.getAllByName(InetAddress.java:1127)
        at org.apache.zookeeper.client.StaticHostProvider.<init>(StaticHostProvider.java:61)
        at org.apache.zookeeper.ZooKeeper.<init>(ZooKeeper.java:445)
        at org.apache.zookeeper.ZooKeeper.<init>(ZooKeeper.java:380)
        at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.checkZk(RecoverableZooKeeper.java:131)

----/etc/hosts----


所有主机都可以相互ping,SELinux和Firewall D被禁用,我可以从所有其他节点成功地
telnet node1:2181
,我已经尝试了此处建议的步骤,但Zookeeper仍然无法解决:

我错过什么了吗?Zookeeper还能从哪里获得主机解析


更新:2019-03-29

问题似乎是HBase使用的Zookeeper客户端(Zookeeper.version=3.4.10),可能与此错误有关: 有人知道如何用更新的Zookeeper客户端HBase替换Zookeeper客户端HBase吗

更新:2019-04-01 我尝试将
hbase/lib/zookeeper-3.4.10.jar
替换为
hbase/lib/zookeeper-3.4.13.jar
,仅从不同的API调用输出相同的错误:

2019-03-29 19:09:46,880 INFO  [main] zookeeper.ZooKeeper: Initiating client connection, connectString=node0.ken:2181, node1.ken:2181, node2.ken:2181, node3.ken:2181, node4.ken:2181 sessionTimeout=1200000 watcher=org.apache.hadoop.hbase.zookeeper.PendingWatcher@336880df
2019-03-29 19:09:46,912 INFO  [main-SendThread( node1.ken:2181)] zookeeper.ClientCnxn: Opening socket connection to server  node1.ken:2181. Will not attempt to authenticate using SASL (unknown error)
2019-03-29 19:09:46,917 WARN  [main-SendThread( node1.ken:2181)] zookeeper.ClientCnxn: Session 0x0 for server  node1.ken:2181, unexpected error, closing socket connection and attempting reconnect
java.nio.channels.UnresolvedAddressException
        at sun.nio.ch.Net.checkAddress(Net.java:101)
        at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
        at org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java:277)
        at org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287)
        at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021)
        at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1064)
我尝试编译一个小Java类来测试这些函数:

导入java.net.InetAddress;
导入java.net.InetSocketAddress;
导入java.net.SocketAddress;
导入java.net.Socket;
导入sun.nio.ch.Net;
导入java.net.UnknownHostException;
导入java.io.IOException;
导入java.util.array;
导入java.util.List;
公共类GetIPHostname{
公共静态void main(字符串[]args){
ip地址;
字符串主机名;
试一试{
ip=InetAddress.getLocalHost();
hostname=ip.getHostName();
System.out.println(“您当前的IP地址:+IP”);
System.out.println(“您当前的主机名:“+Hostname”);
//List hostname_List=Arrays.asList(“node0”、“node1”、“node2”、“node3”、“node4”);
List hostname_List=Arrays.asList(“node0.ken”、“node1.ken”、“node2.ken”、“node3.ken”、“node4.ken”);
for(字符串cur\u主机名:主机名\u列表){
字符串ip_address=InetAddress.getByName(cur_hostname).getHostAddress();
System.out.println(“主机名解析:“+cur\u主机名+”->“+ip\u地址”);
最终插座=新插座();
SocketAddress地址=新的InetSocketAddress(cur_主机名,2181);
试一试{
InetSocketAddress isa=Net.checkAddress(地址);
System.out.println(“ISA:+ISA.getAddress()+”->“+ISA.getPort());
InetAddress[]iadresses=InetAddress.getAllByName(当前主机名);
用于(当前地址:iAddress){
System.out.println(“InetAddress:+cur_ia.getHostAddress());
}
socket.connect(地址);
socket.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}//连接到远程主机
}
}捕获(未知后异常e){
e、 printStackTrace();
}
}
}
。。。两个API都能够使用主机文件解析地址,甚至可以连接到端口2181的Zookeeper服务器:

[root@node1 test]# java GetIPHostname
Your current IP address : node1.ken/10.158.57.151
Your current Hostname : node1.ken
Hostname resolved: node0.ken -> 10.158.57.150
ISA: node0.ken/10.158.57.150 -> 2181
InetAddress: 10.158.57.150
Hostname resolved: node1.ken -> 10.158.57.151
ISA: node1.ken/10.158.57.151 -> 2181
InetAddress: 10.158.57.151
Hostname resolved: node2.ken -> 10.158.57.152
ISA: node2.ken/10.158.57.152 -> 2181
InetAddress: 10.158.57.152
Hostname resolved: node3.ken -> 10.158.57.153
ISA: node3.ken/10.158.57.153 -> 2181
InetAddress: 10.158.57.153
Hostname resolved: node4.ken -> 10.158.57.154
ISA: node4.ken/10.158.57.154 -> 2181
InetAddress: 10.158.57.154
2019-03-29 19:09:46,880 INFO  [main] zookeeper.ZooKeeper: Initiating client connection, connectString=node0.ken:2181, node1.ken:2181, node2.ken:2181, node3.ken:2181, node4.ken:2181 sessionTimeout=1200000 watcher=org.apache.hadoop.hbase.zookeeper.PendingWatcher@336880df
2019-03-29 19:09:46,912 INFO  [main-SendThread( node1.ken:2181)] zookeeper.ClientCnxn: Opening socket connection to server  node1.ken:2181. Will not attempt to authenticate using SASL (unknown error)
2019-03-29 19:09:46,917 WARN  [main-SendThread( node1.ken:2181)] zookeeper.ClientCnxn: Session 0x0 for server  node1.ken:2181, unexpected error, closing socket connection and attempting reconnect
java.nio.channels.UnresolvedAddressException
        at sun.nio.ch.Net.checkAddress(Net.java:101)
        at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
        at org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java:277)
        at org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287)
        at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021)
        at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1064)
[root@node1 test]# java GetIPHostname
Your current IP address : node1.ken/10.158.57.151
Your current Hostname : node1.ken
Hostname resolved: node0.ken -> 10.158.57.150
ISA: node0.ken/10.158.57.150 -> 2181
InetAddress: 10.158.57.150
Hostname resolved: node1.ken -> 10.158.57.151
ISA: node1.ken/10.158.57.151 -> 2181
InetAddress: 10.158.57.151
Hostname resolved: node2.ken -> 10.158.57.152
ISA: node2.ken/10.158.57.152 -> 2181
InetAddress: 10.158.57.152
Hostname resolved: node3.ken -> 10.158.57.153
ISA: node3.ken/10.158.57.153 -> 2181
InetAddress: 10.158.57.153
Hostname resolved: node4.ken -> 10.158.57.154
ISA: node4.ken/10.158.57.154 -> 2181
InetAddress: 10.158.57.154
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>node0.ken, node1.ken, node2.ken, node3.ken, node4.ken</value>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>node0.ken,node1.ken,node2.ken,node3.ken,node4.ken</value>
</property>