Clúster ODROID-XU4

En los últimos años, los temas de big data y ciencia de los datos se han convertido en una corriente dominante en innumerables industrias. Las empresas de alta tecnología de Silicon Valley ya no son las únicas proveedoras de temas como Hadoop, regresión logística y aprendizaje de máquinas. Estar familiarizado con las tecnologías del big data se está convirtiendo en un requisito cada vez más necesario en los trabajos relacionados con las tecnologías en cual parte del mundo. Desafortunadamente, conseguir experiencia real y práctica con las tecnologías de big data generalmente significa tener acceso a un costoso clúster de ordenadores que te permitan ejecutar tus consultas. Sin embargo, la reciente revolución de los ordenadores de placa reducida ha hecho que la verdadera computación distribuida sea accesible para un uso personal y a nivel de formacion para realizar tareas como estas y otras.

He trabajado en el ámbito del Big Data durante ocho años. Aunque he tenido acceso a un clúster para procesar petabytes de datos durante un tiempo, nunca tuve la oportunidad de diseñar y crear un clúster propio. Decidí crear un pequeño clúster principalmente para familiarizarme con las operaciones y la configuración básica del software de big data y un clúster subyacente. Mi objetivo teniendo en cuenta el coste era montar un clúster de cuatro nodos por menos de 600$. También quería crear un clúster lo suficientemente potente como para poder procesar datos con tamaños de 10 gigabytes.

Los elementos clave a considerar a la hora de seleccionar la tecnología del clúster son el almacenamiento de datos, la E/S, el rendimiento de la red, los núcleos de la CPU y la memoria RAM disponible. Afortunadamente, Hardkernel ha fabricado un ordenador de placa reducida que destaca en estas especificaciones: el ODROID-XU4. Con un procesador Samsung Exynos 5422 8-core de 2GHz, ethernet Gigabit integrado, múltiples puertos USB 3.0, 2 GB de RAM y disponibilidad de almacenamiento de datos de alto rendimiento con unidades eMMC y tarjetas microSD UHS-1, el XU4 es un ordenador de placa reducida formidable con un coste relativamente bajo.

Con el hardware de los nodos ya elegido, nuestra primera tarea es diseñar la topología del clúster o, dicho de otro modo, cómo se conectarán los nodos entre sí. Hay varias cosas que influyen en esto, especialmente el tipo de computación distribuida que tengas pensado hacer. Los modelos de computación distribuida se pueden categorizar básicamente como grandes CPU o big data. Para este proyecto, nos centrando en el big data, específicamente en el análisis de datos. El modelo de big data más común actualmente en uso para el análisis de datos es mapreduce, que está implementado por Apache Hadoop y Apache Spark, que son tecnologías de almacenamiento de datos muy populares utilizadas por muchas de las grandes compañías de tecnología.

En la mayoría de los clústeres MapReduce a escala comercial, la topología de clúster general tiene varios de nodos perimetrales en los que el usuario inicia sesión para usar el clúster, uno o más nodos principales que son usados por el clúster para coordinar la actividad informática y el almacenamiento de datos, y varios nodos esclavos que se utilizan para tareas de cálculo o almacenamiento de datos, o ambos (consulte la Figura 1). Piensa en ello como si dividieran un gran proyecto entre varias personas para mejorar el rendimiento de todos: un director envía la solicitud del proyecto (el nodo central) con varios gerentes coordinando qué hacer (los nodos principales) y los empleados que realizan esas tareas y combinan su trabajo (los nodos esclavos) en una solución final para el director.

Figure 1 - Typical MapReduce Cluster Topology
Figura 1: Típica topología de clúster de MapReduce

Para nuestro clúster XU4, vamos a combinar el concepto de nodo perimetral y de nodo principal en un nodo maestro, y luego vinculamos los esclavos al nodo maestro. Esto significa que el nodo maestro será el nodo en el que los usuarios inicien sesión para usar el clúster y el nodo que coordina a los esclavos. Esto también implica que la comunicación de nodo a nodo del clúster ocurrirá dentro de una red privada, mientras que el nodo maestro necesitará tener conexión a una red externa. El diseño de red del XU4 para un clúster de cuatro nodos debería parecerse al que se muestra en la Figura 2.

Figure 2 - ODROID-XU4 Cluster Topology
Figura 2 - Topología del clúster ODROID-XU4

Esta topología requiere que el nodo maestro pueda conectarse a dos redes independientes. Sin embargo, el XU4 solo tiene un puerto ethernet. Debemos añadir una segunda conexión de red al nodo maestro con un dongle ethernet USB 3.0

El XU4 ofrece dos opciones de almacenamiento: una unidad eMMC y una tarjeta microSD. Ambos tienen pros y contras. La unidad eMMC es extremadamente rápida, mientras que el coste de la tarjeta microSD por gigabyte es más asequible, pero es más lenta que la unidad eMMC. La buena noticia es que el rendimiento de lectura y escritura de una tarjeta microSD UHS-1 está prácticamente a la par de los discos duros mecánicos, que normalmente se utilizan en grandes clusters comerciales. Esto significa que la tarjeta microSD representa una buena opción para el almacenamiento masivo de datos. Sin embargo, la velocidad de la unidad eMMC es muy atractiva para usarla como unidad de inicio desde la cual se ejecutara el software. Dado que, cada nodo de nuestro clúster tendrá una unidad eMMC para el arranque y una tarjeta microSD para el almacenamiento masivo de datos. Recomiendo utilizar al menos una unidad eMMC de 16 GB para el nodo maestro, ya que será donde, como usuario, trabajarás, mientras que te puedes ahorrar dinero obteniendo unidades eMMC de 8 GB más baratas para los nodos esclavos. Para el almacenamiento de datos, busca algunas tarjetas microSD rápidas de 64 GB o más para cada uno de los nodos.

