Mordiendo Hadoop: Instalación en Cluster

En un post anterior realizamos la instalación de hadoop en un nodo, tanto en modo standalone como pseudo-distribuido. Ahora realizaremos la instalación en dos nodos.

Hadoop Logo

Un par de cosas a tener en cuenta:

  • De acuerdo a la documentación, típicamente se tiene un nodo como NameNode y otro como JobTracker. Los demás nodos serán configurados como DataNode y TaskTracker.
  • Aunque no es obligatorio, es recomendable que los nodos tengan el mismo HADOOP_HOME, directorio raíz de la distribución.

Lo primero por hacer es descargar Hadoop, descomprimirlo en lo que será nuestro HADOOP_HOME, y configurar el JAVA_HOME dentro de conf/hadoop-env.sh.

wget http://apache.mirrors.tds.net//hadoop/core/stable/hadoop-0.20.2.tar.gz
tar -xvf hadoop-0.20.2.tar.gz
vim hadoop-0.20.2/conf/hadoop-env.sh

Para distribuir un poco la carga configuraremos el NameNode en una máquina y el JobTracker en otra. También configuraremos los dos nodos como TaskTracker y DataNode.

Para ello debemos modificar el archivo de configuración conf/core-site.xml con la url del que será el NameNode.

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://namenode:9000</value>

</property>

</configuration>

Para especificarle a Hadoop en donde almacenar los bloques de datos del DFS se puede usar la propiedad dfs.data.dir y como valor la ruta del directorio, en el archivo conf/hdfs-site.xml. En éste archivo es necesario configurar la replicación de los bloques, el valor predeterminado es 3, en éste caso solo tenemos dos nodos así que utilizaremos un valor de dfs.replication de 2.

<configuration>
<property>
<name>dfs.data.dir</name>
<value>/data/hadoopdd</value>
</property>
<property>

<name>dfs.name.dir</name>

<value>/data/hadoopnd</value>

</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

Debemos especificar la ubicación del JobTracker, lo hacemos en el archivo de configuración mapred-site.xml. En este archivo también configuramos donde se almacenarán los archivos temporales.

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>157.253.236.228:54311</value>

</property>

<property>

<name>mapred.local.dir</name>

<value>/data/hadoopmr</value>

</property>

</configuration>

Debemos asegurarnos que podemos iniciar sesión ssh sin contraseña en las dos máquinas, para ello seguimos los pasos indicados para la instalación en un solo nodo y, además, agregar las llaves públicas ssh de las máquinas master en el archivo .ssh/authorized_keys máquinas slave:

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

$ ssh-copy-id -i .ssh/id_dsa.pub {ip_slave}

Los siguientes archivos solo se deben editar en los master(en este caso en los dos nodos, pero al agregar un nuevo nodo solo se modifican en los NameNode y JobTracker).

En el archivo conf/masters se listan los nodos master, tanto NodeName como JobTracker, en el archivo conf/slaves todos los nodos DataNode y TaskTracker, uno por línea.

Formateamos el sistema de archivos distribuido, ejecutando en el NameNode:

./hadoop-0.20.2/bin/hadoop namenode -format

Arrancamos los demonios de hdfs, ejecutando

bin/start-dfs.sh

Podemos los procesos ejecutados en cáda maquina usando el comando jps.

A continuación iniciamos los demonios de Mapreduce, ejecutando en el JobTracker:

bin/start-mapred.sh

Para detener los demonios del sistema de archivos y de mapreduce, respectivamente, ejecutamos:

bin/stop-dfs.sh
bin/stop-mapred.sh

Ahora deberíamos poder correr el ejemplo que utilizamos en la instalación anterior:

$ bin/hadoop fs -put conf input

$ bin/hadoop jar hadoop-*-examples.jar grep input/conf output 'dfs[a-z.]+'

Sin embargo se pueden presentar algunos problemas en el dfs, por un bug que aún se encuentra abierto. En http://www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_(Multi-Node_Cluster) podemos ver otro tutorial(en ingles) de la instalación del cluster, con una configuración un poco diferente, y las alternativas para resolver los problemas que se pueden presentar.

En un próximo artículo revisaremos el desarrollo de una aplicación MapReduce para Hadoop.

 

Recomendados de la semana IX

Los recomendados de la semana, en realidad de las semanas dado que ha pasado más de una semana desde los últimos, empiezan con un rumor que se ha confirmado, algunas herramientas… entre otras cosas.

Los dejo con una genial tira de xkcd, Online Communities 2:

Online Communities 2

Mordiendo Hadoop: Instalación y primeras pruebas.

Hadoop Logo

Hadoop es un framework para computación distribuida que soporta aplicaciones con uso intensivo de datos. Implementa, entre otras cosas, el paradigma MapReduce y HDFS, un sistema de archivos distribuido y el principal sistema de almacenamiento en Hadoop.

