Llegan los recomendados de la semana, mientras puedo sacar tiempo para terminar alguno de los post que tengo en borrador(entre otros… el de Mahout, una reflexión y algunos delirios)  😛

  • A veces queremos ejecutar una aplicación sin necesidad de instalarla y manteniendo la configuración, para eso llega Spoon que nos ofrece la Virtualización de aplicaciones desde la nube. Aún le falta ser multiplataforma, pero prometen que lo será.  Via Genbeta. (También vale la pena darle un vistazo a Spoon Server)
  • Enrique Dans comparte un genial corto, CineEspañol, algo de humor sobre el mundo del cine en España.
  • Nadie puede negar que el equipo de Google Chrome sabe algunas cosas sobre la Web y los navegadores. Por eso vale la pena darle al menos una ojeada a 20 Things I learned about browsers and the web. Las ilustraciones y animaciones en html5 son un plus.
  • La capacidad de cambiar de opinión no exclusiva ni inherente al ser humano. Eduardo Punset habla de la capacidad de cambiar de opinión y de simular una situación como indicadores de inteligencia en Acostumbramos a vivir por encima de nuestros medios.
  • Cuando pensamos en un PetaByte, probablemente no estamos consientes de la magnitud que representa, la infografía How much is a petabyte nos da una idea. (vía microsiervos)

Eso es todo por el momento, para terminar una genial caricatura de Montt, a más de uno le recordará algo.

Los recomendados de esta semana vienen cargados de diferentes temas: SEO, aplicaciones….

Para terminar, ahora que se acerca Navidad (y muchas personas la celebran desde octubre…) una genial caricatura de Montt:

Mientras termino la revisión de Mahout, un post rápido con los recomendados de la semana 😛

Eso es todo por el momento, para ilustrar la entrada una tira de XKCD que muy probablemente les recordará algo 😛

JabRef es una de mis herramientas favoritas para gestión de referencias, llevo un par de años usándola y aún me sorprende con funcionalidades que me facilitan la vida. El motivo de este post es documentar el uso de algunas de éstas funcionalidades, algunas de uso muy común y otras para usos específicos.

  • Para empezar maneja el formato BibTex, que separa el formato del contenido y que no depende de la aplicación, es manejado por muchas herramientas en especial por las que manejan LATEX, como Lyx.
  • Tiene varias formas para ingresar una nueva referencia, las que más uso son:
    • BibTex->New entry (CTRL+N o el icono + en la barra de herramientas), despliega un menú donde seleccionamos el tipo de entrada (articulo, tesis, libro, etc.) y a continuación nos presenta los campos a ingresar.
    • BibTex->New entry from plain text. despliega el menú de tipo de entrada y a continuación nos presenta un área donde podemos pegar texto plano y etiquetar partes de éste como cada uno de los campos de la referencia. También tenemos una pestaña para pegar directamente la referencia en Bibtex.
  • Permite importar referencias desde otros formatos. File->import into current database o File-> Import into new database. Entre los formatos soportados se encuentran BibTeXML, JSTOR y MSBib(Formato de bibliografía de MS Office 2007).
  • Permite exportar las referencias, no solo a formatos de bibliografía de otras aplicaciones sino también a formatos que facilitan la visualización. File->Export y se selecciona el formato de salida, mi favorito para visualización es HTML Table (with Abstract & BibTex).
  • Permite encontrar duplicados. Tools->Scan Database->Find duplicates
  • Permite hacer búsquedas y filtros.
  • Permite el manejo de grupos. Lo descubrí hace poco, solo debemos habilitar la interfaz de grupos (CTRL->SHIFT->G)
  • Permite hacer búsquedas directamente a JSTOR, IEEEXplore, ACM Portal, entre otras Bases de datos. Menú Web Search.

Éstas son las opciones que más utilizo pero JabRef tiene muchas más herramientas, además de ser extensible usando plugins.

Por último, un dato útil, para importar la bibliografía a MS Word 2007 primero exportamos la bibliografía en formato Office 2007 y luego, en Word, en la pestaña Referencias hacemos clic en Administrar Fuentes, en la ventana que nos despliega vemos “Fuentes disponibles en”, vamos a Examinar y buscamos el xml que generamos al exportar, ahora podemos usar las referencias en nuestro documento.

Actualización 2012-03-11: Hoy tuve el problema complementario, exportar la bibliografía de un documento de Word 2007 a Bibtex, la solución fue mucho más simple de lo que esperaba gracias a el add-in Refmanager.

Llegan los recomendados de la semana, con algunos eventos, lanzamientos, herramientas y artículos:

Eso es todo por ésta ocasión, terminemos con un anuncio de Google, vía la Cocina creativa.

Hadoop Logo

En los post anteriores instalamos Hadoop en un nodo, tanto en modo standalone como pseudo-distribuido, y en un cluster de dos nodos, ahora revisaremos la creación de una aplicación MapReduce.

Hadoop Logo

Para estas pruebas configuraremos un ambiente de desarrollo usando una instalación en modo pseudo-distribuida, eclipse y el plugin de Hadoop para éste IDE. También se puede usar la maquina virtual de entrenamiento proveída por Cloudera, que incluye una instalación de Hadoop, ejemplos, eclipse, entre otras herramientas. Para ejecutar ésta máquina virtual se puede usar VMWare Player. Una vez descargada la imagen de la maquina virtual se descomprime, se abre el archivo .vmx con VMPlayer.

Configuración del entorno de desarrollo

Para nuestro ambiente de desarrollo iniciamos con una máquina con Hadoop configurado en modo pseudo-distribuido, descargamos e instalamos eclipse, y procedemos con la instalación del plugin de Hadoop:

  1. Establecer las variables de entorno JAVA_HOME y HADOOP_HOME, con la ruta a la carpeta raiz de Java y Hadoop respectivamente.
  2. Copiar el plugin de hadoop a la carpeta de plugins de eclipse.
    cp $HADOOP_HOME/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin.jar PATH_TO/eclipse/plugins/
  3. Iniciamos Eclipse.
  4. Abrimos la perspectiva Map/Reduce. Window->Open Perspective->Others->Map/Reduce
  5. Entramos en la vista MapReduce Locations.
  6. Clic derecho sobre la lista MapReduce Locations, seleccionar New Hadoop location.
  7. Le damos un nombre a la nueva ubicación, y configuramos el host y puerto tanto del MapReduce master(JobTracker) cómo del dfs.master (NameNode).
  8. Ahora en el explorador de proyectos podremos ver los archivos de nuestro sistema de archivos distribuido en DFS Locations.

Ahora tenemos listo nuestro ambiente de desarrollo, a continuación crearemos una aplicación MapReduce.

Crear una nueva aplicación

El plugin de Hadoop nos crea un nuevo tipo de proyecto en eclipse y tres tipos de archivo Mapper, Reducer y MapReduce Driver. Para crear nuestra nueva aplicación crearemos un proyecto MapReduce:

Continuar leyendo

Los recomendados de esta semana, llena de nuevos lanzamientos, anuncios y herramientas:

Para terminar los dejo con una excelente tira de xkcd, que me recuerda mucho las conversaciones con el servicio técnico….

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.

 

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

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