Hadoop por dentro (II): HDFS y MapReduce

Tuesday, September 26, 2017

Hadoop por dentro (II): HDFS y MapReduce

En nuestro primer post sobre Hadoop hablamos de su origen y sus características principales. Ahora vamos a conocer un poco la arquitectura que da soporte a la fiabilidad, escalabilidad y gran potencia que hacen de él un entorno ideal para las aplicaciones Big Data.



La idea que subyace en la filosofía Hadoop es distribuir algo muy grande, estamos tratando con Big Data, entre muchos nodos diferentes. Y tenemos dos cosas que repartir. Por un lado, la gestión y almacenamiento de la información. Y por otro, el procesamiento de los datos. Por tanto, Hadoop se basa en dos componentes principales:

  • El Sistema de Ficheros distribuido Hadoop (HDFS), para la parte de almacenamiento
  • El Servidor MapReduce, para la gestión distribuida del procesamiento


 Ejemplo de cluster Hadoop con dos nodos.
Figura 1: Ejemplo de cluster Hadoop con dos nodos.(Fuente)

 

HDFS (Hadoop Distributed File System)


Es el sistema de ficheros que almacena los datos en Hadoop. Para hacer frente al desafío que supone el gran tamaño de ficheros en Big Data, HDFS “rompe” estos ficheros en bloques (de tamaño configurable, aunque suelen ser de 128MB o 256 MB), y luego los distribuye entre los distintos Data Nodes que conforman el cluster HDFS.

Lectura y Escritura en HDFS
Figura 2: Lectura y Escritura en HDFS.

Además de distribuir los bloques entre distintos nodos de datos, también los replica (al menos en 3 nodos diferentes, 2 en el mismo rack y 1 en otro) para evitar pérdidas de información si alguno de los nodos falla.

El servidor HDFS en un cluster se llama Name Node. El NameNode almacena los metadatos, como el árbol de directorios del sistema de ficheros (Espacio de Nombres), y sabe en qué nodo del cluster está cada bloque de información (Mapa de Bloques). Por su gran importancia, este nodo se suele replicar en un Secundary Name Node.

Cuando una aplicación cliente necesita leer o modificar un bloque de datos, el Name Node le indica en qué nodo se localiza esa información. También se asegura de que los nodos no estén caídos y  que la información esté replicada, para asegurar su disponibilidad aun en estos casos.(Ver Figura 2).

Por todo esto, HDFS le proporciona a Hadoop una gran escalabilidad. Según aumenta el volumen de datos a tratar, se pueden ir agregando nodos al cluster de forma dinámica. Los mayores clusters de Hadoop pueden llegar a tener tamaños de decenas de petabytes de datos , distribuidos entre miles de nodos. En la wiki de Apache Hadoop podemos encontrar un listado de empresas e instituciones que trabajan con Hadoop, con detalles sobre el tamaño de sus clusters y el tipo de hardware que utilizan. Por ejemplo, Facebook tiene dos clusters principales:
  • Un cluster de 1100 máquinas, con 8800 nodos y cerca de 12 PB de almacenamiento.
  • Un segundo cluster de 300 máquinas con 2400 nodos y cerca de 3PB de de almacenamiento.

Mapreduce


Es el componente de procesamiento de Hadoop. Consiste en un framework de programación (librerías y entorno de ejecución) que trabaja sobre HDFS y se basa en el uso de dos tipos de funciones:

  • Map“Divide y vencerás”: divide la tarea de entrada en subtareas y las ejecuta entre distintos nodos.
  • Reduce – “Combina y reduce la cardinalidad”: la función “Reduce” recoge las repuestas a las sub-tareas en cada subnodo y las combina y agrupa para obtener la respuesta final.
Filosofía MapReduce.
Figura 3: Filosofía MapReduce.

 

Un ejemplo típico de uso


