尝试连接到hbase时出现java.lang.numberformatexception

hzbexzde  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(493)

我正在设置hbase配置 new HBaseGraphConfiguration().set("hbase.zookeeper.quorum", ZOOKEPER_QORUM_NODE) 哪里 ZOOKEPER_QORUM_NODE = "172.31.17.251:2181,172.31.17.252:2181,172.31.17.253:2181"; 但是它抛出了一个 java.lang.NumberFormatException ,错误部分为

Caused by: java.lang.NumberFormatException: For input string: "2181]"
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
  at java.lang.Integer.parseInt(Integer.java:580)
  at java.lang.Integer.parseInt(Integer.java:615)
  at org.apache.zookeeper.client.ConnectStringParser.<init>(ConnectStringParser.java:72)

错误行之前的控制台输出是

2018-05-30 14:40:52 INFO  org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=[172.31.17.251:2181, 172.31.17.252:2181, 172.31.17.253:2181] sessionTimeout=180000 watcher=hconnection-0x25a65b770x0, quorum=[172.31.17.251:2181, 172.31.17.252:2181, 172.31.17.253:2181], baseZNode=/hbase
2018-05-30 14:40:52 INFO  org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=[172.31.17.251:2181, 172.31.17.252:2181, 172.31.17.253:2181] sessionTimeout=180000 watcher=hconnection-0x25a65b770x0, quorum=[172.31.17.251:2181, 172.31.17.252:2181, 172.31.17.253:2181], baseZNode=/hbase

如何解决?

0wi1tuuw

0wi1tuuw1#

感谢@vs\u ff的回答,我已经找到了问题,现在也发布了完整的答案
这个问题的短期解决方案刚刚确定 conf.setDelimiterParsingDisabled(true); 首先建议设置 hbase.zookeeper.quorum = "ip1,ip2,ip3" (主机ip)和 hbase.zookeeper.property.clientPort = 2181 (端口)分开。
ip地址字符串被输入到hbase配置中。然后,它有两种解析方法,由

conf = new PropertiesConfiguration();
conf.setDelimiterParsingDisabled(true);

如果这个 setDelimiterParsingDisabled(true) 则配置会将原始字符串输入到zookeeper,如下所示 "ip1,ip2,ip3" ,否则 setDelimiterParsingDisabled(false) (这是默认设置),在这种情况下,它将向zookeeper输入一个数组,表示 [ip1,ip2,ip3] .
然而,Zookeeper需要一个 String 变量,所以如果 setDelimiterParsingDisabled(false) ,它将首先将数组转换为 String ,添加括号 [] .
最后,zookeeper解析 String 使用分裂表示法的变量 , ,这就是为什么它最终 ip1 = "[ip1", ip2 = "ip2", ip3 = "ip3]" 并抛出一个 NumberFormatException

xzlaal3s

xzlaal3s2#

一些建议供您尝试围绕此问题进行调试:
首先,您可以专门为客户机端口提供一个单独的属性,而不是使用 IP:port 符号: hbase.zookeeper.property.clientPort 所以试着分别提供这两个参数——一个是逗号分隔的地址列表,第二个参数就是这个数字(我把它作为字符串传递,所以 "2181" )
第二,重要的一点:通常在这里提供ip地址时要小心,因为hbase在ip地址和主机名方面似乎非常挑剔。最好使用主机名并将这些ip地址放入 /etc/hosts 文件以及所需的主机名

相关问题