El conjunto final de materiales necesarios para el proyecto incluye un pequeño switch Ethernet para la red interna del clúster, varios cables Ethernet de 6 pulgadas y separadores de PCB para apilar los XU4. También cogí un UART serial para el XU4 en caso de que tuviera que conectarme a un dispositivo directamente para solucionar algún problema, aunque nunca lo necesité. Un elemento que no llegue a comprar y que sería bueno tener a posteriori es una fuente de alimentación que pueda proporcionar 5V de potencia a 4 amperios simultáneamente a todos los nodos, en lugar de tener un conjunto desordenado e ineficiente de adaptadores de pared conectados a una regleta de enchufes. Esta será una futura mejora del proyecto.

Una vez que todos los materiales hayan sido recopilados y se monte el clúster, nuestra primera tarea es configurar el sistema operativo y la red en todos los nodos. Yo opté por la distribución Ubuntu 15.10 actual de ODROID para XU4. Grabé este sistema operativo en cada uno de los módulos eMMC, y luego uno por uno fui arrancando cada dispositivo sin la tarjeta microSD adicional (que se utilizará para el almacenamiento posterior) mientras los fui conectado directamente a mi red doméstica. Esto me permitió conectarme por SSH directamente a los dispositivos después del primer arranque. Una vez que el dispositivo arrancase, localice la dirección IP que es asignada a cada XU4 por el servidor DHCP de mi casa e inicié sesión. La cuenta de usuario por defecto es "odroid" y la contraseña también "odroid". Después de conectarme, instalé ODROID Utility para configurar mejor el sistema operativo. Esto se puede hacer descargando directamente la utilidad desde Github:

$ sudo -s
 $ wget -O /usr/local/bin/odroid-utility.sh https://raw.githubusercontent.com/ mdrjr/odroid-utility/master/odroid-utility.sh
 $ chmod +x /usr/local/bin/odroid-utility.sh
 $ odroid-utility.sh
Las tres tareas que realiza ODROID Utility son nombrar el nodo, deshabilitar Xorg y maximizar el tamaño de la partición de la unidad eMMC. Llamé maestro al nodo maestro, y a los otros tres: esclavo1, esclavo2 y esclavo3.

El nodo maestro debe configurarse adicionalmente para usar el dongle ethernet USB 3.0 ya que se conectará a una red externa. Para configurar el nodo maestro y así poder tener conexión a Internet desde la red conectada al dongle USB, deberás crear un archivo llamado "eth1" en el directorio /etc/network/interfaces.d/ con el siguiente contenido (suponiendo que esa red tiene un servidor DHCP):

auto eth1
 iface eth1 inet dhcp
Del mismo modo, para que el ethernet integrado sea usado para la red interna del clúster, necesitas crear un archivo llamado eth0 en la misma carpeta indicando una dirección IP estática:
auto eth0
 iface eth0 inet static
 address 10.10.10.1
 netmask 255.255.255.0
 network 10.10.10.0
 broadcast 10.10.10.255
Es necesario configurar un servidor DHCP en el nodo maestro para proporcionar una dirección IP a los nodos esclavos de la red interna, y el nodo maestro deberá proporcionar servicios NAT entre las redes externa e interna. Además, en todos los nodos es necesario editar el archivo /etc/hosts para permitir el direccionamiento nemotécnico de los nodos por su nombre sin necesidad de un servicio DNS. Puedes encontrar instrucciones detalladas para realizar estas tareas en mi blog en http://bit.ly/2aJdAmi.

Una vez que los nodos estén configurados según el diseño de red deseado, los nodos se pueden cerrar y desconectar de la red doméstica. El Ethernet integrado de los nodos debe estar conectada al switch Ethernet de la red interna, y la red doméstica debe conectarse al dongle Ethernet USB 3 del nodo principal.

Antes de reiniciar cada nodo, formatea las tarjetas microSD con un sistema de archivos ext4 y conecta una a cada nodo. Arranca todos los dispositivos. Deberías conectarte por SSH al nodo maestro, y desde allí conectarte por SSH a cada esclavo. Tu ultima tarea de configuración es editar el archivo /etc/fstab en cada dispositivo de forma que la tarjeta microSD esté montada en un punto de montaje /data. Para hacer esto, necesita encontrar el UUID del volumen de la tarjeta microSD con el comando blkid, luego añade una línea al archivo /etc/fstab similar a que aparece a continuación:

UUID=c1f7210a-293a-423e-9bde-1eba3bcc9c34 /data ext4 defaults 0 0
Reemplazar el UUID de tu tarjeta microSD por el que aparece arriba, que también se detalla en mi blog. Una vez completados estos pasos, tendrá un clúster completamente configurado que está listo para albergar un software de big data como Hadoop. Instalar Hadoop es un proceso bastante complicado, y lo cubriré en otro artículo. Por ahora, hemos montado con éxito un clúster XU4 que puede utilizarse para cualquier tipo de procesamiento de datos complejo. Puedes encontrar más información sobre este clúster ODROID-XU4 en http://bit.ly/2aJdAmi.

Be the first to comment

Leave a Reply