El problema: ¿quién reparte los recursos del clúster?
Un clúster de Big Data tiene cientos o miles de nodos, cada uno con CPU y memoria. Muchos usuarios y aplicaciones compiten por esos recursos al mismo tiempo. YARN (Yet Another Resource Negotiator), introducido en Hadoop 2.0, es la capa que se encarga de gestionar y asignar los recursos del clúster a las aplicaciones.
Antes de YARN, MapReduce hacía dos cosas a la vez: procesar datos y gestionar recursos. YARN separa ambas responsabilidades, lo que permitió que otros motores (Spark, Tez, Flink) corrieran sobre el mismo clúster Hadoop.
Arquitectura de YARN
YARN tiene cuatro componentes principales:
| Componente | Rol | Dónde vive |
|---|---|---|
| ResourceManager (RM) | Autoridad global: decide qué aplicación recibe recursos y cuándo | Un nodo maestro (único por clúster) |
| NodeManager (NM) | Agente que administra los recursos de su máquina y reporta su estado | Uno por cada nodo trabajador |
| ApplicationMaster (AM) | Coordina la ejecución de una aplicación concreta: pide contenedores y vigila sus tareas | Se crea por aplicación, dentro del clúster |
| Contenedor (Container) | Paquete de recursos (CPU + RAM) donde se ejecuta una tarea | Asignado por el RM en un nodo concreto |
graph TD CLI["Cliente (envía el job)"] --> RM subgraph Maestro["Nodo maestro"] RM["ResourceManager<br/>(scheduler global)"] end subgraph N1["Nodo trabajador 1"] NM1["NodeManager"] AM["ApplicationMaster<br/>(contenedor 0)"] C1["Contenedor: tarea map"] end subgraph N2["Nodo trabajador 2"] NM2["NodeManager"] C2["Contenedor: tarea map"] C3["Contenedor: tarea reduce"] end RM --> NM1 RM --> NM2 AM --> C1 AM --> C2 AM --> C3 NM1 -. "heartbeat + estado" .-> RM NM2 -. "heartbeat + estado" .-> RM
Ciclo de vida de un job en YARN
Así se ejecuta un job (por ejemplo, un MapReduce) paso a paso:
- El cliente envía la aplicación al ResourceManager.
- El RM busca un nodo con recursos libres y lanza ahí el ApplicationMaster en un primer contenedor.
- El AM se registra ante el RM y negocia contenedores adicionales: “necesito 10 contenedores de 2 GB para mis tareas map”.
- El RM, según su scheduler (FIFO, Capacity o Fair), asigna contenedores en distintos nodos.
- El AM se comunica con los NodeManagers para lanzar las tareas dentro de esos contenedores.
- Los NodeManagers reportan el estado (heartbeat) al RM; el AM vigila el progreso y reintenta tareas fallidas en otros nodos.
- Al terminar, el AM se desregistra y libera los recursos.
Idea clave: el ResourceManager no sabe nada de la lógica de la aplicación (no sabe qué es un map o un reduce). Solo reparte recursos. La lógica del job vive en el ApplicationMaster, que es específico de cada framework (hay un AM de MapReduce, otro de Spark, etc.).
El ecosistema Hadoop
Alrededor de HDFS (almacenamiento) y YARN (recursos) creció un ecosistema de herramientas:
| Herramienta | Qué es | Uso típico |
|---|---|---|
| Hive | Data warehouse con lenguaje HiveQL (similar a SQL) que se traduce a jobs MapReduce/Tez | Analistas que consultan datos masivos con SQL |
| Pig | Lenguaje de scripting de flujos de datos (Pig Latin) | Transformaciones ETL rápidas de prototipar |
| HBase | Base de datos NoSQL columnar sobre HDFS, con acceso aleatorio de baja latencia | Lectura/escritura en tiempo real de filas individuales |
| Sqoop | Herramienta de transferencia entre bases de datos relacionales y HDFS | Importar tablas de MySQL/Oracle al data lake |
Hive es especialmente importante: permitió que perfiles de negocio (que conocen SQL pero no Java) consultaran petabytes de datos sin escribir MapReduce a mano.
Ejercicio: consulta Hive sobre el clúster
🧪 Ejercicio
Analítica con HiveQL
Eres analista y tienes una tabla Hive `ventas(region STRING, producto STRING, monto DOUBLE)` cargada en el clúster con miles de millones de filas. Escribe: (1) el comando para lanzar el job de MapReduce word count de ejemplo de Hadoop sobre HDFS, y (2) una consulta HiveQL que calcule el total vendido por región, ordenado de mayor a menor, solo para regiones con más de 1 000 000 en ventas.
🔍 La consulta Hive es SQL casi estándar: recuerda que HAVING se aplica después del GROUP BY para filtrar agregados. El job de Hadoop se lanza con `hadoop jar ...`.
-- (1) Lanzar un job MapReduce de ejemplo (word count) desde bash:
-- hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
-- wordcount /datos/entrada /datos/salida
-- (2) Consulta HiveQL: total vendido por región
CREATE EXTERNAL TABLE IF NOT EXISTS ventas (
region STRING,
producto STRING,
monto DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/datos/ventas';
SELECT region, SUM(monto) AS total_ventas
FROM ventas
GROUP BY region
HAVING SUM(monto) > 1000000
ORDER BY total_ventas DESC;Comprueba lo aprendido
Comprueba que lo pillaste
¿Cuál es la función principal del ResourceManager en YARN?
El ResourceManager es la autoridad global de recursos: decide qué aplicación recibe CPU y memoria según su scheduler. La lógica del job la coordina el ApplicationMaster y las tareas corren en contenedores gestionados por los NodeManagers.
Comprueba que lo pillaste
¿Quién vigila el progreso de las tareas de una aplicación concreta y reintenta las que fallan?
El ApplicationMaster se crea por cada aplicación: negocia contenedores con el ResourceManager, lanza las tareas vía NodeManagers y gestiona reintentos ante fallos. El RM solo reparte recursos y no conoce la lógica de la aplicación.
Comprueba que lo pillaste
Un analista de negocio quiere consultar petabytes de datos usando SQL sin escribir código MapReduce. ¿Qué herramienta del ecosistema Hadoop debería usar?
Hive ofrece HiveQL, un lenguaje casi idéntico a SQL que se compila automáticamente a jobs distribuidos (MapReduce o Tez). Sqoop mueve datos entre bases relacionales y HDFS, HBase es una base NoSQL y Pig usa su propio lenguaje (Pig Latin), no SQL.
Resumen
- YARN separa la gestión de recursos del procesamiento, permitiendo múltiples motores sobre el mismo clúster.
- ResourceManager (global) asigna recursos; NodeManager (por nodo) los administra localmente; ApplicationMaster (por aplicación) coordina el job; los contenedores son las unidades de CPU+RAM donde corren las tareas.
- Un job sigue el ciclo: cliente → RM → AM → negociación de contenedores → tareas en nodos → liberación.
- El ecosistema Hadoop incluye Hive (SQL), Pig (scripts ETL), HBase (NoSQL) y Sqoop (ingesta desde bases relacionales).
📚 Lecturas y fuentes
| Recurso | Tipo | Por qué leerlo |
|---|---|---|
| Apache Hadoop (Wikipedia en español) | Artículo | Contexto en español en 10 minutos: lee la introducción y la sección de módulos (HDFS, YARN, MapReduce); la historia es opcional. |
| HDFS Architecture (docs oficiales) | Docs | La pieza de almacenamiento que falta en esta lección. Lee solo “NameNode and DataNodes” y “Data Replication”. (en inglés) |
| Apache Hadoop YARN (docs oficiales) | Docs | La página de arquitectura de YARN con su diagrama: confirma los roles de RM, NM y AM. Es corta, léela entera. (en inglés) |
| Apache Hadoop YARN: Yet Another Resource Negotiator (SoCC 2013) | Paper | El paper que motivó YARN. Secciones 2 (historia y requisitos) y 3 (arquitectura); la 5, de evaluación en producción de Yahoo, solo si te interesa la escala real. (en inglés) |