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 = 0Foreach v in intermediate_vals:Count +=vemit(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.
0 comentarios
Sé respetuoso/a, en este blog caben todo tipo de opiniones con respeto y serenidad.