Montar un entorno de Big Data moderno se ha convertido en un trabajo a tiempo completo que requiere más habilidades de fontanería de sistemas que de ingeniería de datos. Hace un año escribí maravillas sobre Apache Spark, pero la cruda realidad corporativa es que Spark rara vez corre solo; necesita vivir dentro del monstruoso zoológico que es el ecosistema de Apache Hadoop.
Levantar un clúster de Hadoop 2.x desde cero, es un dolor de cabeza por no decir otra cosa.
Desgranando el elefante amarillo
Hadoop ya no es una sola cosa, es un conjunto de herramientas superpuestas. Para entenderlo, hay que separar el almacenamiento del cómputo.
La base de todo es HDFS (Hadoop Distributed File System). Coge los discos duros de veinte ordenadores distintos y los une en un único sistema de archivos virtual, replicando cada bloque de datos tres veces por si un disco se quema. Mover datos aquí no se hace con el explorador de Windows, se hace por terminal:
# Crear un directorio en el clúster distribuido
hadoop fs -mkdir /datos/logs_corporativos/
# Subir un fichero de log gigante desde mi máquina local al HDFS
hadoop fs -put /var/log/apache2/access.log /datos/logs_corporativos/
# Ver cómo los bloques se han distribuido y replicado
hdfs fsck /datos/logs_corporativos/access.log -files -blocks -locations
Pero HDFS solo guarda archivos tontos. ¿Cómo los procesamos sin pisarnos entre nosotros? Aquí entra la gran revolución de Hadoop 2.0: YARN (Yet Another Resource Negotiator).
En la versión antigua de Hadoop, el gestor de recursos y MapReduce estaban acoplados. Era un desastre si querías ejecutar otra cosa. YARN actúa como el "sistema operativo" del clúster. Si lanzo un script de Python, YARN mira qué nodos del clúster tienen RAM y CPU libres, y asigna "contenedores" para ejecutar mi código justo en la máquina que tiene los datos físicamente en su disco (para evitar atascar la red).
Reflexión: La locura operativa
El problema de este ecosistema es la complejidad operativa. Si miras el diagrama de arquitectura de un proyecto real, tienes HDFS para guardar, YARN para gestionar recursos, Spark o MapReduce para calcular, Hive para lanzar SQL, Zookeeper para coordinar qué nodo está vivo, y herramientas de mensajería asíncrona poblando todo el ecosistema de datos corporativo.
Mantener este castillo de naipes actualizado, asegurando que las versiones de Java cuadran y que los demonios no se caen, es una pesadilla de DevOps. Esta tecnología democratiza el Big Data porque te permite usar hardware barato, pero el coste en horas-hombre de mantenimiento es altísimo. Me pregunto si no terminaremos todos rindiéndonos y pagándole a Amazon o Google para que nos gestionen estos clústeres en la nube dándole a un solo botón, en lugar de sufrir compilando proyectos de Apache en local. Yo hoy, lo firmo.