MapReduce

MapReduce


A lo largo del curso de Programación Paralela y Concurrente, se leyeron distintos artículos sobre la codificación de programas con más de un hilo de ejecución y/o que se pudieran correr en distintos procesadores. A lo largo de estas lecturas se mencionaba las complejidades de este tipo de programas ya que se tenían que tomar en cuenta los accesos a la memoria para no corromper los datos almacenados. Sin embargo existen problemas que pueden ser resueltos de forma más sencilla con algoritmos paralelos que con algoritmos secuenciales. Un ejemplo de esto es la iteración de listas. En el artículo titulado MapReduce: Simplified Data Processing on Large Clusters se habla de un algoritmo desarrollado y ocupado por Google para hacer procesamiento en paralelo de iteración y reducción de listas.

Google es un empresa que responde miles de peticiones y realiza diversas búsquedas en Internet. Esta fue la principal razón por la que desarrollaron el algoritmo de MapReduce, el cual permite dividir la iteración sobre una lista, en esta caso puede ser un documento que es una lista de palabras, en partes de código paralelas y puedan correr en distintas computadoras. Asimismo el algoritmo permite reducir una lista que permite realizar una operación en la lista para tener menos elementos dentro de ella y esta parte también se paralelo a con el algoritmo. En el caso de documentos puedes hacer una búsqueda de una palabra y sacar las veces que apareció dentro del documento. Algo que es interesante ver es el manejo de la memoria y la comunicación entre las partes paralelas ya que estos son dos de los principales problemas que se tienen al correr más de un thread. 

Una de las formas en las que se resuelven estos dos problemas es que los “trabajadores” tienen una copia de los datos e iteran sobre su parte, además de que tienen un Master que es el encargado de dividir y asignar las tareas a los trabajadores. Realmente el MapReduce es un algoritmo que utilizó día con día pero nunca me había puesto a pensar en su funcionamiento y en todas las optimizacion es que se tuvieron que realizar para que este pudiera correr de forma paralela y concurrente. 

Comments