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

Licencia 100% libre: WTFPL – Do What The Fuck You Want To Public License

Es una licencia  realmente interesante. La información completa en la página de Sam Hocevar (WTFPL). El texto de la licencia dice:

Es una licencia genérica, así que si quieres que sea para software, deberás añadir:

100% libre.

El carril bus es posible

Hoy ha sido uno de esos días en los que una buena conversación ha resultado en un intercambio de ideas de lo más productivo.

Sobre la discusión centrada en los problemas que el carril bus ocasiona, aparecieron soluciones muy interesantes. Los poblemas se centraban en: las quejas de los comerciantes porque la gente no tenía sitio para aparcar y el problema de los distribuidores y la carga y descarga.

Lo primero que hay que reconocer es que la existencia del carril bus es un indicativo de un desarrollo social mayor que el de una ciudad que no se preocupa por ello (y todavía más que una que esté en contra del carril bus).

Sobre las quejas de comerciantes: es una falacia. No toda la gente que aparca en una manzana de radio lo hace para ir a su comercio (y es probable que prácticamente nadie), y las plazas que están ocupadas a menudo son por gente de estancias de larga duración, que seguro que es para estar en su casa/oficina. Además, un negocio bueno se mantiene por ser bueno, no porque vayan 5 personas más o menos.

Sobre las necesidades de repartidores: en este punto me llevé una grata sorpresa. La solución es que, ya que los buses están disponibles de 7 a 23 horas, que se haga el reparto antes de las 7 horas o después de las 23 horas pudiendo utilizar el carril bus para tareas de reparto. Por supuesto, quitar las medianas de plástico que se ponen para que la gente incívica no se meta en los carriles de bus, y que la gente incívica no lo haga ¬¬.

Añadido a lo anterior, reservar un espacio en las plazas de aparcamiento del lado contrario de la calle donde está el carril bus para carga y descarga que sean necesarias realizar por el día y que se llevará la mercancía con carrito hasta su destino… ¡pero sólo para cuestión laboral, no para irse a tomar un café!.

¡Y ya está solucionado el problema! El carril bus es posible en una sociedad desarrrollada.

Como comentario, hay que tener en cuenta que esta posibilidad se ha de llevar a cabo en calles con 3 carriles y una sóla dirección: carril bus, carril tránsito, carril carga-descarga (espacio reservado también para camiones de la basura).

En calles con 2 carriles, será necesario habilitar espacios de carga-descarga en calles perpendiculares.

En calles con 2 carrilles pero de ambas direcciones, se convertirá la calle en unidireccional y se aplicará la solución anterior.

Calles con 4 carriles y poca acera, se convertirán en bus-transito-carga/descarga-bici, pudiendo aprovechar parte del último carril para incrementar la anchura de la acera y plantar árboles.

Calles con 4 carriles y mucha acera, convertir en unidireccional con 2 carriles de tránsito y carril bici parte de acera, o bien bidireccional con la solución equivalente a 2 carriles mostrada más arriba.

 

¡Qué buenas ideas generó la charla :)

Cómo abrir un candado de combinación

Tengo un candado de combinación de 3 números y me olvidé de la clave.

Si tu candado es uno de esos cutres de 3 números del Thecathlon, he aquí como abrirlo. Perlo no lo hagáis para robar ¿eh?.

[videofile width=”320″ height=”240″]http://mischorradas.nishilua.com/wp-content/uploads/2012/09/abrir_candado.avi[/videofile]

Descargar el vídeo