En esta primera aproximación probaré la instalación y ejecución de Hadoop, haciendo un resumen de los pasos necesarios, traduciéndolos, y comentarios al margen frente a la documentación.

Los prerrequisitos de Hadoop son Java 1.6, ssh server y rsync, en Windows será necesario también Cygwin. Para éstas pruebas usaré una máquina virtual con Debian 5.0.5, Java 1.6.0_20, openssh 5.1p1.

La instalación de Hadoop se reduce a descargar la versión estable y descomprimirlo:

wget http://apache.mirrors.tds.net//hadoop/core/stable/hadoop-0.20.2.tar.gz
tar -xvf hadoop-0.20.2.tar.gz
Ahora, entrando a la carpeta que se descomprimió, se edita conf/hadoop-env.sh definiendo la variable JAVA_HOME con la ubicación de la instalación de java, en teoría funcionaría si la variable JAVA_HOME está definida en el entorno, pero es mejor definirla en el archivo para facilitar la distribución. A continuación se puede ejecutar el comando:
bin/hadoop
Para ver  la documentación de uso.
Existen 3 configuraciones posibles de Hadoop: Standalone, pseudo-distribuida y distribuida. La configuración predeterminada es Standalone, no distribuida y un solo proceso de java, útil para depuración según la documentación. Con ésta instalación se puede ejecutar el primer ejemplo de Hadoop, un grep basado en MapReduce:
$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
$ cat output/*

La salida crea dos archivos: part-0000 con la respuesta y .part-0000.crc con el CRC checksum.

Para ejecutar Hadoop en el modo Pseudo-distribuido, varios nodos en una máquina en procesos java diferentes, debemos modificar los archivos conf/core-site.xml, conf/hdfs-site.xml y conf/mapred-site.xml así:

conf/core-site.xml:

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://localhost:9000</value>

</property>

</configuration>

conf/hdfs-site.xml:

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

conf/mapred-site.xml:

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>localhost:9001</value>

</property>

</configuration>

En el ambiente de pruebas funciona ssh a localhost sin contraseña, sin embargo esto puede no ser cierto en todos los ambientes. En el manual de Hadoop describen la forma configurarlo para ese caso. Esto sólo es necesario si no se puede hacer ssh a localhost sin contraseña:

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Ahora podemos ejecutar hadoop, primero creando un nuevo sistema de archivo distribuido, para luego ejecutar los nodos

$ bin/hadoop namenode -format
$ bin/start-all.sh

Ahora podemos acceder a la interfaz web del Job Tracker y del Namenode en el puerto 50030 y 50070 respectivamente.

Ahora ejecutaremos el ejemplo con el que probamos el Singlenode, para lo cual necesitamos copiar los archivos de entrada al sistema de archivos distribuido, en el cual también se crearán los archivos de salida, para hacer visibles las diferencias entre los dos modos se pueden borrar las carpetas input y output creadas anteriormente. Para ejecutar el ejemplo hacemos:

$ rm -rf input output

$ bin/hadoop fs -put conf input

$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'

Ahora los archivos de salida están en el sistema de archivos distribuido, para traerlos ejecutamos:

$ bin/hadoop fs -get output output
$ cat output/*

o podemos ver el resultado directamente en el sistema de archivos distribuido:

bin/hadoop fs -cat output/*

Cuando terminamos podemos detener los nodos ejecutando:

$ bin/stop-all.sh

La salida incluye además de la respuesta los logs de la ejecución.

En un próximo post revisaremos la configuración de Hadoop en modo distribuido en un Cluster de máquinas.

Hadoop Logo

 

Recomendados de la semana VIII

Los recomendados de la semana, en el inicio de la “semana de receso” de la universidad, que va a estar llena de trabajo (aunque en un tema interesante….).

Eso es todo por el momento, los dejo con el recomendado musical de la semana:

Francisca Valenzuela

Friendship

“La amistad es un alma que habita en dos cuerpos; un corazón que habita en dos almas.” Aristóteles

Cada persona que pasa por tu vida te deja algo de sí. Pero aún más que las que pasan, las personas que permanecen, sea físicamente o no, hacen parte de ti… te hacen ser quien eres.

Los momentos que pasamos juntos, las confidencias, la risa, las peleas… todo hace parte de mi, ha formado lo que soy ahora. Gracias por compartir momentos de tu vida conmigo y quiero que éste día en el que cumples un año más de vida recuerdes que siempre contarás con mi amistad y con mi apoyo cuando lo necesites.

Lovers Go Home

Mario Benedetti.

Ahora que empecé el día
volviendo a tu mirada,
y me encontraste bien
y te encontré más linda.

Ahora que por fin
está bastante claro
dónde estás y dónde estoy.

Sé por primera vez
que tendré fuerzas
para construir contigo
una amistad tan piola,
que del vecino
territorio del amor,
ese desesperado,
empezarán a mirarnos
con envidia,
y acabarán organizando
excursiones
para venir a preguntarnos
cómo hicimos.


Este post es dedicado a una persona muy especial que cumple años hoy.


Recomendados de la semana VII

Un poco tarde, debido a estar en la semana 7 del semestre, llegan los recomendados de la semana:

Quedan algunas recomendaciones en el tintero, pero será para la próxima edición de los recomendados. Hasta una próxima ocasión.

Recomendados de la semana VI

Los recomendados de esta semana demuestran, una vez más, la diversidad de los contenidos en Internet :P.

Eso es todo por esta edición de recomendados, como “ñapa” les dejo una tira de xkcd.

“A veces, cuando la gente se va, se apodera de mí un miedo repentino de que mueran mientras están afuera, y nunca olvidaría la última cosa que les dije”

Amazon Kindle 3: La experiencia de un dispositivo dedicado

El Kindle siempre me pareció un dispositivo interesante, pero con la llegada de la tercera generación del dispositivo se volvió irresistible. Las características que me impulsaron a querer el dispositivo, frente a lo que ofrecían las versiones anteriores, son:

  • El poder recibir los documentos personales a través de WiFi, sin los cargos extra derivados del uso de la red 3G, enviándolos a la cuenta de correo @free.kindle.com del dispositivo.  Poder recibirlos aún si no hay una conexión WiFi disponible, a través de la red 3G, aunque me parece algo caro, $0.99USD por MB (o $0.15USD en Estados Unidos)
  • Soporte de diferentes tipos de archivo, AZW, mobi, pdf, txt y conversión automática de otros archivos a estos formatos, aunque se echa de menos tener soporte del formato estándar ePub.
  • Navegador experimental, basado en WebKit, que permite acceder a la web completa (usando la conexión WiFi) entre otras cosas… a Google Reader.
  • Duración de la batería hasta de 1 mes, con la conexión inalámbrica desactivada, o 11 horas con la conexión activada.
  • Poder transmitir datos directamente desde el PC usando el cable USB.

 

 

 

 

 

 

 

 

 

 

 

 

Después de estar jugando un poco con el dispositivo hay algunas características que me han enganchado aún más:

  • La sensación es aún mejor de lo que esperaba. La pantalla tiene muy buen contraste se siente como leer en papel, y el peso del dispositivo ayuda a dar esa impresión.
  • El poder cambiar el tamaño de la letra, la orientación de la pantalla, el espaciado entre líneas, palabras por línea y la fuente, permite mejorar la experiencia, aunque es una lástima que algunas de éstas opciones no están disponibles en los documentos PDF.
  • La integración con el diccionario de Oxford, facilita mucho la lectura, teniendo en cuenta que un gran porcentaje de los libros  y artículos que leo están en ingles. Además desde el libro se puede buscar tanto dentro del documento como del diccionario, Wikipedia, Google, Amazon Kindle Store y los ítems dentro del dispositivo.
  • Permite crear colecciones, para agrupar los documentos.
  • La kindle store es muy fácil de usar.
  • Text-to-speach que funciona muy bien con documentos en ingles.
  • Permite guardar notas y resaltar los libros. Muy útil cuando se está haciendo una bibliografía anotada. Además se guarda una copia en el archivo de texto “My Clippings”, donde están disponibles para usarlos cuando se conecta el PC.
  • Integración con Twitter y Facebook. Permite compartir muy fácilmente las notas o los textos resaltados.

No todo puede ser bueno, pero en general estoy muy satisfecho con el Kindle. Dentro de los puntos débiles está la falta de soporte de ePub y que el servicio de conversión no funcione con éste tipo de archivos, aunque para sobrellevarlo está Calibre, un organizador de ebooks que permite la conversión entre diferentes formatos.

Enlace (Galería de los usuarios del kindle)

Actualización 03/10/10: Para probar el programa de asociados de Amazon cambié el enlace de la página del dispositivo añadiéndole el código de referido. 😛

Recomendados de la semana V

Los recomendados de ésta semana, en un pequeño descanso gracias a la red de la universidad :P.
  • Después de cinco días de usar Priority Inbox en Gmail, aún me parece que necesita aprender. Usar filtros y poder marcar los mensajes como importantes o no importantes es una buena forma de ayudarlo a mejorar, por lo pronto yo uso por defecto el inbox tradicional, y le permito sobrescribir los filtros, y cambié la acción de algunos filtros para que no marquen los mensajes como importantes(p.e.  los de publicidad).  En el blog oficial de Google nos comentan está y otras nuevas funcionalidades en sus  aplicaciones.

Para terminar, una de las charlas del TED2009, “Elizabeth Gilbert on nurturing creativity“:

Recomendados de la semana IV

Aunque más que semanales parezcan semestrales… dejo algunas cosillas interesantes por el momento.

Esto es todo por el momento, espero que los próximos recomendados lleguen con mayor frecuencia. Les dejo una pequeña dosis de Montt, en honor de los mineros de Chile.

Montt en dosis diarias. Mineros.