In der Map Reduce-Programmierung hat die Reduktionsphase das Mischen, Sortieren und Reduzieren als Unterteile. Sortieren ist eine kostspielige Angelegenheit.
Was ist der Zweck der Misch- und Sortierphase im Reduzierer in der Map Reduce-Programmierung?
Antworten:
Zuerst
shuffling
geht es darum, Daten von den Mappern zu den Reduzierern zu übertragen. Ich denke, es ist offensichtlich, dass dies für die Reduzierer notwendig ist, da sie sonst keine Eingabe (oder Eingabe von jedem Mapper) erhalten könnten. . Das Mischen kann bereits vor Abschluss der Kartenphase beginnen, um Zeit zu sparen. Aus diesem Grund wird ein Reduzierungsstatus von mehr als 0% (aber weniger als 33%) angezeigt, wenn der Kartenstatus noch nicht 100% beträgt.Sorting
spart Zeit für den Reduzierer und hilft ihm leicht zu erkennen, wann eine neue Reduzierungsaufgabe beginnen sollte. Es wird einfach eine neue Reduzierungsaufgabe gestartet, wenn der nächste Schlüssel in den sortierten Eingabedaten anders ist als der vorherige, um es einfach auszudrücken. Jede Reduktionsaufgabe benötigt eine Liste von Schlüssel-Wert-Paaren, muss jedoch die Methode redu () aufrufen, die eine Eingabe für die Schlüsselliste (Wert) akzeptiert, sodass Werte nach Schlüssel gruppiert werden müssen. Dies ist einfach, wenn die Eingabedaten in der Kartenphase (lokal) vorsortiert und in der Reduzierungsphase einfach zusammengeführt werden (da die Reduzierer Daten von vielen Mappern erhalten).Partitioning
, die Sie in einer der Antworten erwähnt haben, ist ein anderer Prozess. Es bestimmt, in welchem Reduzierer ein (Schlüssel-, Wert-) Paar, Ausgabe der Kartenphase, gesendet wird. Der Standard-Partitionierer verwendet ein Hashing für die Schlüssel, um sie an die Reduzierungsaufgaben zu verteilen. Sie können es jedoch überschreiben und Ihren eigenen benutzerdefinierten Partitionierer verwenden.Eine gute Informationsquelle für diese Schritte ist dieses Yahoo-Tutorial .
Eine schöne grafische Darstellung davon ist die folgende (Shuffle wird in dieser Abbildung als "Kopie" bezeichnet):
Beachten Sie, dass
shuffling
undsorting
überhaupt nicht ausgeführt werden, wenn Sie Nullreduzierer angeben (setNumReduceTasks (0)). Dann stoppt der MapReduce-Job in der Kartenphase, und die Kartenphase enthält keine Sortierung (sodass selbst die Kartenphase schneller ist).UPDATE: Da Sie nach etwas Offiziellerem suchen, können Sie auch Tom Whites Buch "Hadoop: The Definitive Guide" lesen. Hier ist der interessante Teil für Ihre Frage.
Tom White ist seit Februar 2007 ein Apache Hadoop-Committer und Mitglied der Apache Software Foundation. Ich denke, es ist ziemlich glaubwürdig und offiziell ...
quelle
Lassen Sie uns die wichtigsten Phasen des Mapreduce-Programms noch einmal betrachten.
Die Kartenphase wird von Mappern durchgeführt. Mapper werden mit unsortierten Eingabe-Schlüssel / Wert-Paaren ausgeführt. Jeder Mapper gibt für jedes Eingabeschlüssel / Wert-Paar null, eins oder mehrere Ausgabeschlüssel / Wert-Paare aus.
Die Mähdrescherphase wird von Kombinierern durchgeführt. Der Kombinierer sollte Schlüssel / Wert-Paare mit demselben Schlüssel kombinieren. Jeder Kombinierer kann null, einmal oder mehrmals ausgeführt werden.
Die Shuffle- und Sortierphase wird vom Framework durchgeführt. Daten von allen Mappern werden nach dem Schlüssel gruppiert, auf Reduzierungen aufgeteilt und nach dem Schlüssel sortiert. Jeder Reduzierer erhält alle Werte, die demselben Schlüssel zugeordnet sind. Der Programmierer kann benutzerdefinierte Vergleichsfunktionen zum Sortieren und einen Partitionierer zum Aufteilen von Daten bereitstellen .
Der Partitionierer entscheidet, welcher Reduzierer ein bestimmtes Schlüsselwertpaar erhält.
Der Reduzierer erhält sortierte Schlüssel / [Werteliste] -Paare, sortiert nach dem Schlüssel. Die Werteliste enthält alle Werte mit demselben Schlüssel, die von Mappern erstellt wurden. Jeder Reduzierer gibt für jedes Eingangsschlüssel / Wert-Paar null, einen oder mehrere Ausgangsschlüssel / Wert-Paare aus .
Schauen Sie sich zum besseren Verständnis diesen javacodegeeks- Artikel von Maria Jurcovicova und den mssqltips- Artikel von Datta an
Unten ist das Bild aus dem Artikel von safaribooksonline
quelle
ie
Zeichenfolgen unter Reduzierer und Ausgabe sollten eigentlich seinis
.Ich dachte daran, nur einige Punkte hinzuzufügen, die in den obigen Antworten fehlen. Dieses Diagramm von hier zeigt deutlich, was wirklich los ist.
Wenn ich noch einmal den wahren Zweck von
Aufteilen: Verbessert die parallele Verarbeitung, indem die Verarbeitungslast auf verschiedene Knoten (Mapper) verteilt wird, wodurch die Gesamtverarbeitungszeit gespart wird.
Kombinieren: Verkleinert die Ausgabe jedes Mappers. Dies würde den Zeitaufwand für das Verschieben der Daten von einem Knoten auf einen anderen sparen.
Sortieren (Mischen & Sortieren): Erleichtert der Laufzeit das Planen (Spawn / Start) neuer Reduzierungen, wobei beim Durchlaufen der Liste sortierter Elemente immer dann, wenn sich der aktuelle Schlüssel vom vorherigen unterscheidet, ein neuer Reduzierer erzeugt werden kann .
quelle
Einige der Datenverarbeitungsanforderungen müssen überhaupt nicht sortiert werden. Syncsort hatte die Sortierung in Hadoop steckbar gemacht. Hier ist ein schöner Blog von ihnen zum Sortieren. Das Verschieben der Daten von den Mappern zu den Reduzierern wird als Mischen bezeichnet. Weitere Informationen hierzu finden Sie in diesem Artikel.
quelle
Ich habe immer angenommen, dass dies notwendig ist, da die Ausgabe vom Mapper die Eingabe für den Reduzierer ist. Daher wurde sie nach dem Schlüsselbereich sortiert und dann für jede Reduzierereingabe in Buckets aufgeteilt. Sie möchten sicherstellen, dass alle gleichen Werte eines Schlüssels im selben Eimer landen, der zum Reduzierer geht, damit sie zusammen reduziert werden. Es macht keinen Sinn, K1, V2 und K1, V4 an verschiedene Reduzierstücke zu senden, da diese zusammen sein müssen, um reduziert zu werden.
Versuchte es so einfach wie möglich zu erklären
quelle
Das Mischen ist der Prozess, bei dem Zwischendaten von Mappern an 0,1 oder mehr Reduzierer übertragen werden. Jedes Reduzierstück erhält je nach Anzahl der Reduzierstücke (für eine ausgeglichene Last) einen oder mehrere Schlüssel und die zugehörigen Werte. Ferner werden die jedem Schlüssel zugeordneten Werte lokal sortiert.
quelle
Es gibt nur zwei Dinge, die MapReduce NATIVELY macht: Sortieren und (nach Sortieren implementiert) skalierbares GroupBy.
Die meisten Anwendungen und Entwurfsmuster über MapReduce basieren auf diesen beiden Vorgängen, die durch Mischen und Sortieren bereitgestellt werden.
quelle
Dies ist eine gute Lektüre. Ich hoffe es hilft. In Bezug auf die Sortierung, die Sie betreffen, denke ich, dass dies für den Zusammenführungsvorgang im letzten Schritt von Map gilt. Wenn der Kartenvorgang abgeschlossen ist und das Ergebnis auf die lokale Festplatte geschrieben werden muss, werden die aus dem Puffer generierten Teilungen mehrfach zusammengeführt. Für einen Zusammenführungsvorgang ist es hilfreich, jede Partition in Advanced zu sortieren.
quelle
Nun, in Mapreduce gibt es zwei wichtige Sätze namens Mapper und Reducer. Beide sind zu wichtig, aber Reducer ist obligatorisch. In einigen Programmen sind Reduzierungen optional. Kommen Sie nun zu Ihrer Frage. Mischen und Sortieren sind zwei wichtige Vorgänge in Mapreduce. Das erste Hadoop-Framework verwendet strukturierte / unstrukturierte Daten und unterteilt die Daten in Schlüssel, Wert.
Jetzt trennt das Mapper-Programm die Daten und ordnet sie in zu verarbeitenden Schlüsseln und Werten an. Generieren Sie Werte für Schlüssel 2 und Wert 2. Diese Werte sollten in der richtigen Reihenfolge verarbeitet und neu angeordnet werden, um die gewünschte Lösung zu erhalten. Jetzt wird dieses Mischen und Sortieren in Ihrem lokalen System durchgeführt (Framework kümmert sich darum) und im lokalen System verarbeitet, nachdem das Prozess-Framework die Daten im lokalen System bereinigt hat. OK
Hier verwenden wir Combiner und Partition , um diesen Shuffle- und Sortierprozess zu optimieren. Nach ordnungsgemäßer Anordnung werden diese Schlüsselwerte an Reducer übergeben, um die gewünschte Client-Ausgabe zu erhalten. Schließlich erhält der Reduzierer die gewünschte Leistung.
K1, V1 -> K2, V2 (wir werden das Programm Mapper schreiben), -> K2, V '(hier werden die Daten gemischt und weich gemacht) -> K3, V3 Generieren Sie die Ausgabe. K4, V4.
Bitte beachten Sie, dass alle diese Schritte nur logisch sind und nicht die Originaldaten ändern.
Ihre Frage: Was ist der Zweck der Misch- und Sortierphase im Reduzierer in der Map Reduce-Programmierung?
Kurze Antwort: Um die Daten zu verarbeiten, um die gewünschte Ausgabe zu erhalten. Beim Mischen werden die Daten aggregiert, beim Reduzieren wird die erwartete Ausgabe abgerufen.
quelle