Actualizando a HBaseExplorer 0.6.0

Tras instalar HBaseExplorer 0.5.1 sobre HBase 0.94.2-rc3 anteriormente, se puede actualizar a la versión 0.6.0 (es necesario haber instalado la versión 0.5.1).

Lo primero es borrar todo el contenido de ~/hbexplorer/webapps/ y descargar hbaseexplorer-0.6.0.war en ~/hbexplorer/webapps/.
Tras eso, ejecutar HBaseExplorer para que se despliegue la aplicación web:

cd ~/hbexplorer
bin/catalina.sh start
sleep 60
bin/catalina.sh stop

Hay que borrar y copiar las librerías correctas:

rm ~/hbexplorer/webapps/hbaseexplorer-0.6.0/WEB-INF/lib/hbase-0.90.4-cdh3u2.jar
rm ~/hbexplorer/webapps/hbaseexplorer-0.6.0/WEB-INF/lib/hadoop-core-0.20.2-cdh3u2.jar

cp ~/hadoop/share/hadoop/common/hadoop-common-2.0.1-alpha.jar ~/hbexplorer/webapps/hbaseexplorer-0.6.0/WEB-INF/lib
cp ~/hbase/hbase-0.94.2.jar ~/hbexplorer/webapps/hbaseexplorer-0.6.0/WEB-INF/lib
cp ~/hadoop/share/hadoop/common/lib/commons-configuration-1.6.jar ~/hbexplorer/webapps/hbaseexplorer-0.6.0/WEB-INF/lib
cp ~/hadoop/share/hadoop/common/lib/hadoop-auth-2.0.1-alpha.jar ~/hbexplorer/webapps/hbaseexplorer-0.6.0/WEB-INF/lib
cp ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.0.1-alpha.jar ~/hbexplorer/webapps/hbaseexplorer-0.6.0/WEB-INF/lib

Si en algún momento el fichero de log ~/hbexplorer/logs/hbaseexplorer.log indica que falta alguna clase, buscar en ~/hadoop/share/hadoop/ utilizando el comando grep <paquete> * -R.

Iniciar la aplicación:

cd ~/hbexplorer
bin/catalina.sh start

Sólo queda conectarse a http://master00:8888/hbaseexplorer-0.6.0/, y utilizar la misma configuración que la vista para la versión 0.5.1.

Bugs

A pesar de toda la configuración no he conseguido que HBaseExplorer pueda lanzar trabajos sobre Hadoop 2.0, lo que impide obtener estadísticas sobre las diferentes tablas.

Cómo ejecutar HBaseexplorer 0.5.1 con HBase 0.94.2-rc3

HBaseexplorer permite visualizar los datos de HBase de manera cómoda. No es muy completo, pero es infinitamente mejor que tratar de visualizar los datos descargándolos de HDFS o por otros métodos.
Este artículo es una continuación de Cúster de Hadoop 2.0.1-alpha + HBase 0.94.2-rc3.

Tras leer este artículo, se recomienda leer el artículo que indica cómo actualizar a HBaseExplorer 0.6.0.

 

Instalación

 
Descargar HBaseexplorer 0.5.1 y descomprimir el fichero .zip en ~/hbexplorer.

Modificar ~/hbexplorer/conf/server.xml para lanzar el servidor web integrado en un puerto libre (el 8080 lo utiliza HBase como servidor REST, y tal vez nos de problemas). Modificar la línea del conector para que se lance en el puerto 8888 (o cualquier otro):

<Connector port="8888" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

Lanzar el servicor tomcat integrado para que la aplicación se despliegue. Para ello ejecutar:

cd ~/hbexplorer/
bin/catalina.sh start

Es importante estar en dicho directorio para que se los ficheros de log se guarden en ~/hbexplorer/logs y la información de conexión en ~/hbexplorer/work.

Como tarda un buen rato en cargar, podemos comprobar cuándo termina de cargar mirando el fichero de log:

tail -f logs/catalina.out

Es necesario lanzar la aplicación web una vez para que se descomprima el .war y poder sustituir las librerías de acceso a Hadoop y HBase. En la primera de las ejecuciones HBaseexplorer no funcionará correctamente.

Hay que borrar y copiar las librerías correctas:

rm ~/hbexplorer/webapps/ROOT/WEB-INF/lib/hbase-0.90.4-cdh3u2.jar
rm ~/hbexplorer/webapps/ROOT/WEB-INF/lib/hadoop-core-0.20.2-cdh3u2.jar

cp ~/hadoop/share/hadoop/common/hadoop-common-2.0.1-alpha.jar ~/hbexplorer/webapps/ROOT/WEB-INF/lib
cp ~/hbase/hbase-0.94.2.jar ~/hbexplorer/webapps/ROOT/WEB-INF/lib
cp ~/hadoop/share/hadoop/common/lib/commons-configuration-1.6.jar ~/hbexplorer/webapps/ROOT/WEB-INF/lib
cp ~/hadoop/share/hadoop/common/lib/hadoop-auth-2.0.1-alpha.jar ~/hbexplorer/webapps/ROOT/WEB-INF/lib
cp ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.0.1-alpha.jar ~/hbexplorer/webapps/ROOT/WEB-INF/lib

Si en algún momento el fichero de log ~/hbexplorer/logs/hbaseexplorer.log indica que falta alguna clase, buscar en ~/hadoop/share/hadoop/ utilizando el comando grep <paquete> * -R.

