¿Qué es MapReduce para procesamiento en paralelo?

¿Alguna vez no nos hemos preguntado cómo es que Google hace para traernos resultados de millones de sitios en internet, para mostrarnos sus resultados de búsqueda? Por esa razón vamos a hablar de MapReduce.

MapReduce
MapReduce

Para poder manejar y procesar tal cantidad de información, se hizo necesario crear algoritmos que permitieran procesar millones de datos en forma distribuida en muchas máquinas a la vez.  En vista de esta necesidad fue de donde nació MapReduce, conocido en Google como Hadoop.

MapReduce se puede realizar sobre un conjunto de datos en una red de servidores locales, o también sobre servidores geográficamente distribuidos.

En este esquema encontramos dos funciones principales: “Map” y “Reduce”. La función map tiene como objetivo tomar un conjunto de datos para convertirlo en otro subconjunto, modelados en tuplas o “pares” (clave/valor). Luego tenemos la función reduce, que toma las salidas de map como sus entradas, combinando las tuplas de datos en un conjunto más pequeño de pares. La función reduce siempre se realiza después de la función map.

También te puede interesar ¿Qué es y para que sirve MySQL Database?

Para aclarar este embrollo, el siguiente ejemplo muestra cómo funciona este algoritmo:

Asumiendo que se tienen 5 archivos, y cada uno contiene dos columnas (una clave y un valor en términos de Hadoop), una columna representa la ciudad y la otra su temperatura durante varias horas del día.

Este es un ejemplo de uno de dichos archivos:

Bogotá, 15

Cali, 32

Medellín, 30

Cartagena, 36

Cartagena, 33

Bogotá, 14

Con estos datos que hemos recolectado, deseamos encontrar la máxima temperatura para cada ciudad a partir de los 5 archivos. En cada archivo la ciudad y su temperatura aparecen muchas veces.

Usando el esquema MapReduce, este trabajo se divide en 5 tareas map, donde cada “mapper” trabaja en uno de los cinco archivos, al final cada tarea map debe retornar la máxima temperatura de cada ciudad, por cada archivo. Por ejemplo con los datos listados arriba, una función map debería retornar lo siguiente:

(Bogotá, 15) (Medellín, 30) (Cartagena, 36)

Asumiendo que las otras cuatro tareas map procesan sus cuatro archivos correspondientes, podrían retornar los siguientes resultados intermedios:

(Bogotá, 18) (Medellín, 32) (Cartagena, 38) (Bogotá, 17) (Medellín, 34) (Cartagena, 39) (Bogotá, 13) (Medellín, 31) (Cartagena, 34) (Bogotá, 12) (Medellín, 36) (Cartagena, 37)

Ahora todos los 5 resultados se deben ingresar en tareas “reduce”, las cuales combinan todos los resultados para obtener un solo valor por cada ciudad:

(Bogotá, 18) (Medellín, 36) (Cartagena, 39)

Una analogía de MapReduce puede ser la forma en la que se realizaba un censo en la antigua Roma. En este caso los organizadores del censo, enviaban personas a cada ciudad en el imperio. Cada empadronador en cada ciudad tenía la tarea de contar el número de personas y retornar el resultado a la capital. En Roma, los resultados de cada ciudad se reducían a un número único para determinar la población total del imperio.  El mapeo de los empadronadores a las ciudades, que en paralelo retornan un resultado parcial, y la combinación de dichos valores (reducing), es mucho más eficiente que enviar una sola persona a contar una a una a todos los habitantes del imperio.

Gracias a estas metodologías, se pueden tomar datos de grandes y diversas fuentes, estructuradas o no, para obtener resultados de una manera más rápida, aprovechando la distribución del procesamiento de la información en multitud de máquinas a la vez.

Esto permite desde buscar en las millones de páginas web de internet, hacer análisis de minería de datos en grandes bases de datos distribuidas, hacer cálculos numéricos en complejos experimentos científicos, o cualquier tipo de análisis sobre trillones de archivos que actualmente se generan día a día en nuestro mundo digital.

Artículo tomado como referencia de la página principal de IBM.

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.