Im Kern ist MapReduce ein Programmiermodell für die Verarbeitung von Datensätzen, die verteilt über die Slave-Knoten eines Hadoop-Clusters gespeichert werden. Das Schlüsselkonzept hier ist teilen und erobern. Insbesondere möchten Sie einen großen Datensatz in viele kleinere Teile zerlegen und parallel mit demselben Algorithmus verarbeiten.
Beim Hadoop Distributed File System (HDFS) sind die Dateien bereits in mundgerechte Stücke unterteilt. MapReduce ist das, was Sie verwenden, um alle Teile zu bearbeiten.
MapReduce-Anwendungen haben mehrere Phasen, wie in dieser Liste beschrieben:
-
Bestimmen Sie die genauen zu verarbeitenden Datensätze aus den Datenblöcken. Dabei wird berechnet, wo sich die zu verarbeitenden Datensätze innerhalb der Datenblöcke befinden.
-
Führen Sie den angegebenen Algorithmus für jeden Datensatz im Datensatz aus, bis alle Datensätze verarbeitet wurden.
Die einzelne Instanz der Anwendung, die mit einem Datenblock in einem Datensatz ausgeführt wird, wird als Mapper-Task bezeichnet. (Dies ist der Mapping-Teil von MapReduce.)
-
Führen Sie lokal eine Zwischenreduktion der Ausgabe jedes Mappers durch.
(Die Ausgänge werden mit anderen Worten provisorisch kombiniert.) Diese Phase ist optional, da sie in einigen üblichen Fällen nicht wünschenswert ist.
-
Gruppieren Sie auf Grundlage der Partitionierungsanforderungen die anwendbaren Partitionen der Daten aus den Ergebnismengen der einzelnen Mapper.
-
Reduzieren Sie die Ergebnismengen der Mapper auf eine einzige Ergebnismenge - den Reduce-Teil von MapReduce.
Eine einzelne Instanz der Anwendung, die mit Mapper-Ausgabedaten ausgeführt wird, ist als Reduktionsaufgabe bekannt. (So seltsam es auch scheinen mag, da "Reduce" Teil des MapReduce-Namens ist, kann diese Phase optional sein; Anwendungen ohne Reduktionsmittel werden als Nur-Karten-Jobs bezeichnet, was nützlich sein kann, wenn es keine müssen die Ergebnismengen aus den Map-Tasks kombinieren.