Conectarse a http://master00:8888/ y realizar login con:

Tras eso, crear una conexión a HBase haciendo click en el enlace “Create”, y rellenando la siguiente información:

 

Script de start

 
Añadir al script que establece variables ~/set_variables lo siguiente:

export CATALINA_HOME=/home/cluster/hbexplorer/

Añadir al script de start de Hadoop ~/start-master-all.sh al final de todo lo siguiente:

cd ~/hbexplorer/
bin/catalina.sh start

 

Script de stop

 
Añadir al script de stop de Hadoop ~/stop-master-all.sh al final de todo lo siguiente:

~/hbexplorer/bin/catalina.sh stop

Bugs

El log ~/hbexplorer/logs/hbaseexplorer.log crece bastante por algún problema con la sesión HTTP. No he conseguido solucionarlo :(

A pesar de toda la configuración no he conseguido que HBaseExplorer pueda lanzar trabajos sobre Hadoop 2.0, lo que impide obtener estadísticas sobre las diferentes tablas.

Clúster de Hadoop 2.0.1-alpha + HBase 0.94.2-rc3

Configuración inicial

 
Crear el usuario cluster en todos los nodos, y con directorio home /home/cluster/.
Crearemos un nodo master00 que contendrá el ResourceMangager, NameNode y JobHistory Server (podrían estar los tres en nodos diferentes). En un nodo a parte podríamos poner el SecondaryNameNode.

Crearemos nodos esclavos slave01, slave02, slave03,… cada uno con un NodeManager y un DataNode.

Crear el script ~/set_paths para configurar todas las variables de entorno necesarias con el contenido:

export HADOOP_PREFIX=/home/cluster/hadoop
export YARN_HOME=/home/cluster/hadoop
export PATH=/home/cluster/hbase/bin:$PATH
export JAVA_HOME=<code>update-java-alternatives -l | grep 1.6 | tail -1 | cut -f3 -d' '</code>

Hadoop

 
La arquitectura de Hadoop 2.0.1 se compone de: un ResourceManager, un NameNode, un MapReduce JobHistory Server, un SecondaryNameNode (no usaré), varios NodeManagers, varios DataNodes, varios WebAppProxy (no usaré).

Descargar la versión Hadoop 2.0.1-alpha y descomprimirla en ~/hadoop.

Configurar ~/hadoop/etc/hadoop/core-site.xml:

Configurar ~/hadoop/etc/hadoop/hdfs-site.xml para NameNode y los DataNodes:

Configurar ~/hadoop/etc/hadoop/yarn-site.xml para ResourceManager y los NodeManagers:

Copiar ~/hadoop/share/hadoop/common/templates/conf/mapred-site.xml a ~/hadoop/etc/hadoop y configurar ~/hadoop/etc/hadoop/mapred-site.xml para los trabajos (Jobs) MapReduce:

Configurar ~/hadoop/etc/hadoop/httpfs-site.xml :

 

HBase

 
Para trabajar con HBase, ejecutaremos en el nodo master00 lo siguiente: HBase Master y ZooKeeper (único del quorum).
En cada nodo slave ejecutaremos una instancia RegionServer.
Exportar del repositorio la versión hbase-0.94.2-rc3 en /home/cluster/hbase-0.94.2-rc3.

Modificamos las dependencias de maven para que compile para Hadoop 2.0.1 al especificar el perfil “2.0”. Para ello, editamos el fichero ~/hbase-0.94.2-rc3/pom.xml, y cambiamos la línea que dice:

por:

Recompilar HBase para Hadoop 2.0:

Descomprimir el paquete creado ~/hbase-0.94.2-rc3/target/hbase-0.94.2.tar.gz en ~/hbase:

Modificamos el fichero ~/hbase/conf/regionservers para que esté vacío:

Modificar ~/hbase/conf/hbase-env.sh y descomentar la línea que dice:

Configurar ~/hbase/conf/hbase-site.xml :

   

Scripts de start/stop del nodo master

 
Una vez configurado todo, creamos el script ~/start-master-all.sh con el contenido:

El script ~/stop-master-all.sh con el contenido:

Scripts de start/stop de los nodos slaves

 
Creamos el script ~/start-slave-all.sh con el contenido:

El script ~/stop-slave-all.sh con el contenido:

 

Interfaces de usuario

 
Después de configurar todo lo anterior y ejecutar el nodo master mediante:

y en el caso de desear esclavos, ejecutar (opcionalmente en el propio master) lo siguiente en cada esclavo:

Se dispondrán de interfaces de usuario web en las siguientes direcciones:

 

Links

 
Referencia de puertos por defecto para Cloudera.
 

Bugs

 

Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.; Host Details : local host is: “master00/192.168.0.6”; destination host is: “master00”:50070;

 
En a página http://master00:50070/dfsnodelist.jsp?whatNodes=LIVE hay enlaces a los Datanodes vivos. Al pinchar alguno de ellos se muestra el error anterior. Esto es debido a un bug en el que se indica erróneamente cuál es la dirección al IPC del Namenode: nnaddr=. Se puede navegar sustituyendo el puerto 50070 por el puerto IPC de Hadoop 8020, de manera que la dirección:

http://master00:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=%2F&nnaddr=192.168.0.6:50070

se sustituye por:

http://master00:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=%2F&nnaddr=192.168.0.6:8020