Hace unos años, MapReduce fue aclamado como la revolución de la programación distribuida. También ha habido críticas, pero en general hubo un entusiasmo exagerado. ¡Incluso se patentó! [1]
El nombre recuerda map
y está reduce
en la programación funcional, pero cuando leo (Wikipedia)
Paso del mapa: el nodo maestro toma la entrada, la divide en subproblemas más pequeños y los distribuye a los nodos de trabajo. Un nodo de trabajo puede hacer esto nuevamente a su vez, lo que lleva a una estructura de árbol de varios niveles. El nodo trabajador procesa el problema más pequeño y devuelve la respuesta a su nodo maestro.
Reduzca el paso: el nodo maestro luego recopila las respuestas a todos los subproblemas y los combina de alguna manera para formar la salida, la respuesta al problema que originalmente estaba tratando de resolver.
o [2]
Elementos internos de MAP: [...] MAP divide el valor de entrada en palabras. [...] MAP está destinado a asociar cada par clave / valor dado de la entrada con potencialmente muchos pares clave / valor intermedios.
Elementos internos de REDUCIR: [...] [REDUCIR] realiza una agregación imperativa (por ejemplo, reducción): tome muchos valores y reduzca a un solo valor.
No puedo evitar pensar: ¡esto es dividir y conquistar (en el sentido de Mergesort), simple y llanamente! Entonces, ¿hay alguna novedad (conceptual) en MapReduce en alguna parte, o es solo una nueva implementación de viejas ideas útiles en ciertos escenarios?