Uno de los típicos ejemplos de aplicación de MapReduce consiste en contar el número de veces que se repite una palabra en un texto. Se divide en texto original en bloques o “tokens” (en este caso, grupos de 3 palabras). Cada token se pasa a una instancia de mapper que los organiza en parejas (clave=nombre fruta, valor=1 si está). En el proceso de Sort and Shuffle se organizan todos los resultados parciales obtenidos por los mappers en cada instancia o nodo y se reducen al agrupar y sumar todas las ocurrencias de una palabra en concreto. En el ejemplo de la Figura 4 “Apple” aparece 4 veces, “Grapes” 1 vez, etc... Así se obtiene el resultado final con la suma de las ocurrencias de cada palabra en el texto.


Ejemplo de aplicación de MapReduce para contar palabras de un texto.
Figura 4: Ejemplo de aplicación de MapReduce para contar palabras de un texto.


"Llevar la ejecución a los datos"


Antes de que existiera el framework MapReduce la única forma de distribuir el procesamiento era, o bien compartiendo el mismo almacenamiento, o desplazando los datos de los nodos esclavos, al nodo de computación. Cuando los volúmenes de datos se hicieron enormes, surgieron problemas:
  • aumentaron los costes y los tiempos de respuesta (peores rendimientos de red).
  • aumentaba el riesgo de corrupción e inconsistencia de los datos.
  • aumentaba el riego de saturar el nodo maestro etc...

Comparativa modelos de procesamiento distribuido (Tradicional versus MapReduce
Figura 5: Comparativa modelos de procesamiento distribuido (Tradicional versus MapReduce)

Estos problemas se solucionaron llevando el procesamiento allá donde se encontraban los datos, mejorando notablemente los tiempos de respuesta y cumpliendo así uno de los mantras del Big Data: “move the computation to the data”. 



¿Y Cómo funciona MapReduce?¿Cómo distribuye el procesamiento?


Cada máquina de un cluster Hadoop tiene un servidor MapReduce que se llama TaskTracker. A su vez, hay un gestor de Jobs por cada cluster, el JobTracker, que se encarga de dividir cada proceso a realizar en subprocesos, y distribuir la computación de estos subprocesos entre distintas máquinas del cluster, enviándo a los TaskTrackers de cada una de ellas el job que le corresponde realizar. El Job Tracker también es responsable de comprobar que no haya desaparecido algún Task Tracker por fallo de hardware o sofware. En caso de detectar que un Task Tracker ha desaparecido, asigna automáticamente esa tarea a otro Task Tracker del cluster.

Cluster Hadoop de 3 nodos
Figura 6: Cluster Hadoop de 3 nodos.


Para terminar, vamos a hablar sobre las versiones de Hadoop. En la versión 1, si se caía el Job Tracker o se saturaba, el cluster dejaba de funcionar. También, en esta versión, el motor MapReduce estaba integrado en el Core de Hadoop y era la única API que podía interactuar con NTFS.

Esta situación cambió en 2011 con el lanzamiento de la versión 2. MR2 incorporaba YARN (Yet Another Resource Navigator ), un gestor de cluster mejorado que separaba la tareas que realizaba el Job Tracker en la versión anterior en dos daemons:

  • Un Gestor de recursos global: Global ResourceManager.
  • Un programador/Monitor de aplicaciones (por aplicación): ApplicationMaster (AM).



Comparativa de versiones de Hadoop.
Figura 7: Comparativa de versiones de Hadoop.
En la versión 2 se desarrolló una nueva versión de MapReduce, muy diferente de la anterior, ya que dejó de estar integrada en el Core (se ejecuta como una aplicación independiente). Gracias a esto, ahora es posible el acceso al sistema de ficheros de Hadoop desde otros entornos de programación y ejecución. Esto es importante porque, aunque MapReduce es el framework ideal para muchas de las aplicaciones Big Data, no lo es para todas. Por ejemplo, Facebook no usa MapReduce sino Apache Giraph para analizar los grafos sociales generados entre sus usuarios y Contactos.
  
 La pila YARN
Figura 8: La pila YARN

No te pierdas el tercer post de esta mini-serie sobre Hadoop, donde hablaremos de las aplicaciones que conforman su ecosistema.

No comments:

Post a Comment