02. Almacenamiento y procesamiento en Hadoop
Introducción
Los textos proporcionan una introducción detallada a los componentes fundamentales de Hadoop: HDFS para el almacenamiento distribuido y tolerante a fallos, y YARN como el sistema operativo que gestiona los recursos del clúster para la ejecución de aplicaciones. Se explica cómo HDFS almacena grandes volúmenes de datos dividiéndolos en bloques y replicándolos en múltiples nodos, destacando su arquitectura con el Namenode, Secondary Namenode y Datanodes, así como las operaciones básicas de lectura y escritura. Por otro lado, YARN se presenta como el administrador de recursos, coordinando la ejecución de aplicaciones a través de contenedores gestionados por el ResourceManager y los NodeManager. Finalmente, se introduce MapReduce como un paradigma de programación para el procesamiento paralelo de grandes conjuntos de datos, ilustrando su funcionamiento con las fases de map y reduce mediante un ejemplo práctico y mostrando cómo se implementa y ejecuta un trabajo.
Fundamentos de Hadoop: HDFS, YARN y MapReduce
Principio del formulario
Este documento proporciona un resumen detallado de los temas principales, ideas importantes y hechos relevantes extraídos de los excerpts del documento «BDA02_Almacenamiento y procesamiento en Hadoop.pdf». Se incluyen citas textuales cuando se considera pertinente para enfatizar puntos clave.
1. HDFS (Hadoop Distributed File System)
Esta sección se centra en la capa de almacenamiento de Hadoop, HDFS, abordando su propósito, características, arquitectura y funcionamiento.
Caso Práctico: Roberto, responsable de tecnología de una empresa de transportes, decide implementar Hadoop para modernizar operaciones y extraer valor de los datos de los vehículos para realizar análisis predictivos (mantenimiento, rutas, eficiencia de conducción, monitorización de flota, seguimiento de pedidos). Tras intentos fallidos con bases de datos tradicionales, opta por Hadoop, reconociendo la necesidad de entender su núcleo: HDFS para almacenamiento y YARN para procesamiento.
1.1. Introducción y Características:
HDFS es el sistema de archivos distribuido de Hadoop, diseñado para almacenar grandes volúmenes de datos de manera tolerante a fallos y escalable horizontalmente. Sus principales características son:
- Sistema de ficheros distribuido: «se ejecuta sobre diferentes nodos que trabajan en conjunto ofreciendo a los usuarios y aplicaciones que utilizan el sistema, un interfaz como si sólo hubiera un único servidor por detrás.»
- Ejecución sobre hardware commodity: No requiere servidores costosos o específicos.
- Optimizado para ficheros grandes y operaciones masivas: Ideal para analítica masiva, no para operaciones transaccionales.
- Escalabilidad horizontal: Capacidad de crecer añadiendo más servidores hasta volúmenes de Petabytes y miles de nodos.
- Soporte para múltiples clientes concurrentes: A diferencia de sistemas de almacenamiento masivo basados en cinta.
- Flexibilidad en los tipos de datos: Almacena datos estructurados, semiestructurados o no estructurados.
- Orientación «write-once, read many»: Asume que los archivos se escriben una vez y se leen muchas veces, sin modificaciones posteriores.
¿Qué almacena HDFS?
HDFS almacena ficheros organizados en una estructura jerárquica de directorios, similar a los sistemas de archivos tradicionales (Unix, Linux). Distingue entre mayúsculas y minúsculas en los nombres de los ficheros. Además de los datos, HDFS almacena metadatos asociados a cada fichero, como fecha, tamaño, propietario, grupo y permisos (lectura, escritura, ejecución para propietario, grupo y otros).
¿Cómo consigue tener tolerancia a fallos?
La tolerancia a fallos en HDFS se logra principalmente mediante la división de los ficheros en bloques de gran tamaño (128 MB por defecto) y la replicación de estos bloques en múltiples nodos.
- «Cuando queremos escribir un fichero en HDFS, lo primero que se hace es dividir el fichero en bloques. A continuación, los bloques son almacenados en diferentes nodos, no siendo necesario que los bloques de un mismo fichero estén en un mismo nodo.»
- «Además, un aspecto importante es que cada bloque se replica (se copia) en más de un nodo, lo que se conoce como el factor de replicación. El factor de replicación por defecto en HDFS es 3, lo que significa que cada bloque tiene 3 copias almacenadas en 3 nodos diferentes. La replicación es el mecanismo con el que se consigue, entre otras cosas, la tolerancia a fallos.»
El factor de replicación puede configurarse a nivel de fichero o directorio. Un factor de replicación mayor aumenta la tolerancia a fallos y puede mejorar el rendimiento de lectura, pero incrementa el espacio de almacenamiento utilizado y penaliza el rendimiento de escritura.
1.2. Arquitectura:
La arquitectura de HDFS se compone de tres tipos principales de nodos:
- Namenode: Actúa como el nodo maestro, manteniendo la metainformación del sistema de archivos (estructura de directorios, información de los ficheros, ubicación de los bloques en los Datanodes, factor de replicación). Almacena esta información en disco (FsImage y EditLog) y en memoria para un acceso rápido. Coordina las operaciones de lectura y escritura y monitoriza la salud de los Datanodes. Es un componente crítico y se suelen implementar medidas de redundancia a nivel de hardware y software para protegerlo.
- Secondary Namenode: No es un nodo de respaldo en tiempo real del Namenode. Su función principal es tomar puntos de control de los metadatos del Namenode (FsImage y EditLog) para reducir el tiempo de arranque del Namenode en caso de reinicio o fallo. Ejecuta habitualmente en una máquina diferente al NameNode principal.
- Datanode: Son los nodos worker que almacenan los bloques de los ficheros. Solo conocen los bloques que contienen y envían periódicamente al Namenode la lista de bloques almacenados y su ubicación. Por cada bloque, almacenan un checksum para verificar su integridad. También envían latidos (heartbeats) al Namenode para indicar que están activos. Si un Datanode no envía latidos en un tiempo determinado, el Namenode lo considera fuera de servicio y programa la creación de nuevas réplicas de los bloques perdidos en otros Datanodes.
1.3. Funcionamiento (lectura y escritura):
Los datos en HDFS son inmutables, lo que significa que no se pueden modificar directamente. Cualquier cambio implica la creación de un nuevo bloque.
- Lectura:
- El cliente contacta al Namenode para obtener la lista de bloques que componen el fichero y la ubicación de cada bloque en los Datanodes.
- El Namenode devuelve la lista de bloques y los Datanodes que los contienen, ordenados por proximidad al cliente.
- El cliente se comunica directamente con los Datanodes para solicitar y recibir los bloques.
- El Namenode no participa en la transferencia de datos, evitando convertirse en un cuello de botella.
- Escritura:
- El cliente contacta al Namenode para solicitar la creación de un fichero, indicando nombre y ruta.
- El Namenode realiza verificaciones (permisos, existencia).
- El cliente comienza a dividir el fichero en bloques.
- Para cada bloque, el cliente contacta al Namenode para obtener la lista de Datanodes donde escribir el bloque.
- El Namenode devuelve la lista de Datanodes.
- El cliente escribe el bloque en el primer Datanode de la lista.
- El primer Datanode se encarga de replicar el bloque a los siguientes Datanodes en la cadena.
- Una vez que todas las réplicas se han escrito, se devuelve una confirmación al cliente, que puede proceder con el siguiente bloque.
Al igual que en la lectura, el Namenode solo gestiona la ubicación de los bloques, sin recibir los datos del fichero durante la escritura.
Un factor de replicación alto impacta en la capacidad de almacenamiento total del clúster, reduciéndola significativamente ya que cada dato se almacena múltiples veces. Se suelen aplicar reglas para determinar el factor de replicación óptimo según la criticidad y la frecuencia de acceso de los datos.
- «Un factor de replicación alto: Mejora la tolerancia a fallos. Mejora la velocidad de lectura porque se pueden utilizar más Datanodes para recuperar un bloque. Reduce la velocidad de las escrituras porque cada bloque hay que almacenarlo en más Datanodes. Disminuye la capacidad total de almacenamiento del clúster.»
1.4. Uso:
HDFS soporta operaciones similares a los sistemas Unix a través de diferentes interfaces:
- Cliente de línea de comandos: Ofrece un amplio conjunto de comandos (ej: hadoop fs -mkdir, hadoop fs -ls, hadoop fs -put, hadoop fs -get, hadoop fs -cat, hadoop fs -cp, hadoop fs -rm, hadoop fs -mv, hadoop fs -setrep). El comando hadoop fs permite interactuar con el sistema de ficheros de HDFS, que es distinto del sistema de ficheros local de la máquina donde se ejecuta el terminal. Para subir un fichero local a HDFS, se suele copiar primero a la máquina frontera y luego se utiliza el comando put.
- Java API: Interfaz nativa para aplicaciones Java.
- RestFul API (WebHDFS): Permite interactuar con HDFS desde otros lenguajes a través de HTTP, aunque con menor rendimiento para operaciones masivas.
- NFS interface (HDFS NFS Gateway): Permite montar HDFS como un sistema de archivos local utilizando NFSv3, facilitando la interacción con utilidades Unix y bibliotecas POSIX.
- Librería C (libhdfs): Ofrece un buen rendimiento pero puede no tener toda la funcionalidad del API Java.
2. YARN (Yet Another Resource Negotiator)
Esta sección explora la capa de procesamiento de Hadoop, YARN, su rol como gestor de recursos y su arquitectura.
Caso Práctico: Roberto, tras comprender HDFS, se enfoca en la capacidad de procesamiento de Hadoop a través de YARN. Entiende que YARN será la base para ejecutar todas las aplicaciones de procesamiento y análisis de datos. Se compara con el sistema operativo de un ordenador personal, que gestiona la ejecución de aplicaciones utilizando los recursos del hardware (CPU, memoria, disco). En Hadoop, YARN actúa de manera similar, gestionando los recursos del clúster para las aplicaciones que procesan los datos almacenados en HDFS.
2.1. Introducción:
YARN es un gestor de recursos introducido en Hadoop 2 para independizar el procesamiento del almacenamiento, permitiendo que cualquier tipo de aplicación trabaje con los datos de HDFS y facilitando el trabajo de múltiples usuarios en la plataforma. Surgió como respuesta a las limitaciones de la versión anterior de Hadoop, donde MapReduce era el único motor de computación, lo que restringía los tipos de aplicaciones, era ineficiente para respuestas rápidas y tenía una gestión de concurrencia limitada.
YARN realiza las siguientes tareas:
- Ofrece una API menos restrictiva que MapReduce para las aplicaciones, permitiendo definir necesidades de recursos (memoria, CPU) y gestionar su ciclo de vida (ejecutar, parar).
- Se encarga de la ejecución de las aplicaciones en el clúster, asignando recursos y ejecutando el código en diferentes nodos.
- Sincroniza la ejecución de múltiples aplicaciones, gestionando prioridades y la asignación de recursos cuando compiten. Estas políticas son configurables por el administrador de YARN.
- Monitoriza la ejecución de las aplicaciones y gestiona la tolerancia a fallos relanzando tareas en caso de fallos de nodo.
- Gestiona los recursos disponibles del clúster, manteniendo información sobre los nodos activos y su capacidad.
A menudo se describe a YARN como el «Sistema Operativo de Hadoop» debido a su rol en la gestión y coordinación de la ejecución de las aplicaciones utilizando los recursos del clúster.
2.2. Arquitectura:
La arquitectura de YARN se basa en el concepto de contenedor, que es la unidad mínima de recursos de ejecución para las aplicaciones (memoria, cores, disco, red). Las tareas de las aplicaciones YARN se ejecutan dentro de contenedores, y un trabajo puede tener múltiples tareas, cada una en su propio contenedor. YARN asigna contenedores a las tareas cuando arrancan y los libera cuando terminan. El tamaño de los contenedores (memoria, cores) es configurable. La cantidad de aplicaciones que YARN puede ejecutar concurrentemente está limitada por la cantidad total de contenedores disponibles en el clúster.
YARN tiene una arquitectura maestro-esclavo similar a HDFS:
- ResourceManager: Es el nodo maestro que coordina, asigna y controla la ejecución de todas las aplicaciones. Recibe las peticiones de ejecución de los clientes, asigna recursos según políticas de prioridad y disponibilidad, distribuye la aplicación a los nodos worker, controla la ejecución y libera recursos al finalizar. Tiene dos componentes principales:
- ApplicationsManager: Recibe las peticiones de ejecución, distribuye las aplicaciones, asigna recursos, coordina la ejecución, monitoriza fallos y libera recursos.
- Scheduler: Asigna prioridades y los contenedores a cada aplicación. Se pueden configurar diferentes algoritmos de scheduling (ej: Capacity Scheduler, Fair Scheduler, FIFO Scheduler).
- NodeManager: Se ejecuta en cada nodo worker y monitoriza el consumo de recursos (CPU, memoria) de los contenedores, informa al ResourceManager sobre su actividad y estado, supervisa el ciclo de vida de los contenedores y las tareas dentro de ellos, almacena logs y lanza los procesos ApplicationMaster. Los NodeManager son tolerantes a fallos.
- ApplicationMaster: Es un proceso específico para cada aplicación que se ejecuta. Negocia con el ResourceManager los recursos necesarios (contenedores) para las tareas de su aplicación. Se ejecuta en uno de los nodos worker para garantizar la escalabilidad. Termina cuando la aplicación finaliza.
2.3. Funcionamiento:
Cuando un cliente quiere ejecutar una aplicación en YARN, invoca al ResourceManager. La secuencia de ejecución es:
- El cliente se comunica con el ResourceManager, enviando el código de la aplicación y los requisitos de recursos.
- El ResourceManager (a través del ApplicationsManager y el Scheduler) asigna un contenedor en un NodeManager para ejecutar el ApplicationMaster de la aplicación.
- El NodeManager crea el contenedor e inicia el ApplicationMaster.
- El ApplicationMaster se comunica con el ResourceManager para solicitar los contenedores necesarios para ejecutar las tareas de la aplicación.
- El ApplicationMaster se comunica con los contenedores donde se ejecutan las tareas para controlarlas y notifica el estado de la ejecución al ResourceManager.
- El NodeManager también envía información sobre el consumo de recursos y su estado al ResourceManager.
A diferencia de HDFS, los clientes de YARN solo interactúan con el ResourceManager y no necesitan conectividad directa con los nodos worker. El objetivo en Hadoop es que los nodos maestros realicen la menor cantidad de operaciones posible por tarea para facilitar la escalabilidad.
3. MapReduce
Esta sección introduce MapReduce, un modelo de programación y framework de ejecución para el procesamiento paralelo de grandes cantidades de datos en clústeres Hadoop.
Caso Práctico: Roberto comienza a aprender MapReduce como una de las herramientas fundamentales para construir las aplicaciones que su empresa necesita para analizar datos (estilos de conducción, predicción de averías, optimización de rutas). Aunque reconoce que su uso ha disminuido en los últimos años, entiende su importancia como parte del core de Hadoop y como base para otras herramientas.
3.1. Introducción:
Hadoop MapReduce es un framework para escribir aplicaciones que procesan grandes cantidades de datos en paralelo en clústeres de hardware commodity de manera confiable y tolerante a fallos.
- Framework: Los desarrolladores se centran en implementar las funciones map y reduce, mientras que el framework maneja la paralelización, monitorización y recuperación ante errores. Protege a los desarrolladores de la complejidad de la gestión de sistemas distribuidos.
- Grandes cantidades de datos: Sigue la filosofía «Divide y Vencerás», dividiendo el conjunto de datos de entrada en fragmentos más pequeños para su procesamiento independiente.
- Paralelo: Ejecuta el procesamiento de cada elemento por separado y en paralelo, facilitando la escalabilidad y la tolerancia a fallos.
- Clústeres: Se ejecuta en un modelo de computación distribuida, con YARN gestionando la asignación de recursos y los nodos disponibles. Puede escalarse a miles de nodos.
- Hardware commodity: No requiere servidores específicos, utilizando los mismos servidores de la plataforma Hadoop.
- Confiable y tolerante a fallos: Garantiza la obtención de los mismos resultados y puede recuperarse ante fallos de nodo reprocesando las tareas afectadas en otros nodos activos.
Aunque MapReduce es conocido por ser más lento que otros frameworks modernos, su fiabilidad y tolerancia a fallos lo hacen adecuado para procesos pesados por lotes que no requieren tiempos de respuesta cortos.
Es importante entender MapReduce porque muchos frameworks Big Data que se ejecutan sobre Hadoop (como Hive) lo utilizan internamente, por lo que su comprensión es crucial para la depuración y resolución de problemas. Los trabajos de MapReduce se implementan desarrollando un método map y un método reduce utilizando las APIs que ofrece, principalmente en Java, aunque también se pueden usar otros lenguajes como C++, Python o shell scripting a través de Hadoop Streaming o Hadoop Pipes.
3.2. Funcionamiento:
Un trabajo de MapReduce se compone de cinco etapas:
- Envío del trabajo: El código de la aplicación se envía al clúster y se distribuye a los nodos.
- Fase map: El fichero de entrada se divide en fragmentos por el componente InputFormat. Por cada fragmento, se crea una tarea map que ejecuta la función map desarrollada por el usuario en paralelo en diferentes nodos. La función map procesa cada registro de su fragmento y emite pares clave-valor como resultado parcial.
- Fase shuffle: Los resultados parciales de las tareas map se transfieren a los nodos donde se ejecutarán las tareas reduce. Los datos con la misma clave se agrupan.
- Fase sort (order): Los datos agrupados por clave se ordenan dentro de cada partición que se enviará a una tarea reduce.
- Fase reduce: Las diferentes particiones de datos ordenados se envían a las tareas reduce. La función reduce desarrollada por el usuario procesa todos los valores asociados a una misma clave y produce un resultado final para esa clave.
El programador solo necesita implementar las funciones map y reduce, mientras que las fases de shuffle y sort son gestionadas automáticamente por MapReduce.
Ejemplo: Contar las veces que la cotización de cada empresa ha aumentado a partir de un fichero de cotizaciones.
- Map: Por cada línea del fichero, si la cotización actual es mayor que la anterior, emite un par [Nombre de la empresa, 1].
- Shuffle y Sort: Agrupan y ordenan todos los pares emitidos por la fase map por nombre de la empresa.
- Reduce: Para cada empresa, suma todos los valores ‘1’ recibidos, dando como resultado el número total de incrementos en la cotización.
La potencia de MapReduce reside en su capacidad para procesar grandes volúmenes de datos en paralelo sin necesidad de leerlos secuencialmente en un solo nodo. Sin embargo, requiere un diseño cuidadoso para descomponer los problemas en operaciones map y reduce. Algunos problemas pueden requerir la concatenación de múltiples trabajos MapReduce.
3.3. Uso:
Los trabajos de MapReduce se suelen desarrollar en Java utilizando las librerías de MapReduce. El ejemplo proporcionado en el documento ilustra la implementación de un Mapper (IncreaseQuotationFilterMapper) que filtra las líneas donde la cotización aumenta y emite [Nombre de la empresa, 1], y un Reducer (IntSumReducer) que suma los valores ‘1’ para cada empresa, produciendo el recuento total de incrementos.
El proceso general para ejecutar un trabajo MapReduce incluye:
- Desarrollar el código del Mapper y el Reducer.
- Empaquetar el código en un fichero .jar.
- Ejecutar el trabajo desde la línea de comandos utilizando el comando hadoop jar, especificando la clase principal, el fichero de entrada en HDFS y la ruta de salida en HDFS.
Tanto el Mapper como el Reducer se ejecutan en paralelo en diferentes nodos del clúster.
- Guía práctica de MapReduce
Se menciona un documento adjunto («guia_BDA02.zip») y un vídeo que desarrollan ejemplos prácticos de MapReduce, complementando los contenidos teóricos y siendo útiles para resolver la tarea práctica de la unidad.
Este briefing doc resume los conceptos fundamentales de HDFS, YARN y MapReduce presentados en las fuentes proporcionadas, destacando su rol en el ecosistema Hadoop y su importancia para el procesamiento y análisis de grandes volúmenes de datos.
Final del formulario
Guía de Estudio: Almacenamiento y Procesamiento en Hadoop
Quiz (Respuestas Cortas)
- Describe brevemente el propósito de HDFS y menciona dos de sus características principales.
HDFS (Hadoop Distributed File System) es el sistema de almacenamiento distribuido de Hadoop, diseñado para almacenar grandes volúmenes de datos de manera confiable y tolerante a fallos. Dos de sus características principales son su arquitectura distribuida y su optimización para archivos de gran tamaño y operaciones masivas de lectura/escritura.
- Explica la función del NameNode en la arquitectura de HDFS y por qué es un componente crítico.
El NameNode actúa como el nodo maestro en HDFS, manteniendo los metadatos de todo el sistema de archivos, incluyendo la estructura de directorios, información de los ficheros (tamaño, permisos, ubicación de los bloques) y coordinando las operaciones de lectura y escritura. Es crítico porque si falla, se pierde el acceso a todos los datos del sistema de archivos HDFS.
- ¿Cuál es la diferencia fundamental entre el NameNode y el Secondary NameNode en HDFS?
El NameNode es el nodo maestro activo que gestiona los metadatos y coordina las operaciones, mientras que el Secondary NameNode no es un nodo de respaldo activo. Su función principal es tomar puntos de control periódicos de los metadatos del NameNode (FsImage y EditLog) para reducir el tiempo de reinicio del NameNode en caso de fallo.
- ¿Cómo consigue HDFS la tolerancia a fallos en el almacenamiento de datos? Explica el concepto clave involucrado.
HDFS logra la tolerancia a fallos mediante la replicación de bloques de datos. Cada bloque de un fichero se copia múltiples veces (el factor de replicación por defecto es 3) y se almacena en diferentes DataNodes. Si un nodo falla, las copias de los bloques permanecen disponibles en otros nodos.
- Describe la función principal de YARN en el ecosistema de Hadoop. ¿A qué componente de un ordenador personal se podría comparar?
YARN (Yet Another Resource Negotiator) es el gestor de recursos de Hadoop, responsable de administrar y asignar los recursos del clúster (CPU, memoria, etc.) a las diferentes aplicaciones que se ejecutan en él. Se podría comparar con el sistema operativo de un ordenador personal, que gestiona los recursos para las aplicaciones.
- ¿Qué es un contenedor en el contexto de YARN y cuál es su importancia para la ejecución de aplicaciones?
Un contenedor en YARN es la unidad mínima de recursos de ejecución asignada a una tarea de una aplicación. Representa una cantidad específica de memoria, núcleos de procesamiento y otros recursos. Su importancia radica en que todas las tareas de las aplicaciones YARN se ejecutan dentro de contenedores, permitiendo una gestión eficiente y aislada de los recursos.
- Explica el rol del ResourceManager en YARN y menciona uno de sus componentes principales.
El ResourceManager en YARN es el servicio maestro que coordina, asigna y controla la ejecución de todas las aplicaciones en el clúster. Uno de sus componentes principales es el Scheduler, que es responsable de asignar los recursos (contenedores) a las aplicaciones en función de las políticas de prioridad y la disponibilidad de recursos.
- Describe brevemente el paradigma de programación MapReduce y menciona las dos funciones principales que los desarrolladores suelen implementar.
MapReduce es un modelo de programación y un framework de ejecución para el procesamiento paralelo de grandes conjuntos de datos en clústeres. Las dos funciones principales que los desarrolladores suelen implementar son la función map, que procesa los datos de entrada y emite pares clave-valor intermedios, y la función reduce, que combina los valores asociados a la misma clave para producir el resultado final.
- Explica por qué la fase de «shuffle» es importante en el flujo de ejecución de un trabajo MapReduce.
La fase de «shuffle» en MapReduce es crucial porque toma la salida de las tareas map (pares clave-valor), las ordena por clave y las agrupa por clave, enviando todos los valores asociados a la misma clave a la misma tarea reduce. Esto asegura que la función reduce pueda procesar todos los datos relevantes para cada clave de manera conjunta.
- Menciona dos razones por las cuales, a pesar de su antigüedad, es importante entender MapReduce en el contexto de las tecnologías Big Data.
Primero, MapReduce sentó las bases para muchos frameworks Big Data posteriores y comprender sus principios ayuda a entender cómo funcionan otras herramientas. Segundo, muchas herramientas de alto nivel que se ejecutan sobre Hadoop, como Hive, a menudo traducen sus operaciones a trabajos MapReduce en segundo plano, por lo que entender MapReduce facilita la depuración y resolución de problemas.
Preguntas de Ensayo
- Describe en detalle la arquitectura de HDFS, explicando la función de cada uno de sus componentes principales (NameNode, Secondary NameNode, DataNode) y cómo interactúan entre sí durante una operación de escritura de un archivo.
- Compara y contrasta la arquitectura de HDFS con la arquitectura de YARN, destacando los roles de los nodos maestros y trabajadores en cada sistema y cómo colaboran para el almacenamiento y procesamiento de datos.
- Explica el flujo de ejecución de una aplicación en YARN, desde la solicitud del cliente hasta la finalización de las tareas, detallando la interacción entre el ResourceManager, el ApplicationMaster y los NodeManagers.
- Describe el ciclo de vida de un trabajo MapReduce, detallando cada una de sus fases (envío, map, shuffle, sort, reduce) y explicando cómo el framework facilita el procesamiento paralelo y la tolerancia a fallos.
- Analiza las ventajas y desventajas del uso de MapReduce para el procesamiento de datos en la actualidad, considerando su modelo de programación, eficiencia en diferentes tipos de tareas y su relevancia en comparación con otros frameworks de procesamiento más recientes en el ecosistema de Hadoop.
Glosario de Términos Clave
- HDFS (Hadoop Distributed File System): El sistema de archivos distribuido diseñado para almacenar grandes volúmenes de datos en un clúster de hardware commodity.
- Bloque (HDFS): La unidad mínima de datos que HDFS almacena. Por defecto, su tamaño es de 128 MB.
- NameNode: El nodo maestro en HDFS que gestiona los metadatos del sistema de archivos (estructura de directorios, ubicación de los bloques, etc.).
- DataNode: Los nodos trabajadores en HDFS que almacenan los bloques de datos reales.
- Secondary NameNode: Un nodo en HDFS que ayuda al NameNode tomando puntos de control de sus metadatos, pero no es un nodo de respaldo activo.
- Factor de Replicación: El número de copias de cada bloque de datos que se almacenan en HDFS para garantizar la tolerancia a fallos.
- YARN (Yet Another Resource Negotiator): El gestor de recursos en Hadoop que administra y asigna los recursos del clúster a las diferentes aplicaciones.
- Contenedor (YARN): La unidad mínima de recursos (memoria, CPU, etc.) asignada por YARN para ejecutar una tarea de una aplicación.
- ResourceManager: El nodo maestro en YARN que coordina la asignación de recursos a las aplicaciones en el clúster.
- NodeManager: El servicio que se ejecuta en cada nodo trabajador de YARN, responsable de gestionar los contenedores y monitorizar el uso de recursos en ese nodo.
- ApplicationMaster: Un proceso específico para cada aplicación que se ejecuta en YARN, encargado de negociar los recursos con el ResourceManager y coordinar la ejecución de las tareas de la aplicación.
- MapReduce: Un modelo de programación y framework de procesamiento distribuido para procesar grandes conjuntos de datos en paralelo en clústeres.
- Map: La primera fase en un trabajo MapReduce, donde se procesan los datos de entrada y se emiten pares clave-valor intermedios.
- Reduce: La segunda fase en un trabajo MapReduce, donde se combinan los valores asociados a la misma clave emitidos por la fase map para producir el resultado final.
- Shuffle: Una fase intermedia en MapReduce donde los pares clave-valor emitidos por las tareas map se ordenan y agrupan por clave.
- Hardware Commodity: Hardware común y de bajo costo que no requiere especificaciones especiales. Hadoop está diseñado para ejecutarse en este tipo de hardware.
Mapa Conceptual
Preguntas Frecuentes sobre Fundamentos de Hadoop: HDFS, YARN y MapReduce
- ¿Qué es Hadoop y cuáles son sus componentes principales?
Hadoop es una tecnología de Big Data diseñada para almacenar y procesar grandes volúmenes de datos de manera distribuida en clústeres de hardware común. Sus componentes principales son:
- HDFS (Hadoop Distributed File System): Es la capa de almacenamiento de Hadoop, un sistema de archivos distribuido diseñado para almacenar ficheros de gran tamaño de forma tolerante a fallos mediante la replicación de bloques en múltiples nodos.
- YARN (Yet Another Resource Negotiator): Es el gestor de recursos de Hadoop, encargado de gestionar y asignar los recursos del clúster (CPU, memoria, etc.) a las diferentes aplicaciones que se ejecutan en él.
- MapReduce: Es un modelo de programación y un framework de procesamiento distribuido que permite desarrollar aplicaciones para procesar grandes conjuntos de datos en paralelo en el clúster Hadoop.
- ¿Qué es HDFS y cuáles son sus características fundamentales?
HDFS (Hadoop Distributed File System) es el sistema de archivos distribuido de Hadoop. Sus características fundamentales incluyen:
- Sistema de archivos distribuido: Se ejecuta en múltiples nodos que trabajan coordinadamente, ofreciendo una interfaz unificada a los usuarios.
- Ejecución sobre hardware commodity: No requiere servidores costosos o específicos.
- Optimizado para grandes ficheros y operaciones masivas: Diseñado para analítica masiva, no para operaciones transaccionales.
- Escalabilidad horizontal: Permite añadir más servidores para aumentar la capacidad hasta Petabytes y miles de nodos.
- Soporte para múltiples clientes concurrentes: Permite el acceso de varios clientes sin degradación significativa del rendimiento.
- Flexibilidad en los tipos de datos: Puede almacenar datos estructurados, semiestructurados y no estructurados.
- Modelo «write-once, read many»: Asume que los archivos se escriben una vez y se leen muchas veces.
- Tolerancia a fallos mediante replicación: Cada bloque de datos se copia en múltiples nodos (factor de replicación por defecto es 3).
- Almacenamiento en bloques grandes: Utiliza bloques de tamaño predeterminado grande (128 MB por defecto) para optimizar la lectura y escritura masiva.
- ¿Cómo garantiza HDFS la tolerancia a fallos?
HDFS garantiza la tolerancia a fallos principalmente a través de la replicación de bloques. Cuando un fichero se escribe en HDFS, se divide en bloques, y cada bloque se replica un número configurable de veces (el factor de replicación por defecto es 3) en diferentes nodos del clúster. Si un nodo falla o un bloque se corrompe, HDFS puede acceder a las otras réplicas del bloque almacenadas en nodos diferentes, asegurando la disponibilidad de los datos. El NameNode es responsable de detectar fallos en los DataNodes y de iniciar la replicación de los bloques perdidos para mantener el factor de replicación deseado.
- ¿Cuáles son los componentes de la arquitectura de HDFS y cuál es la función de cada uno?
La arquitectura de HDFS consta de tres tipos principales de nodos:
- NameNode: Actúa como el nodo maestro, manteniendo los metadatos de todo el sistema de archivos (estructura de directorios, información de los ficheros, ubicación de los bloques). Coordina las operaciones de lectura y escritura y gestiona los DataNodes. Es un componente crítico y un único punto de fallo potencial.
- Secondary NameNode: No es un nodo de respaldo en tiempo real del NameNode. Su función principal es tomar puntos de control (snapshots) de los metadatos del NameNode (FsImage y EditLog) para reducir el tiempo de arranque del NameNode en caso de reinicio o fallo.
- DataNodes: Son los nodos worker que almacenan los bloques de datos de los ficheros. Reciben instrucciones del NameNode para almacenar y recuperar bloques, y envían periódicamente al NameNode informes sobre los bloques que almacenan y su estado (heartbeat).
- ¿Qué es YARN y cuál es su propósito en Hadoop?
YARN (Yet Another Resource Negotiator) es el sistema operativo de Hadoop para la gestión de recursos y la programación de trabajos. Su propósito principal es separar la gestión de recursos del procesamiento de datos, permitiendo que Hadoop soporte diferentes modelos de procesamiento además de MapReduce. YARN se encarga de:
- Gestionar los recursos del clúster (memoria, CPU, etc.).
- Asignar estos recursos a las aplicaciones que se ejecutan en el clúster.
- Programar y monitorizar la ejecución de las aplicaciones.
- Permitir que múltiples aplicaciones y usuarios compartan los recursos del clúster de manera eficiente.
- ¿Cuáles son los componentes de la arquitectura de YARN y cuál es la función de cada uno?
La arquitectura de YARN incluye los siguientes componentes principales:
- ResourceManager: Es el nodo maestro de YARN. Recibe las solicitudes de ejecución de las aplicaciones de los clientes, negocia los recursos disponibles en el clúster a través del Scheduler, y gestiona los ApplicationMasters.
- NodeManager: Se ejecuta en cada nodo worker del clúster. Es responsable de gestionar los contenedores (unidad de asignación de recursos) en su nodo, monitorizar su uso de recursos, y reportar al ResourceManager.
- ApplicationMaster: Es un proceso específico para cada aplicación que se ejecuta en YARN. Se encarga de negociar los recursos necesarios para su aplicación con el ResourceManager, coordinar la ejecución de las tareas de la aplicación en los contenedores asignados por los NodeManagers, y monitorizar el progreso de la aplicación.
- ¿Qué es MapReduce y cómo funciona el paradigma map y reduce?
MapReduce es un modelo de programación y un framework de procesamiento distribuido diseñado para procesar grandes volúmenes de datos en paralelo en clústeres Hadoop. El paradigma MapReduce consta de dos funciones principales:
- Map: Toma un conjunto de datos de entrada y los divide en pares clave-valor. Aplica una función definida por el usuario a cada par, generando un conjunto de pares clave-valor intermedios. El procesamiento de la fase map se realiza en paralelo en diferentes nodos del clúster.
- Reduce: Toma los pares clave-valor intermedios generados por la fase map que tienen la misma clave, los agrupa y aplica una función definida por el usuario para combinarlos y producir un resultado final. La fase reduce también se ejecuta en paralelo, donde cada tarea reduce opera sobre un subconjunto de las claves intermedias.
Entre las fases map y reduce, MapReduce realiza automáticamente las fases de shuffle (transferencia de los resultados del map a los nodos reduce apropiados) y sort (ordenamiento de los pares clave-valor intermedios por clave dentro de cada partición reduce).
- ¿En qué situaciones es adecuado utilizar MapReduce y cuáles son sus principales limitaciones en comparación con otros frameworks de procesamiento en Hadoop?
MapReduce es adecuado para el procesamiento por lotes de grandes volúmenes de datos donde la latencia no es un requisito crítico. Es especialmente útil para tareas como el procesamiento de logs, la generación de informes, la indexación de datos y otras tareas de análisis masivo que se pueden dividir en operaciones map y reduce independientes y paralelas.
Sin embargo, MapReduce tiene limitaciones significativas en comparación con otros frameworks de procesamiento más recientes en Hadoop, como Spark o Flink. Sus principales limitaciones incluyen:
- Proceso en disco: MapReduce tiende a escribir la mayoría de los resultados intermedios en disco, lo que puede generar una alta latencia y un rendimiento más lento para ciertas cargas de trabajo.
- Modelo de programación rígido: El modelo de programación de MapReduce, basado exclusivamente en las fases map y reduce, puede ser menos eficiente o más complejo de implementar para ciertos tipos de algoritmos o flujos de trabajo.
- Iteraciones ineficientes: Para tareas que requieren múltiples iteraciones sobre los datos, como algoritmos de aprendizaje automático, MapReduce puede ser ineficiente ya que cada iteración requiere un nuevo trabajo MapReduce completo.
- Procesamiento en tiempo real o de baja latencia limitado: MapReduce no está diseñado para aplicaciones que requieren procesamiento en tiempo real o respuestas de baja latencia.
Debido a estas limitaciones, MapReduce se utiliza cada vez menos para nuevos desarrollos, siendo reemplazado en muchos casos por frameworks más flexibles y eficientes. Sin embargo, sigue siendo una parte fundamental del core de Hadoop y muchas herramientas de nivel superior aún lo utilizan internamente.
Evaluación
Preguntas:
Aquí tienes un cuestionario de 20 preguntas con cuatro posibles respuestas, basado en la información de las fuentes, seguido de una tabla con las respuestas correctas y una breve explicación:
- ¿Cuál es el componente de Hadoop responsable del almacenamiento distribuido? A. YARN
B. MapReduce
C. HDFS
D. Namenode - HDFS está diseñado principalmente para:
A. Almacenar y procesar pequeñas cantidades de datos en tiempo real.
B. Dar soporte a las operaciones transaccionales de las empresas.
C. Almacenar ficheros de gran tamaño y realizar operaciones de lectura o escritura masivas.
D. Almacenar datos relacionales estructurados. - ¿Cuál es el tamaño de bloque por defecto en HDFS?
A. 512 bytes
B. 4 kilobytes
C. 64 megabytes
D. 128 megabytes - ¿Cómo consigue HDFS la tolerancia a fallos principalmente?
A. Mediante la paridad de datos.
B. Utilizando hardware de servidores muy costoso y específico.
C. Mediante la replicación de bloques en múltiples nodos.
D. Comprimiendo los datos de forma intensiva. - ¿Cuál es el factor de replicación por defecto en HDFS?
A. 1
B. 2
C. 3
D. Se puede configurar a nivel global solamente. - ¿Qué componente de la arquitectura de HDFS almacena los metadatos del sistema de ficheros?
A. Datanode
B. Secondary Namenode
C. Namenode
D. ResourceManager - ¿Cuál es la función principal del Secondary Namenode en HDFS?
A. Actuar como un nodo de respaldo activo en caso de fallo del Namenode.
B. Tomar puntos de control de los metadatos del sistema de ficheros del Namenode para reducir el tiempo de arranque.
C. Almacenar los bloques de datos reales.
D. Gestionar la ejecución de las aplicaciones de procesamiento. - ¿Qué tarea realizan los Datanodes en HDFS?
A. Mantienen la estructura de directorios y la información de los ficheros.
B. Coordinan las lecturas y escrituras en el sistema.
C. Almacenan y leen los bloques que componen los ficheros.
D. Toman instantáneas de los metadatos del sistema de archivos. - ¿Qué significa la característica «write-once, read many» de HDFS?
A. Los ficheros se pueden escribir y modificar muchas veces, pero se leen una sola vez.
B. Una vez que un archivo se escribe en HDFS, no se modificará, aunque se puede acceder a él muchas veces.
C. Los ficheros solo se pueden escribir una vez y leerse una vez.
D. Solo se permite una escritura y una lectura simultánea por fichero. - ¿Cuál de los siguientes comandos de la línea de comandos de HDFS se utiliza para listar el contenido de un directorio?
A. cat
B. put
C. ls
D. mkdir - ¿Cuál es el acrónimo de Yet Another Resource Negotiator en Hadoop?
A. HDFS
B. MapReduce
C. YARN
D. Namenode - ¿Cuál es la función principal de YARN en Hadoop?
A. Almacenar grandes cantidades de datos de forma distribuida.
B. Ejecutar tareas de procesamiento masivo utilizando el paradigma MapReduce.
C. Gestionar los recursos del clúster y programar la ejecución de aplicaciones.
D. Proporcionar una interfaz SQL para consultar los datos almacenados en HDFS. - ¿Cuál es la unidad mínima de recursos de ejecución para las aplicaciones en YARN?
A. Datanode
B. Contenedor
C. Mapper
D. Reducer - ¿Qué componente de YARN actúa como el maestro y es responsable de asignar recursos y controlar la ejecución de las aplicaciones?
A. NodeManager
B. ApplicationMaster
C. ResourceManager
D. Secondary Namenode - ¿Qué componente de YARN se ejecuta en cada nodo worker y monitoriza el estado de los contenedores y el consumo de recursos?
A. ResourceManager
B. ApplicationMaster
C. NodeManager
D. Namenode - ¿Qué paradigma de programación fue el motor de procesamiento original en las primeras versiones de Hadoop?
A. YARN
B. MapReduce
C. HDFS
D. Spark - ¿Cuáles son las dos funciones principales que los desarrolladores suelen implementar en un trabajo de MapReduce?
A. Input y Output
B. Map y Reduce
C. Sort y Shuffle
D. Read y Write - ¿En qué fase de un trabajo de MapReduce se toman los resultados parciales de la fase map, se ordenan y se agrupan por clave?
A. Fase map
B. Fase reduce
C. Fase shuffle y sort
D. Fase de envío del trabajo - ¿Qué componente de MapReduce es responsable de dividir el fichero de entrada en fragmentos para que los datos puedan ser procesados en paralelo?
A. Mapper
B. Reducer
C. InputFormat
D. OutputFormat - ¿Qué tipo de operaciones son las más adecuadas para MapReduce según las fuentes?
A. Operaciones transaccionales en tiempo real.
B. Consultas interactivas de baja latencia.
C. Procesamiento de grandes cantidades de datos en paralelo, donde la latencia no es el factor más crítico.
D. Modificación frecuente de pequeños registros de datos.
Tabla Respuestas
Pregunta | Respuesta Correcta | Explicación Breve |
1 | C | HDFS (Hadoop Distributed File System) es el sistema de almacenamiento distribuido de Hadoop. |
2 | C | HDFS está optimizado para almacenar ficheros de gran tamaño y para hacer operaciones de lectura o escritura masivas. Su objetivo es la analítica masiva, no el soporte a operaciones de empresas. |
3 | D | El tamaño de bloque por defecto en HDFS es de 128 megabytes. |
4 | C | La tolerancia a fallos en HDFS se consigue, entre otras cosas, mediante la replicación (copia) de cada bloque en más de un nodo. |
5 | C | El factor de replicación por defecto en HDFS es 3, lo que significa que cada bloque tiene 3 copias almacenadas en 3 nodos diferentes. |
6 | C | El Namenode actúa de maestro, manteniendo la metainformación de todo el sistema de ficheros, como la estructura de directorios, información de los ficheros, factor de replicación y ubicación de los bloques. |
7 | B | La función principal del Secondary Namenode es tomar puntos de control de los metadatos del sistema de ficheros del Namenode para reducir el tiempo de arranque del Namenode. No es un nodo de respaldo activo. |
8 | C | Los Datanodes son los servicios que se encuentran en los nodos worker, y su labor principal es almacenar o leer los bloques que componen los ficheros que están almacenados en HDFS. |
9 | B | «Write-once, read many» significa que un archivo una vez escrito en HDFS no se modificará, aunque se puede acceder a él muchas veces. HDFS solo permite añadir contenido a los ficheros. |
10 | C | El comando ls en la línea de comandos de HDFS, similar al comando Unix ls, se usa para listar directorios, es decir, para mostrar su contenido. |
11 | C | YARN es el acrónimo de Yet Another Resource Negotiator, lo que indica que es un gestor de recursos. |
12 | C | La función principal de YARN es poder independizar el almacenamiento del procesamiento, abrir Hadoop a cualquier tipo de aplicación y gestionar los recursos del clúster. |
13 | B | En YARN, el contenedor es la unidad mínima de recursos de ejecución para las aplicaciones, representando una cantidad específica de memoria, núcleos de procesamiento y otros recursos. |
14 | C | El servicio ResourceManager en YARN actúa como el maestro, coordinando, asignando y controlando la ejecución de todas las tareas. |
15 | C | El servicio NodeManager se ejecuta en cada nodo worker y monitoriza y proporciona información sobre el consumo de recursos (CPU/memoria) por parte de los contenedores al ResourceManager. |
16 | B | En las primeras versiones de Hadoop, MapReduce era el único motor de computación. |
17 | B | En MapReduce, los desarrolladores escriben trabajos que consisten principalmente en una función map y una función reduce. |
18 | C | Las fases de shuffle y sort se ejecutan automáticamente después de la fase map, tomando los resultados parciales, ordenándolos por clave y agrupándolos. |
19 | C | El componente InputFormat es responsable de dividir el fichero de entrada en fragmentos para que los datos puedan ser procesados en paralelo por las tareas map. |
20 | C | MapReduce está diseñado para procesar grandes cantidades de datos en paralelo en clústeres de hardware commodity de manera confiable y tolerante a fallos. Es menos eficiente para operaciones que requieren respuestas rápidas. |
Recursos
- Guía Práctica BDA02