Sobald die Karte Aufgabe für einen Job erledigt ist dann der Ausgang gespeichert und dann zu Partitioner class übertragen wird diese Klasse zur Trennung von Daten gemäß den Reduzierungen verantwortlich ist. In Ihrem Fall haben Sie beispielsweise 3 Maschinen, auf denen Sie 2 Reduzierstücke laufen lassen. Dann ist die partition() -Methode der Partitionierungsklasse verantwortlich für das Teilen der Kartenausgabe für diesen 2 Reduzierer Ex-> Hallo 1 // Reduzierer 1 Wort 1// Reduzierer 2 Daten 1 // Reduzierer 1
Es werden nun 2 getrennte Dateien für jeden Reduzierer erstellt. Keine der auf jedem Mapperknoten erzeugten Dateien hängt davon ab, ob die Kartenausgabe Daten für jeden Reduzierer enthält oder nicht Bis jetzt sind alle diese Dateien auf dem Mapper-Knoten gespeichert.
Danach wird die Klasse WritableComapartor aufgerufen, die für das Sortieren der Daten in jeder der beiden Dateien zuständig ist und auch für deren Gruppierung zuständig ist. Sobald dies erledigt ist, können die resultierenden Dateien an die entsprechenden Knoten im Cluster gesendet werden.
Nach dem Mischen und Sortieren, in dem alle Kartenknoten die resultierenden Ausgabedateien auf dem jeweiligen Reduzierknoten senden, dann auf dem Reduzierer die Dateien von allen Mapper erhalten zusammengeführt und sortieren Ex -> so gibt es 2 Mapper und 2 Reduzierer und ein Mapper erzeugen Daten für sowohl Reduzierer 1 als auch Reduzierer 2, andere erzeugte nur eine Ausgabedatei, die für Reduzierer 1 ist, dann wird Reduzierer 1 zwei Dateien erhalten, und Reduzierer 2 wird 1 Datei erhalten.
Nach dem Zusammenführen und Sortieren wird Reducer über diese Dateien ausgeführt und die endgültige Ausgabe wird generiert.
Refer here for more detail about data flow from mapper to reducer
Danke. Die Ergebnisse aller Mapper werden also gruppiert. Wird diese Ausgabe in einer einzelnen Datei oder mehreren Dateien gespeichert und wo befinden sich diese Dateien? –
@shijiexu Diese Ausgabe wird in einem temporären Zwischenspeicher gespeichert, der in der Einstellung "mapreduce.cluster.temp.dir" definiert ist. Dieser Speicherort befindet sich außerhalb von HDFS, um Replikationsoverhead zu vermeiden. Dann nimmt Reducer diese Ausgaben auf und verarbeitet sie durch Mischen, Sortieren und Reduzieren der Bühne - https://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/mapreduce/Reducer.html – Alex