Ich habe mich gefragt, zwischen Partitionierer und Combiner, der zuerst läuft?
Ich war der Meinung, dass es zuerst der Partitiner und dann der Combiner ist und dann werden die Schlüssel zu verschiedenen Reduzierern umgeleitet, was wie der Partitionierer aussieht, und so bin ich verwirrt. Bitte hilf mir zu verstehen.
Die direkte Antwort auf Ihre Frage ist = & gt; KOMBINIERER
Details: Combiner kann in der Kartenphase als Mini-Reduzierer angesehen werden. Sie führen eine lokale Reduzierung der Mapper-Ergebnisse durch, bevor sie weiter verteilt werden. Sobald die Combiner-Funktionalität ausgeführt wurde, wird sie für weitere Arbeiten an den Reducer weitergeleitet.
wo wie
Der Partitionierer kommt in das Bild, wenn wir einen mehr als auf Reduzierer arbeiten. Der Partitionierer entscheidet also, welcher Reducer für einen bestimmten Schlüssel verantwortlich ist. Sie nehmen grundsätzlich das Mapper-Ergebnis (wenn Combiner verwendet wird, dann Combiner-Ergebnis) und senden es basierend auf dem Schlüssel an den zuständigen Reducer.
Zum besseren Verständnis können Sie das folgende Bild verwenden, das ich aus dem Yahoo Developer Tutorial auf Hadoop übernommen habe.
Hier ist das Tutorial .
Partition kommt zuerst.
Laut "Hadoop, dem definitiven Leitfaden", wird die Ausgabe von Mapper zuerst in den Speicherpuffer geschrieben und dann an den lokalen Ordner übergeben, wenn der Puffer überläuft. Die überlaufenden Daten werden nach Partitioner aufgeteilt und in jeder Partition wird das Ergebnis sortiert und kombiniert, wenn Combiner angegeben wird.
Sie können das Wordcount-MR-Programm einfach ändern, um es zu überprüfen. Mein Ergebnis ist: ("Der schnelle braune Fuchs sprang über einen faulen Hund")
Wort, Schritt, Zeit
Fuchs, Mapper, ********** 754
Fuchs, Partitionierer, ********** 754
Fuchs, Kombinierer, ********** 850
Fuchs, Reduzierer, ********** 904
Offensichtlich läuft Combiner nach Partitionierer.
combiner läuft vor partitiooner
Combiner wird nach map ausgeführt, um die Elementanzahl der Kartenausgabe zu reduzieren. So verringern Sie die Netzwerküberlastung. Reduziere Läufe nach dem Partitionierer
Combiner ist ein Kartenseitenreduzierer. Es bedeutet, dass der Reduzierer alles durch den Kombinierer durchführt. Die Hauptanwendung des Combiners ist eine Optimierung / Optimierung der Performance. Nachdem der Combiner den Code optimiert hat, trennt sich der Petent und hilft, mehrere Outputs zu erhalten. Combiner ist optional, aber für große Dateien sehr zu empfehlen.
Der Partitionierer teilt die Daten entsprechend der Anzahl der Reduzierungen und hängt von den Anforderungen ab, die die Ausgabe trennt. Zum Beispiel: Der Ausgang männlich, weiblich, separate 2 Ausgänge mit Partitionierer.
Erster Combiner wird kommen, dann kommt Partitionierer, beide kommen nur in Mapside, aber nicht in der Reducer-Seite.
In Hadoop - Die definitive Anleitung 3. Ausgabe, Seite 209, haben wir folgende Worte:
Vor dem Schreiben auf die Festplatte teilt der Thread die Daten zuerst in Partitionen auf, die den Reduzierungen entsprechen, an die sie letztendlich gesendet werden. Innerhalb jeder Partition führt der Hintergrundthread eine sortweise Sortierung nach Schlüssel durch, und wenn eine Kombiniererfunktion vorhanden ist, wird sie auf der Ausgabe der Sortierung ausgeführt. Die Ausführung der Combiner-Funktion ermöglicht eine kompaktere Kartenausgabe, sodass weniger Daten auf die lokale Festplatte geschrieben und an den Reducer übertragen werden müssen.
Jedes Mal, wenn der Speicherpuffer den Überlaufschwellenwert erreicht, wird eine neue Überlaufdatei erstellt. Nachdem der Map-Task seinen letzten Ausgabedatensatz geschrieben hat, könnte es mehrere Überlaufdateien geben. Bevor die Task beendet wird, werden die Überlaufdateien in eine einzelne partitionierte und sortierte Ausgabedatei zusammengeführt. Die Konfigurationseigenschaft io.sort.factor steuert die maximale Anzahl von Streams, die gleichzeitig zusammengeführt werden sollen. Der Standardwert ist 10.
Wenn mindestens drei Überlaufdateien vorhanden sind (festgelegt durch die Eigenschaft min.num.spills.for.combine), wird der Combiner erneut ausgeführt, bevor die Ausgabedatei geschrieben wird. Es sei daran erinnert, dass Kombinierer wiederholt über den Eingang laufen können, ohne das Endergebnis zu beeinflussen. Wenn es nur ein oder zwei Überläufe gibt, ist die potentielle Verringerung der Kartenausgabegröße den Overhead beim Aufrufen des Kombinierers nicht wert, so dass sie für diese Kartenausgabe nicht erneut ausgeführt wird. Der Kombinierer wird während der Verschmelzungsdatei ausgeführt.
So scheint es die Antwort zu sein:
Karte - & gt; Trennzeichen - & gt; Sortieren - & gt; Kombinierer - & gt; Verschütten - & gt; Kombinierer (falls verschüttet & gt; = 3) - & gt; Zusammenführen.
Jedoch in Apache Tutorial gibt es unter den Wörtern:
Die Mapper-Ausgänge werden sortiert und dann pro Reducer partitioniert.
Der Inhalt unterscheidet sich von der endgültigen Anleitung. Die Antwort hier scheint zu sein:
Karte - & gt; Sortieren - & gt; Kombinierer - & gt; Trennzeichen - & gt; Verschütten - & gt; Kombinierer (falls verschüttet & gt; = 3) - & gt; Zusammenführen.
Welcher ist richtig? Ich lehne mich an, um den späteren im Apache Tutorial zu akzeptieren, aber nicht ganz sicher.
Combiner ändert das Schlüsselwertpaar der Ausgabezuordnungsaufgabe nicht. Es kombiniert basierend auf demselben Schlüssel und gibt das gleiche Schlüssel / Liste-Wertpaar aus.
Partitionierer nimmt die Eingabe von map / combiner (falls vorhanden), segmentiert dann die Daten und kann ein neues K-Listenwert-Paar ausgeben.
so Karte - & gt; Kombinieren- & gt; Partition - & gt; Reduzieren.
Mapper - & gt; Kombinierer - & gt; Partitionar - & gt; Minderer
Tags und Links hadoop