尝试连接到HBase时发生java.lang.NumberFormatException
我正在设置HBase配置尝试连接到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
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
包解析的。也许问题是显而易见的,但以防万一,问题是端口号有一个右括号,所以它不能转换为数字。如果它是