Video: mapreduce in hadoop 2024
Nach der Map-Phase und vor dem Beginn der Reduce-Phase handelt es sich um einen Handoff-Prozess, der als shuffle bezeichnet wird. sortieren . Hier werden Daten von den Mapper-Tasks vorbereitet und zu den Knoten verschoben, an denen die Reduktionsaufgaben ausgeführt werden. Wenn die Mapper-Aufgabe abgeschlossen ist, werden die Ergebnisse nach Schlüssel sortiert, partitioniert, wenn mehrere Reduzierungen vorhanden sind, und dann auf die Festplatte geschrieben.
Sie können dieses Konzept in der folgenden Abbildung sehen, die den MapReduce-Datenverarbeitungsablauf und seine Interaktion mit den physischen Komponenten des Hadoop-Clusters zeigt. (Eine kurze Anmerkung: Daten im Speicher werden durch weiße Quadrate dargestellt, und auf der Festplatte gespeicherte Daten werden durch graue Quadrate dargestellt.)
Um den gesamten MapReduce-Prozess zu beschleunigen, werden die Daten sofort zu den Knoten der Reduzierungsaufgaben verschoben, um eine Flut von Netzwerkaktivitäten zu vermeiden, wenn die endgültige Mapper-Aufgabe ihre Arbeit beendet hat. Diese Übertragung findet statt, während die Mapper-Task ausgeführt wird, da die Ausgaben für jeden Datensatz - erinnern Sie sich - im Speicher einer wartenden Reducer-Task gespeichert werden. (Sie können konfigurieren, ob dies geschieht - oder nicht geschieht - und auch die Anzahl der beteiligten Threads.)
Beachten Sie, dass, obwohl eine Reducer-Aufgabe den größten Teil der Ausgabe der Mapper-Task hat, die Verarbeitung der reduzierenden Task erst beginnen kann, wenn alle Mapper-Tasks beendet wurden.
Um Szenarien zu vermeiden, bei denen die Leistung eines MapReduce-Jobs durch eine einzige Mapper-Task beeinträchtigt wird, die auf einem Slave-Knoten mit schlechter Leistung ausgeführt wird, verwendet das MapReduce-Framework ein Konzept mit der Bezeichnung spekulative Ausführung .
Für den Fall, dass einige Mapper-Aufgaben langsamer ausgeführt werden als vernünftigerweise, generiert der Application Master doppelte Aufgaben (in Hadoop 1 macht dies der JobTracker). Welche Aufgabe auch immer zuerst ausgeführt wird - das Duplikat oder das Original - seine Ergebnisse werden auf der Festplatte gespeichert und die andere Aufgabe wird beendet. Wenn Sie Ihre Jobs genau überwachen und sich fragen, warum mehr Mapper-Aufgaben ausgeführt werden als erwartet, ist dies ein wahrscheinlicher Grund.
Die Ausgabe von Mapper-Tasks wird nicht in HDFS geschrieben, sondern auf die lokale Festplatte des Slave-Knotens, auf dem die Mapper-Task ausgeführt wurde. Daher wird es nicht im gesamten Hadoop-Cluster repliziert.
Abgesehen von der Komprimierung der Ausgabe können Sie die Leistung potenziell steigern, indem Sie eine Combiner-Task ausführen. Diese einfache Taktik, die hier gezeigt wird, beinhaltet eine lokale Reduzierung der Ausgabe für einzelne Mapper-Aufgaben.
In den meisten Fällen ist keine zusätzliche Programmierung erforderlich, da Sie dem System mitteilen können, die Reduzierfunktion zu verwenden. Wenn Sie Ihre Reduzierfunktion nicht verwenden, müssen Sie sicherstellen, dass die Ausgabe der Combiner-Funktion identisch mit der der Reduzierfunktion ist.
Es ist Sache des MapReduce-Frameworks, ob die Combiner-Funktion einmal, mehrmals oder nie ausgeführt werden muss. Daher ist es entscheidend, dass der Code des Kombinierers sicherstellt, dass die endgültigen Ergebnisse nicht von mehreren Läufen beeinflusst werden. Durch Ausführen des Kombinierers kann ein Leistungsvorteil erzielt werden, indem die Menge an Zwischendaten verringert wird, die andernfalls über das Netzwerk übertragen werden müssten.
Dies senkt auch die Verarbeitungsmenge, die die Reduktionsaufgaben ausführen müssen. Sie führen hier eine zusätzliche Aufgabe aus, daher ist es möglich, dass jeder Leistungsgewinn vernachlässigbar ist oder sogar zu einer schlechteren Gesamtleistung führen kann. Ihre Laufleistung kann variieren, testen Sie dies daher sorgfältig.
Nachdem alle Ergebnisse der Mapper-Tasks in die Knoten der Reducer-Tasks kopiert wurden, werden diese Dateien zusammengeführt und sortiert.