Vor einigen Jahren wurde MapReduce als Revolution der verteilten Programmierung gefeiert. Es gab auch Kritiker, aber im Großen und Ganzen gab es einen begeisterten Hype. Es wurde sogar patentiert! [1]
Der Name erinnert an map
und reduce
in der funktionalen Programmierung, aber wenn ich lese (Wikipedia)
Zuordnungsschritt: Der Masterknoten nimmt die Eingabe auf, unterteilt sie in kleinere Unterprobleme und verteilt sie auf Arbeitsknoten. Ein Worker-Knoten kann dies wiederum tun, was zu einer mehrstufigen Baumstruktur führt. Der Arbeitsknoten verarbeitet das kleinere Problem und gibt die Antwort an seinen Hauptknoten zurück.
Schritt reduzieren: Der Hauptknoten sammelt dann die Antworten auf alle Unterprobleme und kombiniert sie auf irgendeine Weise, um die Ausgabe zu bilden - die Antwort auf das Problem, das er ursprünglich zu lösen versuchte.
oder [2]
Interna von MAP: [...] MAP teilt den Eingabewert in Wörter auf. [...] MAP soll jedes gegebene Schlüssel / Wert-Paar der Eingabe mit potentiell vielen Schlüssel / Wert-Zwischenpaaren verknüpfen.
Interna von REDUCE: [...] [REDUCE] führt eine imperative Aggregation durch (sagen wir Reduktion): Nimm viele Werte und reduziere sie auf einen einzigen Wert.
Ich kann nicht anders als zu denken: das ist Teilen & Erobern (im Sinne von Mergesort), schlicht und einfach! Gibt es eine (konzeptionelle) Neuerung in MapReduce oder ist es nur eine Neuimplementierung alter Ideen, die in bestimmten Szenarien nützlich ist?