Hbase-клиент ConnectionLoss для/hbase-ошибки

Я сойду с ума:

Установленный Hadoop/Hbase, все работает;

/opt/jdk1.6.0_24/bin/jps
23261 ThriftServer
22582 QuorumPeerMain
21969 NameNode
23500 Jps
23021 HRegionServer
22211 TaskTracker
22891 HMaster
22117 SecondaryNameNode
21779 DataNode
22370 Main
22704 JobTracker

Псевдораспределенная среда.

hbase shell

работает и придумывает правильные результаты, запускающие "список" и;

hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.90.1-cdh3u0, r, Fri Mar 25 16:10:51 PDT 2011

hbase(main):001:0> status
1 servers, 0 dead, 8.0000 average load

При подключении через рубин и бережливость все работает нормально; мы добавляем данные, получая их в системе, мы можем запросить/сканировать ее. Все кажется прекрасным.

Однако при подключении к Java:

groovy> import org.apache.hadoop.hbase.HBaseConfiguration 
groovy> import org.apache.hadoop.hbase.client.HBaseAdmin 
groovy> conf = HBaseConfiguration.create() 
groovy> conf.set("hbase.master","127.0.0.1:60000"); 
groovy> hbase = new HBaseAdmin(conf); 

Exception thrown

org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getZooKeeperWatcher(HConnectionManager.java:1000)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.setupZookeeperTrackers(HConnectionManager.java:303)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:294)
    at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:156)
    at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:84)

Я пытался найти причину, но на самом деле я понятия не имею. Все, кажется, правильно установлено.

netstat -lnp|grep 60000
tcp6       0      0 :::60000                :::*                    LISTEN      22891/java  

Выглядит хорошо.

# telnet localhost 60000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Соединяет и умирает, если вы вводите что-либо + вводить (не уверен, что идея, бережливость на 9090 делает то же самое).

Может ли кто-нибудь мне помочь?

Ответ 1

Это ошибка Zookeeper (ZK). Клиент HBase пытается получить узел /hbase от Zookeeper и завершается неудачно.

Вы можете получить дамп ZK из главного веб-интерфейса HBase. Вы должны увидеть все соединения с ZK и выяснить, истощает ли их что-то.

Прежде чем углубиться во что-то еще, вы можете попробовать перезапустить кластер ZK и посмотреть, исправит ли это вашу проблему. (Странно, что вы видите это с одним клиентом).

HBase имеет настройку для увеличения количества подключений к ZK. Это

hbase.zookeeper.property.maxClientCnxns

В последнее время было несколько обновлений (см. ниже), связанных с количеством соединений по умолчанию (там был файл hbase-default.xml, который имеет все конфигурации по умолчанию). Вы можете переопределить это в своем файле hbase-site.xml (в разделе HBase conf dir) и увеличить его до 100 или более. Но убедитесь, что вы не маскируете реальную проблему таким образом, вы не должны видеть эту проблему с одним клиентом.

У нас была похожая ситуация, но это происходило во время тяжелых операций от заданий с уменьшением карты после обновления до HBase-0.90.

Вот несколько вопросов, связанных с вашей проблемой:

Если вы все еще не можете понять это, отправьте электронное письмо в список hbase-users или присоединитесь к каналу #hbase на freenode и задайте живые вопросы.

Ответ 2

Проблема заключалась в том, что (по какой-то причине... я не очень подробно разбираюсь) брандмауэр блокировал один из портов, необходимых для общения с Zookeeper; из командной строки это сработало, из моего приложения этого не произошло. Однако, когда я отключил брандмауэр, все работало нормально.

Благодарим за помощь!

Ответ 3

Это происходит, когда пользователь имеет неправильное значение, определенное для "zookeeper.znode.parent" в файле hbase-site.xml, полученном на стороне клиента, или, в случае написания пользовательского API, "zookeeper.znode.parent" был неправильно обновлено до неправильного местоположения. Например, для параметра "zookeeper.znode.parent" по умолчанию установлено значение "/hbase-unsecure", но если вы неправильно указали это, как говорится "/hbase", в отличие от того, что мы установили в кластере, мы столкнемся с этим исключение при попытке подключения к кластеру HBase

Ответ 4

У меня была такая же проблема, связанная с моей db hbase.

Оказывается, у меня был плохой адрес машины db в моем /etc/hosts.

Ответ 5

Шаг 1: Сначала проверим, работает ли главный узел HBase или нет, с помощью команд "jps".

Шаг 2. Использование команды stop-all.sh для остановки всех запущенных служб в кластере Hadoop.

Для получения дополнительной информации об этой проблеме:

http://commandstech.com/hbase-error-keeperrorcode-connectionloss-for-hbase-in-cluster/

Шаг 3: использование команды "start-all.sh" для запуска всех запущенных служб.

Шаг 4: используя команду "jps", чтобы проверить сервисы, показывает ли он, что мастер HBase работает, в противном случае все будет в порядке:

Шаг 5: Войдите в систему как пользователь root с помощью sudo su

Шаг 6: Перейти к пути к файлу оболочки hbase: "cd/usr/lib/habse-1.2.6-hadoop/bin/start-hbase.sh"

Шаг 7: Откройте оболочку hbase с помощью команды "hbase shell"

Шаг 8: используйте команду "list".