← ⚙️ MapReduce y Spark
intermedio

3.2 · Hadoop y YARN: gestión de recursos del clúster

⏱ 25 minMódulo 3: Procesamiento Distribuido

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:

ComponenteRolDónde vive
ResourceManager (RM)Autoridad global: decide qué aplicación recibe recursos y cuándoUn nodo maestro (único por clúster)
NodeManager (NM)Agente que administra los recursos de su máquina y reporta su estadoUno por cada nodo trabajador
ApplicationMaster (AM)Coordina la ejecución de una aplicación concreta: pide contenedores y vigila sus tareasSe crea por aplicación, dentro del clúster
Contenedor (Container)Paquete de recursos (CPU + RAM) donde se ejecuta una tareaAsignado 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
Arquitectura YARN: el ResourceManager asigna contenedores; el ApplicationMaster coordina las tareas del job.

Ciclo de vida de un job en YARN

Así se ejecuta un job (por ejemplo, un MapReduce) paso a paso:

  1. El cliente envía la aplicación al ResourceManager.
  2. El RM busca un nodo con recursos libres y lanza ahí el ApplicationMaster en un primer contenedor.
  3. El AM se registra ante el RM y negocia contenedores adicionales: “necesito 10 contenedores de 2 GB para mis tareas map”.
  4. El RM, según su scheduler (FIFO, Capacity o Fair), asigna contenedores en distintos nodos.
  5. El AM se comunica con los NodeManagers para lanzar las tareas dentro de esos contenedores.
  6. Los NodeManagers reportan el estado (heartbeat) al RM; el AM vigila el progreso y reintenta tareas fallidas en otros nodos.
  7. 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:

HerramientaQué esUso típico
HiveData warehouse con lenguaje HiveQL (similar a SQL) que se traduce a jobs MapReduce/TezAnalistas que consultan datos masivos con SQL
PigLenguaje de scripting de flujos de datos (Pig Latin)Transformaciones ETL rápidas de prototipar
HBaseBase de datos NoSQL columnar sobre HDFS, con acceso aleatorio de baja latenciaLectura/escritura en tiempo real de filas individuales
SqoopHerramienta de transferencia entre bases de datos relacionales y HDFSImportar 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.

Comprueba lo aprendido

Comprueba que lo pillaste

¿Cuál es la función principal del ResourceManager en YARN?

Comprueba que lo pillaste

¿Quién vigila el progreso de las tareas de una aplicación concreta y reintenta las que fallan?

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?

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

RecursoTipoPor qué leerlo
Apache Hadoop (Wikipedia en español)ArtículoContexto 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)DocsLa 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)DocsLa 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)PaperEl 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)