java.lang.NumberFormatException при попытке подключиться к HBase - PullRequest
0 голосов
/ 01 июня 2018

Я устанавливаю конфигурацию 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

Как ее решить?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Спасибо за ответ @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 должен получить переменную String, поэтому, если setDelimiterParsingDisabled(false), он сначалапреобразовать массив в String, добавив скобки [].

Наконец, zookeeper анализирует переменную String с использованием разбиения нотации ,, поэтому он, наконец, получает ip1 = "[ip1", ip2 = "ip2", ip3 = "ip3]" и выбрасываетNumberFormatException

0 голосов
/ 01 июня 2018

Несколько советов для отладки:

Во-первых, есть отдельное свойство, которое вы можете указать специально для клиентского порта, вместо использования IP:port нотации: hbase.zookeeper.property.clientPortПоэтому попробуйте указать эти два параметра отдельно - один список адресов, разделенных запятыми, а второй - только это одно число (хотя я передаю его в виде строки, поэтому "2181")

Во-вторых, ВАЖНО: будьте осторожныс предоставлением IP-адресов здесь в целом, поскольку HBase кажется очень разборчивым с точки зрения IP-адресов и имен хостов.Гораздо лучше использовать имена хостов и поместить эти IP-адреса в файл /etc/hosts на вашем клиенте вместе с нужными именами хостов

...