it-swarm.com.de

hadoop map reduziert die sekundärsortierung

Kann mir jemand erklären, wie die sekundäre Sortierung in hadoop funktioniert?
Warum muss man GroupingComparator verwenden und wie funktioniert es in hadoop?

Ich ging den unten angegebenen Link durch und bekam Zweifel, wie Groupcomapator funktioniert.
Kann mir jemand erklären, wie der Gruppierungsvergleich funktioniert?

http://www.bigdataspeak.com/2013/02/hadoop-wie-to-do-secondary-sort-on_25.html

21
user1585111

Gruppierungsvergleicher

Sobald die Daten einen Reduzierer erreichen, werden alle Daten nach Schlüssel gruppiert. Da wir einen zusammengesetzten Schlüssel haben, müssen wir sicherstellen, dass Datensätze ausschließlich nach dem natürlichen Schlüssel gruppiert werden. Dies wird durch das Schreiben eines benutzerdefinierten GroupPartitioner erreicht. Wir haben ein Comparator-Objekt, das nur das Feld yearMonth der TemperaturePair-Klasse berücksichtigt, um die Datensätze zusammenzufassen.

public class YearMonthGroupingComparator extends WritableComparator {

    public YearMonthGroupingComparator() {
        super(TemperaturePair.class, true);
    }

    @Override
    public int compare(WritableComparable tp1, WritableComparable tp2) {
        TemperaturePair temperaturePair = (TemperaturePair) tp1;
        TemperaturePair temperaturePair2 = (TemperaturePair) tp2;
        return temperaturePair.getYearMonth().compareTo(temperaturePair2.getYearMonth());
    }
}

Hier sind die Ergebnisse der Ausführung unseres sekundären Sortierjobs:

new-Host-2:sbin bbejeck$ hdfs dfs -cat secondary-sort/part-r-00000

190101 -206

190102 -333

190103 - 272

190104 -61

190105 -33

190106 44

190107 72

190108 44

190109 17

190110–33

190111–217

190112–300

Das Sortieren von Daten nach Wert ist zwar kein allgemeines Bedürfnis, aber es ist ein schönes Werkzeug, wenn Sie es in Ihrer Hosentasche haben. Darüber hinaus haben wir uns mit den inneren Partitionen von Hadoop eingehend befassen können, indem wir mit benutzerdefinierten Partitionierungsprogrammen und Gruppen-Partitionierungsprogrammen arbeiten. Siehe auch diesen Link ..Wozu dient der Gruppierungsvergleicher in der Hadoop-Map?

16
Deepika C P

Ich finde es leicht, bestimmte Konzepte mit Hilfe von Diagrammen zu verstehen, und dies ist sicherlich einer von ihnen.

Nehmen wir an, unsere sekundäre Sortierung basiert auf einem zusammengesetzten Schlüssel, der aus Nachname und Vorname besteht.

Composite Key

Wenn der zusammengesetzte Schlüssel aus dem Weg ist, sehen wir uns jetzt den sekundären Sortiermechanismus an

Secondary Sorting Steps

Der Partitionierer und der Gruppenvergleicher verwenden nur natural key , der Partitionierer verwendet sie, um alle Datensätze mit demselben natürlichen Schlüssel zu einem einzigen Reduzierer zu kanalisieren. Diese Partitionierung erfolgt in der Map-Phase. Daten aus verschiedenen Map-Aufgaben werden von Reduktionen empfangen, wo sie gruppiert werden und dann an die Reduktionsmethode gesendet. In dieser Gruppierung erscheint der Gruppenvergleicher. Wenn wir nicht einen benutzerdefinierten Gruppenvergleicher angegeben hätten, hätte Hadoop die Standardimplementierung verwendet, die den gesamten zusammengesetzten Schlüssel berücksichtigt hätte, was zu falschen Ergebnissen geführt hätte.

Übersicht der MR-Schritte

enter image description here

44
Sudarshan

