Hoy comentaré acerca del artículo MapReduce: Simplified Data Processing on Large Clusters escrito por Jeffrey Dean y Sanjay Ghemawat, publicado en el Comunications of the ACM en enero del 2008.
Me ha resultado interesante ver los aplicativos reales de funciones tan básicas como lo serían un Map y un Reduce pero con un enfoque diferente y una manera de realizarlo que nos permita el procesamiento de cantidades enormes de datos, hablando en la cantidad de terabyte.
Es así como en el artículo se nos explica que MapReduce es una abstracción inspirada en las primitivas de Lisp (map y reduce) y de otros lenguales funcionales. Además de presentar las estadísticas de rendimiento, ejecutando operaciones de alto consumo de procesamiento; y como la implementación se encuentra basada en un modelo Maestro-Trabajador.
Así que con esta abstracción realizar un map hace que apliquemos una función definida por nosotros, de esta manera se crean el número de instancias necesarias para paralelizar la tarea. Después de esto el reduce se encargará de juntar los resultados.
MapReduce ha resultado ser una herramienta poderosa para las actividades que Google realiza, como lo es los problemas de machine learning, problemas de clustering, extracción de datos para la elaboración de reportes, extracción de datos de sitios web o procesamiento de imágenes satelitales. Ya que además realiza todo esto de manera paralela, y con un esquema tolerante a fallos.
También se mencionan características interesantes para que se tenga un mejor rendimiento como mejorar las funciones a utilizar, mantener un orden en los datos, saltar datos que contengan error, enviar mensajes de estatus y otros que son útiles para la actividad.
Su éxito es completamente atribuido a que es un modelo fácil de usar y que la mayoría de los problemas pueden ser expresados en la manera que se utiliza MapReduce.