miércoles, mayo 07, 2014

Instalando Hadoop en una Raspberry Pi

¿Hadoop en una Raspberry Pi?

En cierto modo, se podría encontrar el motivo de esta entrada entre lo absurdo y lo innecesario. La capacidad de computación de una Raspberry Pi ni su memoria RAM no la hace excesivamente interesante para trabajos de Big Data, pero es cierto que ofrece una manera barata de montar un cluster con fines educativos en casa (especialmente si en casa tienes dos Raspberry Pi v2 una Raspberry Pi v1 y una BeagleBone Black)

La instalación de Hadoop en una Raspberry Pi resulta más sencillo de lo que cabe esperar. Y es que el pequeño ordenador de open hardware no se diferencia tanto de cualquier portátil u ordenador de sobremesa si obviamos la RAM de que dispone la v2 (512mb) y la capacidad del microprocesador (bueno, y el almacenamiento en sd, etc etc).

Básicamente, siguiendo el primero de los tutoriales sobre instalación de Hadoop e incluso modo tienes el 
90% del trabajo hecho. Sólo falta un pequeño detalle....

Y es que los trabajos de computación que se llegan a realizar en un Job MapReduce suelen requerir de gran cantidad de RAM y como nuestra pequeña Rpi no es que vaya sobrada precisamente, debemos indicar a la instalación de Hadoop unos límites para que el sistema operativo no se cargue los procesos del DataNode y del TaskTracker.

Esto es igualmente válido para ordenadores de consumo que no son los típicos que se pueden encontrar en un cluster de Hadoop de producción con chorrocientos Gb de RAM. En algún caso nos podríamos ver forzados a establecer límites en máquinas con más RAM, en alguna prueba que he hecho he tenido que establecer límites de 3gb en una máquina con 4Gb de RAM de 64 bits.

Déjate de rollos y dime que tengo que hacer

Fácil, para establecer estos límites tenemos que entrar en carpeta de configuración de Hadoop que en nuestra versión es $HADOOP_INSTALL/conf aunque también podría ser /etc/hadoop o en $HADOOP_INSTALL/etc/conf.

Una vez localizada la carpeta, abrir el archivo mapred-site.xml e introducir las siguientes propiedades:


    mapred.child.java.opt
    -Xmx386



    mapred.tasktracker.map.tasks.maximum
    1



    mapred.tasktracker.reduce.tasks.maximum
    1

Y voilá! Aunque parezca increíble esto fue lo único que tuve que hacer para agregar la Raspberry Pi a mi cluster casero. La explicación no es compleja: la primera propiedad limita la RAM utilizada por el proceso de Map o Reduce de la Rpi a 386, lo cual le da un pequeño margen para que el sistema operativo no nos mate el proceso. Las otras dos opciones limitan el número de operaciones de Map o Reduce que se pueden ejecutar en paralelo dentro de cada nodo de trabajo. Y es que si cada trabajo de Map o de Reduce es computacionalmente no muy intenso, se puede ajustar este parámetro para ejecutar varios trabajos en paralelo. En general he comprobado que en la Rpi no suele ser posible aumentar en número de tareas por encima de uno incluso en pequeños trabajos.

Y puestos a hablar de clusters caseros de Raspberrys Pi, ahí dejo un link de un señor que tuvo las pelotas.... Por la ley del máximo esfuerzo, de montarse un cluster con 40 Rpi Raspberry Pi 40 nodes cluster