Клиент для 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

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

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

при подключении через ruby & thrift все работает нормально; мы добавляем данные, он попадает в систему, мы можем запросить/сканировать его. Кажется, все в порядке.

однако, при подключении с 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 '^]'.

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

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

4 ответов


Чарльз,

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

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

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

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

hbase.zookeeper.property.maxClientCnxns

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

у нас была аналогичная ситуация, но это происходило во время тяжелых операций с map-reduce jobs, после обновления до HBase-0.90.

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

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


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

Спасибо за помощь!


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


У меня была такая же проблема с подключением к моей БД hbase.

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