2011-09-07 9 views
6

trato de escribir algunos datos a hbase con un programa clienteAcceso a HBase se ejecuta en VM con un cliente en el sistema host

HBase @ Hadoop se ejecuta en una máquina virtual preconfigurada de Cloudera @ ubuntu.

El cliente se ejecuta en el sistema que aloja la máquina virtual y ejecuta el cliente directamente en las máquinas virtuales.

Así que ahora quiero utilizar el cliente fuera de la máquina virtual para acceder a los servidores en la máquina virtual

estoy usando NAT. Para acceder a los servidores como HBase Maestro, HUE..running en la máquina virtual He configurado el reenvío de puertos en la caja virtual: enter image description here

Así que puede llegar a los sitios de visión general de la HBase Maestro, HUE ..

para ejecutar el cliente en contra de los servidores en la máquina virtual creé hbase-site.xml con contenido:

<configuration> 
    <property> 
     <name>hbase.zookeeper.quorum</name> 
     <value>localhost</value> 
    </property> 
    <property> 
     <name>hbase.zookeeper.property.clientPort</name> 
     <value>9997</value> 
    </property> 
    <property> 
     <name>hbase.master</name> 
     <value>localhost:9999</value> 
    </property> 
</configuration> 

así que esperaba que el reenvío funciona:

el mensaje de error s en el registro cuando se ejecuta el cliente se ve así:

11/09/07 17:48:00 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection 
11/09/07 17:48:00 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181 
11/09/07 17:48:01 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect 
java.net.ConnectException: Connection refused: no further information 
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1119) 
11/09/07 17:48:01 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181 
11/09/07 17:48:01 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect 
java.net.SocketException: Address family not supported by protocol family: connect 
    at sun.nio.ch.Net.connect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:500) 
    at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1050) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1077) 
11/09/07 17:48:03 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181 
11/09/07 17:48:04 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect 
java.net.ConnectException: Connection refused: no further information 
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1119) 
11/09/07 17:48:04 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181 
11/09/07 17:48:04 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect 
java.net.SocketException: Address family not supported by protocol family: connect 
    at sun.nio.ch.Net.connect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:500) 
    at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1050) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1077) 
11/09/07 17:48:05 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181 

Un registro de conexión correcta (cuando se ejecuta el cliente directamente en la máquina virtual) que parece:

11/09/07 09:05:29 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection 
11/09/07 09:05:29 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181 
11/09/07 09:05:29 INFO zookeeper.ClientCnxn: Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session 
11/09/07 09:05:29 INFO zookeeper.ClientCnxn: Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x132449d36df0006, negotiated timeout = 40000 

Así que sólo veo ahora en el registro la línea antes de que el primer problema que la conexión URL no es correcto ya que el puerto se envía correctamente, pero el IP sigue siendo localhost y no 10.0.2.15 como se configura en la configuración de reenvío de puertos:

Opening socket connection to server localhost/127.0.0.1:2181 
Sólo

sugerencia que encontré es deshabilitar IPV6 -> está deshabilitado en el host (win7) y vm (Ubuntu) y verificar el puerto -> se reenviaron correctamente

¿Alguien tiene una idea?

+1

Su puerto parece mal a mí. Su registro dice localhost: 2181 aunque configuró 9997. Intenté la misma configuración en mi clúster de Virtual Box y funciona bien. En realidad, no tienes que configurar otros puertos, permanece igual en tu VM. => Sin confusión :) Si este no fue el problema, podría reenviar el puerto 22 y abrir una conexión SSH mediante masilla y tunelizar sus puertos. –

Respuesta

5

Sólo para dar un valor añadido a los usuarios que leen esto, aquí está la solución:

Could not resolve the DNS name of cloudera-vm 

Para solucionar esto, simplemente he añadido a C: \ Windows \ System32 \ drivers \ etc \ hosts:

192.168.56.101 cloudera-vm 

Por lo tanto, cada vez que se usa cloudera-vm se resuelve a la IP adecuada. La máquina virtual se está ejecutando ahora en el modo Host-Only-Network y ahora está asignada a 192.168.56.101. Por lo tanto, no es necesario reenviar puertos.

Sólo por comparación:

hbase-site.xml

<configuration> 
    <property> 
    <name>hbase.zookeeper.quorum</name> 
    <value>cloudera-vm</value> 
    </property> 
</configuration> 

persistencia.xml

<persistence 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
    version="1.0"> 

    <persistence-unit name="hbase-addressbook" 
     transaction-type="RESOURCE_LOCAL"> 

     <properties> 
      <property name="datanucleus.ConnectionURL" value="hbase:cloudera-vm" /> 
      <property name="datanucleus.ConnectionUserName" value="" /> 
      <property name="datanucleus.ConnectionPassword" value="" /> 
      <property name="datanucleus.autoCreateSchema" value="true" /> 
      <property name="datanucleus.validateTables" value="false" /> 
      <property name="datanucleus.Optimistic" value="false" /> 
      <property name="datanucleus.validateConstraints" value="false" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Después de que me dieron otro error (conexión rechazada a pesar de todas las cadenas de conexión eran correctos) por lo tanto he investigado durante varios días para la causa.

La solución fue la de desactivar IPv6 de Ubuntu que se ejecuta en la máquina virtual añadiendo el siguiente al archivo: /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 1 
net.ipv6.conf.default.disable_ipv6 = 1 
net.ipv6.conf.lo.disable_ipv6 = 1 

Después de reiniciar todo se conecta y funciona correctamente :)

+0

Christian, su consejo para desactivar IPV6 fue muy útil. Gracias. –

0

Creo que puede establecer la configuración claramente en el código, como este HbaseConfiguration conf = HbaseConfiguration.create(); conf.set ("hbase.zookeeper.quorum", "ubuntu1, ubuntu2"); ... tal vez ayudar ..

+0

Tenga en cuenta que esta pregunta tiene una respuesta aceptada hace más de un mes. – Amy

0

has necesitado un simple:

<property name="connectionURL" value="hbase:master.standalone.hostname:60000"/> 
Cuestiones relacionadas