2012-03-08 52 views
7

Tengo dificultades para configurar un clúster Hbase distribuido con 2 nodos, uno es mi máquina y el otro es la máquina virtual, utilizando el adaptador "host-only" en VirtualBox.Hbase: Cómo especificar el nombre de host para Hbase master

Mi problema es que el servidor de región (desde la máquina de VM) no puede conectarse a Hbase master ejecutándose en la máquina host. Aunque en la cáscara hbase Puedo hacer una lista, crear la tabla, ..., en regionserver en la máquina VM ('esclavo'), el registro siempre muestran

org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to master.  Retrying. Error was: 
java.net.ConnectException: Connection refused 

Anteriormente, he preparado correctamente Hadoop, MapReduce en HDFS y este clúster con 2 nodos nombrados como 'maestro', y 'esclavo', 'maestro' como nodo maestro y ambos 'maestro' y 'esclavo' funcionan como nodos esclavos, estos nombres están vinculados a la interfaz vboxnet0 de VirtualBox (los nombres de host en/etc/hostname es diferente). También especifico la propiedad "slave.host.name" para cada nodo como 'maestro' y 'esclavo'.

Parece que el maestro de Hbase en el 'maestro' siempre se ejecuta con el nombre de host 'localhost', desde la máquina esclava, no puedo hacer telnet al maestro de hbase con el nombre de host 'maestro'. Entonces, ¿hay alguna manera de especificar el uso del nombre de host para Hbase master como 'maestro', he intentado especificar algunas propiedades sobre la interfaz DNS para ZooKeeper, Master, RegionServer para usar la interfaz interna entre maestro y esclavo, pero todavía no funciona en absoluto .

/etc/hosts para tanto como algo así como

127.0.0.1 localhost 
127.0.0.1 ubuntu.mymachine 

# For Hadoop 
192.168.56.1 master 
192.168.56.101 slave 

# The following lines are desirable for IPv6 capable hosts 
::1  ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 

Respuesta

2

archivo Mi anfitrión es como

127.0.0.1 localhost

192.168.2.118 shashwat.machine.com Shashwat

haga su archivo de hosts de la siguiente manera:

127.0.0.1 localhost

Para Hadoop

192.168.56.1 maestros

192.168.56.101 esclavos

y en hbase put conf siguientes entradas:

<property> 
<name>hbase.rootdir</name> 
<value>hdfs://master:9000/hbase</value> 
</property> 
<property> 
<name>hbase.master</name> 
<value>master:60000</value> 
<description>The host and port that the HBase master runs at.</description> 
</property> 
<property> 
<name>hbase.regionserver.port</name> 
<value>60020</value> 
<description>The host and port that the HBase master runs at.</description> 
<property> 
<name>hbase.cluster.distributed</name> 
<value>true</value> 
</property> 
<property> 
<name>hbase.tmp.dir</name> 
<value>/home/cluster/Hadoop/hbase-0.90.4/temp</value> 
</property> 
<property> 
<name>hbase.zookeeper.quorum</name> 
<value>master</value> 
</property> 
<property> 
<name>dfs.replication</name> 
<value>2</value> 
</property> 
<property> 
<name>hbase.zookeeper.property.clientPort</name> 
<value>2181</value> 
<description>Property from ZooKeeper's config zoo.cfg. 
The port at which the clients will connect. 
</description> 
</property> 

Si está utilizando un host local ywhere que retire y sustituirla por "maestro" que es el nombre de NameNode en su HostFile ....

uno morething que puede hacer

sudo gedit/etc/hostname

esto abrirá el archivo de nombre de host por defecto ubuntu estará ahí así que conviértalo en maestro. y reinicia tu sistema

Para hbase especifican en el archivo "regionserver" dentro dir conf poner estas entradas

maestro esclavo

y restart.everything.

+0

Buena respuesta. Una nueva consulta, ¿es posible crear un clúster HBase sin editar el archivo 'hosts'? (Me refiero específicamente a Windows) –

0

hay dos cosas que fijan esta clase de problema para mí:

1) Retire todos los nombres de "localhost", sólo tienen 127.0.0.1 apuntando al nombre del nodo hmaster.

2) ejecute "nombre de host X" en su nodo maestro hbase, para asegurarse de que el nombre de host coincida con lo que está en/etc/hosts.

no ser un experto en redes, no puedo decir por qué esto es importante, pero es :)

0

mayoría de las veces el error proviene de Zookeeper que enviar un nombre de host incorrecto.

Puede comprobar lo Zookeeper envía como HBase equipo maestro:

Encuentra carpeta bin Zookeeper:

bin/zkCli.sh -server 127.0.0.1:2181 
get /hbase/master 

Esto debe darle la IP principal HBase que responder Zookeeper, por lo que este IP debe ser accesible.

2

La respuesta que @Infinity proporcionó parece pertenecer a la versión ~ 0.9.4.

Para la versión 1.1.4.

de acuerdo con el código fuente de

org.apache.hadoop.hbase.master.HMaster 

la configuración debería ser:

<property> 
    <name>hbase.master.hostname</name> 
    <value>master.local</value> 
    <!-- master.local is the DNS name in my network pointing to hbase master --> 
    </property> 

Después de ajustar este valor, los servidores región son capaces de conectarse a maestro hbase; sin embargo, en mi entorno, el servidor de la región se quejaron:

com.google.protobuf.ServiceException: java.net.SocketException: Invalid argument 

El problema desapareció después de haber instalado el JDK de Oracle 8 en lugar de JDK-7 abierta en todas mis nodos.

Así que en conclusión, aquí está mi solución:

  • el uso del servidor de nombres DNS en lugar de configurar/etc/hosts, como hbase es muy exigente en nombre de host y parece requiere la búsqueda de DNS, así como revertir Búsqueda de DNS.

  • actualización JDK de Oracle 8

  • utilizar el elemento de ajuste mencionado anteriormente.