MapReduce unterscheidet sich in ziemlich grundlegender Weise von den meisten Divide- und Conquer-Systemen, aber eines, das so einfach ist, dass viele Leute es fast übersehen. Das wahre Genie besteht darin, die Zwischenergebnisse zu markieren.
In einem typischen (vorherigen) Divide and Conquer-System teilen Sie die Arbeit nacheinander auf, führen Arbeitspakete parallel aus und führen die Ergebnisse dieser Arbeit nacheinander wieder zusammen.
In MapReduce teilen Sie die Arbeit nacheinander auf, führen Arbeitspakete parallel aus und markieren die Ergebnisse, um anzugeben, welche Ergebnisse zu welchen anderen Ergebnissen passen. Das Zusammenführen erfolgt dann seriell für alle Ergebnisse mit demselben Tag, kann jedoch für Ergebnisse mit unterschiedlichen Tags parallel ausgeführt werden.
In den meisten früheren Systemen wurde der Zusammenführungsschritt zu einem Engpass für alle Aufgaben, mit Ausnahme der wirklich trivialen. Mit MapReduce kann es immer noch vorkommen, dass aufgrund der Art der Aufgaben alle Zusammenführungen seriell ausgeführt werden müssen. Wenn die Aufgabe jedoch ein gewisses Maß an paralleler Zusammenführung von Ergebnissen zulässt, bietet MapReduce eine einfache Möglichkeit, diese Möglichkeit zu nutzen. Die meisten anderen Systeme führen eine der beiden folgenden Aktionen aus: Führen Sie die Zusammenführung entweder nacheinander aus, nur weil dies für einige Aufgaben erforderlich sein könnte , oder definieren Sie die parallele Zusammenführung für eine bestimmte Aufgabe statisch. Mit MapReduce erhalten Sie im Zusammenführungsschritt genügend Daten, um so viele Daten wie möglich automatisch parallel einzuplanen, und stellen gleichzeitig sicher, dass die Kohärenz erhalten bleibt (vorausgesetzt, Sie haben im Zuordnungsschritt keine Fehler gemacht).
Beachten Sie auch, dass in MapReduce alle Schritte rekursiv sein können, sodass ich möglicherweise einen ersten Zuordnungsschritt habe, der eine große Aufgabe in 5 kleinere Aufgaben aufteilt, die parallel ausgeführt werden können - aber jede dieser Aufgaben kann (in turn) wird auf eine Reihe anderer kleinerer paralleler Aufgaben abgebildet, und so weiter.
Dies führt zu einer Baumstruktur sowohl auf der Zuordnungs- als auch auf der Verkleinerungsseite, um eine große Aufgabe schnell in genügend Teile zu zerlegen, um die Vorteile vieler Maschinen nutzen zu können.