Mapa reducido

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 11 de agosto de 2022; la verificación requiere 1 edición .

MapReduce  es un modelo de computación distribuida introducido por Google , que se utiliza para computación paralela en conjuntos de datos muy grandes, de hasta varios petabytes [1] , en clústeres de computadoras .

Resumen

MapReduce es un marco para calcular un conjunto de tareas distribuidas utilizando una gran cantidad de computadoras (llamadas "nodos") que forman un clúster .

El trabajo de MapReduce consta de dos pasos: Map y Reduce, llamados así por las funciones de orden superior del mismo nombre , map y reduce .

El paso Map preprocesa los datos de entrada. Para hacer esto, una de las computadoras (llamada nodo principal - nodo maestro) recibe los datos de entrada de la tarea, los divide en partes y los pasa a otras computadoras (nodos trabajadores - nodo trabajador) para su procesamiento previo.

En el paso de reducción, se reducen los datos preprocesados . El nodo principal recibe respuestas de los nodos trabajadores y, en base a ellas, genera un resultado: una solución al problema que se formuló originalmente.

La ventaja de MapReduce es que te permite realizar operaciones de preprocesamiento y reducción de forma distribuida. Las operaciones de preprocesamiento funcionan independientemente unas de otras y se pueden realizar en paralelo (aunque en la práctica esto está limitado por la fuente de entrada y/o el número de procesadores utilizados). Del mismo modo, varios nodos de trabajo pueden realizar acumulaciones; esto solo requiere que todos los resultados de preprocesamiento con un valor de clave específico sean procesados ​​por un nodo de trabajo a la vez. Aunque este proceso puede ser menos eficiente que los algoritmos más secuenciales, MapReduce se puede aplicar a grandes cantidades de datos que pueden ser procesados ​​por una gran cantidad de servidores. Por ejemplo, MapReduce se puede usar para ordenar un petabyte de datos en solo unas pocas horas. El paralelismo también proporciona cierta recuperación de fallas parciales del servidor: si un nodo trabajador que realiza una operación de preprocesamiento o reducción falla, su trabajo puede transferirse a otro nodo trabajador (siempre que los datos de entrada para la operación que se está realizando estén disponibles).

El marco se basa en gran medida en el mapa y reduce las funciones ampliamente utilizadas en la programación funcional [2] , aunque la semántica real del marco es diferente del prototipo [3] .

Ejemplo

El ejemplo canónico de una aplicación escrita con MapReduce es el proceso de contar el número de veces que aparecen diferentes palabras en un conjunto de documentos:

// Función utilizada por los nodos de trabajo en el paso Mapa // para procesar pares clave-valor del mapa de vacío del flujo de entrada ( nombre de cadena , documento de cadena ) : // Datos de entrada: // nombre - nombre del documento // documento - contenido del documento para cada palabra en el documento : EmitIntermediate ( palabra , "1" ); // Función utilizada por los nodos trabajadores en el paso Reducir // para procesar los pares clave-valor obtenidos en el paso Mapa void reduce ( Iterator parcialCounts ) : // Datos de entrada: // recuentos parciales: lista de resultados intermedios agrupados. El número de entradas en parcialCounts es // el valor requerido int result = 0 ; para cada v en recuentos parciales : resultado += parseInt ( v ); Emitir ( AsString ( resultado ));

En este código, en el paso Mapa, cada documento se divide en palabras y se devuelven pares, donde la clave es la palabra misma y el valor es "1". Si la misma palabra aparece varias veces en un documento, como resultado del procesamiento preliminar de este documento habrá tantos de estos pares como el número de veces que aparece esta palabra. Los pares generados se envían para su posterior procesamiento, el sistema los agrupa por clave (en este caso, la clave es la palabra misma) y los distribuye entre múltiples procesadores. Los conjuntos de objetos con la misma clave en el grupo llegan a la entrada de la función reduce, que procesa el flujo de datos, reduciendo su volumen. En este ejemplo, la función de reducción simplemente suma las apariciones de una palabra dada en todo el flujo y el resultado, solo una suma, se envía como salida.

Notas

  1. Google destaca el funcionamiento interno del centro de datos | Blog de noticias tecnológicas: CNET News.com (enlace descendente) . Consultado el 27 de septiembre de 2008. Archivado desde el original el 19 de octubre de 2013. 
  2. "Nuestra abstracción está inspirada en el mapa y reduce las primitivas presentes en Lisp y muchos otros lenguajes funcionales". - "MapReduce: procesamiento de datos simplificado en clústeres grandes" Archivado el 11 de diciembre de 2017 en Wayback Machine , por Jeffrey Dean y Sanjay Ghemawat; de los laboratorios de Google
  3. "Modelo de programación MapReduce de Google - Revisado" Archivado el 23 de abril de 2015 en Wayback Machine  - artículo de Ralph Lemmel de Microsoft

Enlaces