尝试连接到HBase时发生java.lang.NumberFormatException

尝试连接到HBase时发生java.lang.NumberFormatException,java,hbase,apache-zookeeper,Java,Hbase,Apache Zookeeper,我正在设置HBase配置new HBaseGraphConfiguration().set(“HBase.zookeeper.quorum”,zookeeper\u QORUM\u节点)其中 ZOOKEPER_QORUM_NODE=“172.31.17.251:2181172.31.17.252:2181172.31.17.253:2181” 但是它抛出了一个java.lang.NumberFormatException,错误的一部分是 Caused by: java.lang.NumberFo

我正在设置HBase配置
new HBaseGraphConfiguration().set(“HBase.zookeeper.quorum”,zookeeper\u QORUM\u节点)
其中

ZOOKEPER_QORUM_NODE=“172.31.17.251:2181172.31.17.252:2181172.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)

如何解决此问题?

以下是一些建议,供您尝试围绕此问题进行调试:

首先,您可以专门为客户端端口提供一个单独的属性,而不是使用
IP:port
表示法:
hbase.zookeeper.property.clientPort
,因此请尝试分别提供这两个参数——一个是逗号分隔的地址列表,第二个参数只是这一个数字(但我将其作为字符串传递,因此
“2181”


第二,重要事项:通常在这里提供IP地址时要小心,因为HBase在IP地址和主机名方面似乎非常挑剔。最好使用主机名,并将这些IP地址与所需的主机名一起放在客户端的
/etc/hosts
文件中。

一些建议,供您尝试围绕此进行调试:

首先,您可以专门为客户端端口提供一个单独的属性,而不是使用
IP:port
表示法:
hbase.zookeeper.property.clientPort
,因此请尝试分别提供这两个参数——一个是逗号分隔的地址列表,第二个参数只是这一个数字(但我将其作为字符串传递,因此
“2181”


第二,重要事项:一般来说,在这里提供IP地址时要小心,因为HBase在IP地址和主机名方面似乎非常挑剔。最好使用主机名,并将这些IP地址与所需的主机名一起放在客户端的
/etc/hosts
文件中

谢谢@VS\FF的回答,我发现了一个问题nd现在也发布了完整的答案

这个问题的简短解决方案就是设置
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需要获取
字符串
变量,因此如果
setDelimiterParsingDisabled(false)
,它将首先将数组转换为
字符串
,并添加括号
[]


最后,zookeeper使用拆分符号解析
字符串
,这就是为什么它最终得到
ip1=“[ip1”,ip2=“ip2”,ip3=“ip3]”
,并抛出一个
NumberFormatException
感谢@VS\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需要获取
字符串
变量,因此如果
setDelimiterParsingDisabled(false)
,它将首先将数组转换为
字符串
,并添加括号
[]


最后,zookeeper使用拆分符号
解析
字符串
变量,这就是它最终得到
ip1=“[ip1”,ip2=“ip2”,ip3=“ip3]”的原因
并抛出一个
NumberFormatException

可能问题很明显,但万一问题是端口号有一个右括号,因此无法将其转换为数字。如果它是配置文件的一部分,请尝试在括号前留一个空格。@该变量没有任何括号,并且在控制台中日志输出它有
connectString=[*,*,*]
,这意味着这两个括号是由解析器添加的?第一个括号没有错误
[
,但第二个括号有错误
]
@Juan我需要添加的另一件事是,如果我设置
ZOOKEPER_QORUM_NODE=“172.31.17.31.17.252172.31.17.253”
变量将变为
connectString=[172.31.17.251:2181172.31.17.252:2181172.31.17.253]:2181
请附上您的代码。输入字符串的base
“2181]”
,我猜你用
打散了字符串数组。你需要将数组转换为列表,然后逐个打散。@Bejond我的代码与上面的代码一样,
ZOOKEPER\u QORUM\u NODE=“172.31.17.251:2181172.31.17.252:2181172.31.17.253:2181”
这是Zookeer仲裁字符串,我猜它转换为列表的原因是这个
ZOOKEPER_QORUM_节点
字符串是由官方的
org.apache.hbase
包解析的。也许问题是显而易见的,但以防万一,问题是端口号有一个右括号,所以它不能转换为数字。如果它是