martes, 25 de marzo de 2014

MapReduce

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.

viernes, 7 de marzo de 2014

Teaching Concurrency

La opinión del día es a cargo del artículo “Teaching Concurrency-Oriented Programming with Erlang” escrito por el profesor del curso y publicado en las memorias del 42° SIGCSE Technical Symposium on Computer Science Education en marzo del 2011. 
Después de la introducción de este artículo vino a mí la pregunta de siempre, porque la programación concurrente no se enseña pronto en los cursos. Debo decir que al tener una base en programación orientada a objetos, conocer otros paradigmas de programación es importante en la formación de un ingeniero en sistemas computacionales. Ya que esto nos ayudará en todo caso a resolver problemas de diversa índole.
Erlang es un lenguaje totalmente nuevo para mí, pero también con gratos recuerdos de Prolog, el cual debo afirmar no aprendí muy bien pero que me ha ayudado a comprender un poco más sobre el funcionamiento de Erlang.
Entre las características de Erlang debo apuntar que mi favorita es la asignación sencilla de variables, ya que en el momento de realizar programas concurrentes ayuda mucho a que no te equivoques, o asignes un nuevo valor a algo. Quizá para muchos no es algo agradable y quizá hasta molesto, pero cuando realizas programas que requieren revisar valores y modificar otros esta función sin duda es muy útil. Es una manera de mantener el estado de ciertos objetos inmutable.
Otra cosa agradable a mi punto de vista, es el sistema de mensajes, el cual considero que es sin duda intuitivo.
No esperaba que el artículo incluyese experiencias de aprendizaje del lenguaje, lo cual demuestra que el lenguaje es bondadoso en el área de la programación concurrente. 
Después de este artículo considero que sin duda será una buena experiencia aprender Erlang, aunque sin duda mi mayor interés es conocer cómo se combinan el paradigma funcional y concurrente al momento de desarrollar algo en Erlang.