2011-05-27 18 views
10

Me estoy volviendo completamente loco:Cliente Hbase Error de ConnectionLoss para/hbase

Hadoop/Hbase instalado, todo se está ejecutando;

/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 

Entorno pseudo distribuido.

cáscara hbase

está trabajando y dar con resultados correctos corriendo 'lista' y;

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 

Cuando se conecta a través de rubí & de segunda mano, todo está funcionando bien; estamos agregando datos, ingresando en el sistema, podemos consultarlo/escanearlo. Todo parece estar bien.

Sin embargo, cuando se conecta con 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) 

que he estado tratando de encontrar la causa, pero realmente no tienen ni idea en absoluto. Todo parece estar correctamente instalado.

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

Se ve bien también.

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

Conexiones y muere si escribe nada + marca (no estoy seguro si esa es la idea, el ahorro en 9090 hace lo mismo).

¿Alguien me puede ayudar?

Respuesta

8

Charles,

Este es un error Zookeeper (ZK). El cliente HBase intenta obtener el nodo/hbase de Zookeeper y falla.

Puede obtener un volcado ZK de la interfaz web maestra HBase. Debería ver todas las conexiones con ZK y descubrir si algo las está agotando.

Antes de sumergirse en otra cosa, podría intentar reiniciar su clúster ZK y ver si soluciona su problema. (Es extraño que lo veas con un solo cliente).

HBase tiene una configuración para aumentar el número de conexiones a ZK. Es

hbase.zookeeper.property.maxClientCnxns 

Hubo algunos cambios (véase más adelante) últimamente relacionados con el número de conexiones por defecto (hay un archivo hbase-default.xml que tiene todas las configuraciones por defecto). Puede anular esto en su archivo hbase-site.xml (en el directorio de configuración de HBase) y aumentarlo a 100 o más. Pero asegúrese de no enmascarar el problema real de esta manera, no debería ver este problema con un solo cliente.

Hemos tenido una situación similar, pero estaba sucediendo durante las operaciones pesadas de trabajos de reducción de mapa, después de actualizar a HBase-0.90.

Aquí hay un par de problema relacionado con su problema:

Si usted todavía no puede averiguarlo enviar un correo electrónico a la lista de usuarios HBase o únete al canal #hbase en freenode y haz preguntas en vivo.

3

El problema en realidad era que (por alguna razón ... realmente no lo entiendo en detalle) el firewall estaba bloqueando uno de los puertos necesarios para hablar con Zookeeper; desde la línea de comandos funcionó, desde mi aplicación no funcionó. Sin embargo, cuando deshabilité el firewall, todo funcionó bien de repente.

¡Gracias por tu ayuda!

+4

¿podría agregar qué puertos necesita abrir zookeper? ¡Gracias! – Gevorg

+1

¿Se necesita algo más aparte de TCP 2181? – Gevorg

1

Tuve el mismo problema al conectarme a mi hbase db.

Resulta que tenía una dirección incorrecta de la máquina de db en mi /etc/hosts.

2

Esto ocurre cuando el usuario tiene un valor incorrecto definido para "zookeeper.znode.parent" en hbase-site.xml de origen en el lado del cliente o en el caso de una API personalizada escrita, el "zookeeper.znode.parent" fue incorrectamente actualizado a una ubicación incorrecta. Por ejemplo, el valor predeterminado "zookeeper.znode.parent" se establece en "/ hbase-unsecure", pero si lo especifica incorrectamente como digamos "/ hbase" en lugar de lo que hemos configurado en el clúster, nos encontraremos con esto excepción al tratar de conectarse al clúster HBase