Ya hemos hablado en entradas anteriores de las aplicaciones de Big Data. Este tipo de aplicaciones suelen explotar el paralelismo de datos, de manera que diferentes núcleos de procesador, procesadores o nodos de cómputo (dependiendo de la arquitectura que haya por debajo) realicen las mismas tareas sobre conjuntos de datos diferentes para producir un resultado en el menor tiempo posible,
MapReduce es un framework o entorno de desarrollo (pensado para lenguaje C inicialmente, aunque luego se han implementado versiones para otros lenguajes como Java) que permite trabajar en paralelo con grandes cantidades de datos en sistemas de memoria distribuida (clusters, sistemas Grid y entornos Cloud).
Con este entorno tanto los datos de entrada como los de salida (los resultados) se almacenan en ficheros, así como todos los resultados intermedios que se produzcan. Se basa en el modelo maestro/esclavo, de manera que uno de los nodos de cómputo lleve el control del programa y vaya enviando trabajo al resto de los nodos (los esclavos) según vayan quedando libres. Se ofrecen dos interfaces a los programas de usuario: el de Map y el de Reduce. El interfaz Map mapea los datos iniciales que aparecen en el fichero de entrada a pares clave/valor intermedios con los que sea más fácil trabajar. Después de ordenar, agrupar, filtrar, etc; estos pares con interfaces internos, el interfaz Reduce, reduce de alguna forma los pares intermedios a un conjunto de datos menor que el inicial en el que se agrupan los que comparten la misma clave. El ejemplo típico es el de la cuenta de palabras (está extraído de este enlace).
MapReduce nos facilita las siguientes tareas:
- Particionamiento de datos y de cómputo.
- Tratamiento de ficheros de entrada y de salida.
- Sincronización (hasta que todos los esclavos no terminan de hacer el Map, no se comienza con las tareas de Reduce).
- Comunicación (que se realiza mediante RPC).
- Sort y Group (interfaces internos para trabajar en paralelo con los grandes conjuntos de datos).
- Map y Reduce (interfaces externos disponibles para los programas de usuario).
En futuras entradas hablaremos de las implementaciones que existen de este framework en la actualidad y haremos una comparativa entre ellas.