Continuamos con conceptos básicos acerca de Hadoop, explicando en este post, MapReduce ¿Qué es y cómo funciona?

MapReduce es un framework que proporciona un sistema de procesamiento de datos paralelo y distribuido. Su nombre se debe a las funciones principales que son Map y Reduce, las cuales explicaremos a continuación. MapReduce está pensado para la solución práctica de algunos problemas que pueden ser paralelizados, pero se ha de tener en cuenta que no todos los problemas pueden resolverse eficientemente con MapReduce. MapReduce está orientado a resolver problemas con conjuntos de datos de gran tamaño, por lo que utiliza el sistema de archivos distribuido HDFS.

El Framework MapReduce tiene una arquitectura maestro / esclavo. Cuenta con un servidor maestro o JobTracker y varios servidores esclavos o TaskTrackers, uno por cada nodo del clúster.

El JobTracker es el punto de interacción entre los usuarios y el framework MapReduce. Los usuarios envían trabajos MapReduce al JobTracker, que los pone en una cola de trabajos pendientes y los ejecuta en el orden de llegada. El JobTracker gestiona la asignación de tareas y delega las tareas a los TaskTrackers. Los TaskTrackers ejecutan tareas bajo la orden del JobTracker y también manejan el movimiento de datos entre la fase Map y Reduce.

Para ver las diferencias entre JobTracker y TaskTracker vamos a ver las características de cada uno.

JobTracker: Servidor maestro de MapReduce

  • Capacidad para manejar metadatos de trabajos
    • Estado de la petición del trabajo
    • Estado de las tareas que se ejecutan en TaskTracker
  • Decide sobre la programación
  • Hay exactamente un JobTracker por cluster.
  • Recibe peticiones de tareas enviadas por el cliente.
  • Programa y monitoriza los trabajos MapReduce con TaskTrackers.

 

TaskTracker: Servidor esclavo de MapReduce

  • Ejecuta las solicitudes de trabajo de JobTrackers
  • Obtiene el código que se ejecutará
  • Aplica la configuración especifica del trabajo
  • Comunicación con el JobTracker:
    • Envíos de la salida, finalizar tareas, actualización de tareas, etc.

En la Figura 1, vemos los componentes principales del Framework, donde se aprecia que las funciones de map son ejecutadas por los TaskTrackers mientras que las funciones de Reduce es ejecutada por el JobTracker.

Figura 1: Framework MapReduce
Figura 1: Framework MapReduce

Vistos ya los componentes software que presenta el Framework MapReduce, vamos a entrar en detalle acerca de cada una las funciones Map y Reduce. Utilizaremos MapReduce para abordar problemas que pueden ser resueltos utilizando las operaciones de Map y Reduce, estas funciones están definidas con respecto a datos estructurados en tuplas del tipo (clave, valor).

Map

La función Map recibe como parámetros un par de (clave, valor) y devuelve una lista de pares. Esta función se encarga del mapeo y se aplica a cada elemento de la entrada de datos, por lo que se obtendrá una lista de pares por cada llamada a la función Map. Después se agrupan todos los pares con la misma clave de todas las listas, creando un grupo por cada una de las diferentes claves generadas. No hay requisito de que el tipo de datos para la entrada coincida con la salida y no es necesario que las claves de salida sean únicas.

Map (clave1, valor1) –> lista (clave2, valor2)

La operación de Map se paraleliza, el conjunto de archivos de entrada se divide en varias tareas llamado FileSplit, ver Figura 2, el tamaño típico de bloque es de 128MB. Las tareas se distribuyen a los nodos TaskTrackers, y estos a su vez pueden realizar la misma tarea si hiciera falta.

Figura 2: Operación Split
Figura 2: Operación Split

 

Reduce

La función Reduce se aplica en paralelo para cada grupo creado por la función Map().La función Reduce se llama una vez para cada clave única de la salida de la función Map. Junto con esta clave, se pasa una lista de todos los valores asociados con la clave para que pueda realizar alguna fusión para producir un conjunto más pequeño de los valores.

Reduce (clave2, lista(valor2)) –> lista(valor2)

En la Figura 3 podemos ver que forma gráfica como funcionaría el proceso global de MapReduce.

Cuando se inicia la tarea reduce, la entrada se encuentra dispersa en varios archivos a través de los nodos en las tareas de Map. Los datos obtenidos de la fase Map se ordenan para que los pares clave-valor sean contiguos (fase de ordenación, sort fase), esto hace que la operación Reduce se simplifique ya que el archivo se lee secuencialmente. Si se ejecuta el modo distribuido estos necesitan ser primero copiados al filesystem local en la fase de copia. Una vez que todos los datos están disponibles a nivel local se adjuntan a una fase de adición, el archivo se fusiona (merge) de forma ordenado. Al final, la salida consistirá en un archivo de salida por tarea reduce ejecutada.

Por lo tanto, N archivos de entrada generará M mapas de tareas para ser ejecutados y cada mapa de tareas generará tantos archivos de salida como tareas Reduce hayan configuradas en el sistema.

Figura 3: Funcionamiento de MapReduce
Figura 3: Funcionamiento de MapReduce

 

En futuros posts, seguiremos con conceptos sobre Hadoop, como son HiveQL, Pig y Sqoop, junto con ejemplos prácticos de cada uno de ellos 🙂

Mientras puedes consultar algunos de nuestros posts publicados anteriomente:

Introducción Hadoop Big Data [parte 1]

Introducción Hadoop Big Data [parte 2]

Hadoop HDFS. Almacenamiento y consulta [Parte 1]

Hadoop HDFS. Almacenamiento y consulta [Parte 2]

Hadoop HDFS. Demo Hadoop Windows Azure

Si os gustan nuestros posts, desde SolidQ os invitamos a visitar nuestro bloga suscribiros a nuestra newsletter para recibir las últimas novedades del sector en vuestro correo 🙂

0 Shares:
1 comment
  1. Gracias por la explicacion Yolanda, Es muy reducida la documentacion en español. Como es un tema algo complejo en mi caso me ayuda un ejemplo lo mas sencillo que se pueda o una analogia para entender mejor.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like