Hier ist ein Beispiel für die Gruppierung. Betrachten Sie einen zusammengesetzten Schlüssel (a, b) und seinen Wert v. Und nehmen wir an, dass Sie nach dem Sortieren unter anderem mit der folgenden Gruppe von (Schlüssel-, Wert-) Paaren enden:

(a1, b11) -> v1
(a1, b12) -> v2
(a1, b13) -> v3

Mit dem Standardgruppenvergleicher ruft das Framework die reduce-Funktion dreimal mit entsprechenden (Schlüssel-, Wert-) Paaren auf, da alle Schlüssel unterschiedlich sind. Wenn Sie jedoch einen eigenen benutzerdefinierten Gruppenvergleicher bereitstellen und ihn so definieren, dass er nur von a abhängt, wobei b ignoriert wird, kommt das Framework zu dem Schluss, dass alle Schlüssel in dieser Gruppe gleich sind, und ruft die reduzierte Funktion nur einmal mit dem folgenden Schlüssel und dem auf Liste von Werten:

(a1, b11) -> <v1, v2, v3> 

Es ist zu beachten, dass nur der erste zusammengesetzte Schlüssel verwendet wird und dass b12 und b13 "verloren" sind, d. H. Nicht an den Reduzierer übergeben werden.

In dem bekannten Beispiel aus dem Buch "Hadoop", das die maximale Temperatur nach Jahr berechnet, ist a das Jahr und b 's Temperaturen sind in absteigender Reihenfolge sortiert. Daher ist b11 die gewünschte maximale Temperatur und Sie interessieren sich nicht für andere bs. Die Reduzierfunktion schreibt nur die empfangenen (a1, b11) als Lösung für dieses Jahr.

In Ihrem Beispiel von "bigdataspeak.com" sind alle Variablen vom Typ b im Reduzierer erforderlich, sie stehen jedoch als Teile der entsprechenden Werte (Objekte) v zur Verfügung.

Auf diese Weise können Sie, indem Sie Ihren Wert oder seinen Teil in den Schlüssel aufnehmen, mit Hadoop nicht nur Ihre Schlüssel, sondern auch Ihre Werte sortieren.

Hoffe das hilft.

15
P. B. M.

Ein Partitionierer stellt lediglich sicher, dass ein Reducer alle zu einem Schlüssel gehörenden Datensätze erhält, ändert jedoch nicht die Tatsache, dass der Reducer innerhalb der Partition nach Schlüssel gruppiert.

Im Falle einer sekundären Sortierung bilden wir zusammengesetzte Schlüssel. Wenn wir das Standardverhalten beibehalten, wird die Gruppierungslogik die Schlüssel als unterschiedlich betrachten.

Wir müssen also die Gruppierung kontrollieren. Daher müssen wir den Rahmen angeben, der auf Basis des natürlichen Schlüssels und nicht des zusammengesetzten Schlüssels gruppiert werden soll. Daher muss der Gruppierungsvergleicher für denselben verwendet werden.

1
Raghavi Ravi

Die oben genannten Beispiele haben eine gute Erklärung. Lassen Sie mich das vereinfachen. Wir müssen drei Hauptschritte ausführen.

  1. Mapout sollte sein (Schlüssel + Wert, Wert)
  2. Wenn wir uns Key & Value angeschlossen haben. Trotzdem benötigen wir einen Mechanismus, um sowohl nach dem ursprünglichen Schlüssel als auch nach dem Wert zu sortieren. Deshalb würden wir einen benutzerdefinierten Vergleicher hinzufügen.
  3. Jetzt werden die Daten nach dem ursprünglichen Schlüssel sortiert. Wenn wir diese Daten jedoch an das Reduzierelement senden, kann nicht garantiert werden, dass alle Werte eines bestimmten Schlüssels an ein Reduzierstück gesendet werden, da wir Schlüssel + Wert als Schlüssel verwenden. Um sicherzugehen, würden wir einen Gruppenvergleicher hinzufügen.
0
abhay