BigData & Hadoop (II) - MapReduce

julio 29, 2013

El efecto de "saltito" del elefante es demoledor.
Este post pertenece a la serie de BigData & Hadoop. A continuación tenéis el esquema que iré siguiendo de publicación de los Post:


Hoy vamos a dar un repaso a la tecnología MapReduce, uno de sus dos componentes principales(HDFS y MapReduce). Lets Go!

1 ¿Qué es MapReduce?

Es un método para distribuir tareas a través de múltiples nodos. Cada Nodo procesa los datos 
almacenados en ese Nodo, siempre que sea posible.

Consiste en dos fases: Map y Reduce.

Nos permite automatizar la paralelización y distribución, así como una tolerancia a fallos muy baja, 
herramientas para monitorizar y obtener el estado. Además es una clara abstracción para los 
programadores, y está escrito en Java.

MapReduce abstrae y libera todas las tareas de “limpieza” a los programadores, y pueden concentrarse 
simplemente en escribir las funciones Map y Reduce.

Update!!!!: en Spark internamente realiza los cálculos en Memoria RAM (y cuando se queda sin ella, recurre a disco), pero básicamente el concepto es el mismo, a nivel de #Developers :)

2 Fases Map y Reduce

2.1 Fase Map

Hadoop intenta asegurarse que los Mappers se ejecutan en nodos que mantienen una porción de los 
datos locales, para evitar tráfico en la red. Se ejecutan de manera paralela los Mappers, donde cada uno 
procesa una porción de los datos de entrada.

El Mapper lee los Datos en forma de pares clave/valor y muestra cero o más pares clave/valor:
map(clave_entrada,valor_entrada)->lista (clave, valor)

Mapper puede usar o ignorar completamente la clave de entrada, por ejemplo, un parón estándar es 
leer una línea de un archivo a la vez:

 • La clave es el byte offset dentro del archivo del cual comienza la línea.
 • El valor es el contenido de la línea en sí misma.
 • Normalmente la clave se considera irrelevante.

Si no escribe nada en absoluto fuera, el output debe ser de la forma par clave/valor.

Ejemplo - Contar el número de Palabras:

Contar el número de veces que se encuentra una palabra en un documento con una gran 
cantidad de palabras como Datos de entrada:

Map(input_key, input_value)
Foreach Word w in input_value:
Emit(w,1)
Datos de Entrada del Mapper

Datos de Salida del Mapper

2.2 Fase Reduce

Después de que acabe la fase de Map, todos los valores intermedios para una clave intermedia dada, son combinados juntos en una lista.

Esta lista es dada a un Reductor:
Puede que que haya un solo Reductor o múltiples reductores
Todos los valores asociados con un clave intermedia en particular son garantizados de que irán al mismo Reductor.
Las claves intermedias, y su lista de valores, son pasados al reductor ordenados por Clave
Este paso se conoce como Shuffle and Sort

Finalmente, el reductor devuelve cero o más como pares Clave/valor, donde serán escrito al HDFS. En la práctica, el Reductor normalmente devolverá un solo par clave/valor para cada clave introducida.

La fase Map quedaría así :D

Ejemplo – Reductor Suma:

1. Función de reducción que nos contará el número de veces que aparece cada palabra
Reduce(output_key,intermediate_vals)
Set count = 0
Foreach v in intermediate_vals:
Count +=v
emit(output_key, count)
Datos de Salida del Reductor
Quedaría tal que así:

Vista del proceso Reductor
Una vista completa de toda la fase de MapReduce:
Tachán: ¡El proceso completo de Map Reduce!

Por hoy hemos acabado.

Os espero en la siguiente :)


Fuente: Cloudera

You Might Also Like

0 comentarios

Sé respetuoso/a, en este blog caben todo tipo de opiniones con respeto y serenidad.

Contact Form :: (」゜ロ゜)」