Mapreduce Combiner

8

Ich habe einen einfachen mapreduce Code mit Mapper, Reducer und Combiner. Die Ausgabe vom Mapper wird an den Kombinierer übergeben. Aber zum Reduzierer wird, anstatt vom Kombinierer ausgegeben zu werden, die Ausgabe vom Abbilder übergeben.

Bitte helfen Sie

Code:

%Vor%

}

    
user2401464 26.11.2013, 09:22
quelle

4 Antworten

8

Es scheint, dass Sie wichtige Eigenschaften eines Combiners vergessen haben:

  

die Eingabearten für den Schlüssel / Wert und die Ausgabearten der   Schlüssel / Wert muss gleich sein.

Sie können keine Text/DoubleWritable aufnehmen und eine Text/Text zurückgeben. Ich schlage vor, dass Sie Text statt DoubleWritable verwenden und das korrekte Parsing in Combiner durchführen.

    
user987339 26.11.2013, 10:16
quelle
15

Die erste Regel von Combinern lautet: Gehen Sie nicht davon aus, dass der Combiner ausgeführt wird . Behandle den Kombinator nur als Optimierung .

Es ist nicht garantiert, dass der Combiner alle Ihre Daten durchläuft. In einigen Fällen, in denen die Daten nicht auf die Festplatte übertragen werden müssen, wird MapReduce den Combiner vollständig überspringen. Beachten Sie auch, dass der Combiner möglicherweise mehrfach über Teilmengen der Daten laufen kann! Es wird einmal pro Überlauf laufen.

In Ihrem Fall machen Sie diese schlechte Annahme. Sie sollten die Summe im Combiner UND im Reducer machen.

Sie sollten auch der Antwort von @ user987339 folgen. Der Ein- und Ausgang des Combiners muss identisch sein (Text, Double - & gt; Text, Double) und muss mit dem Ausgang des Mappers und dem Eingang des Reducers übereinstimmen.

    
Donald Miner 26.11.2013 15:01
quelle
1

Wenn eine Kombinationsfunktion verwendet wird, hat sie dieselbe Form wie die Reduzierungsfunktion (und ist eine Implementierung von Reducer), mit Ausnahme seiner Ausgabetypen sind der Zwischenschlüssel und Werttypen (K2 und V2), so dass sie die Reduce-Funktion einspeisen können: Karte: (K1, V1) → Liste (K2, V2) kombinieren: (K2, Liste (V2)) → Liste (K2, V2) reduzieren: (K2, Liste (V2)) → Liste (K3, V3) Oft sind die Funktionen zum Kombinieren und Reduzieren gleich, in diesem Fall ist K3 dasselbe wie K2 und V3 ist das gleiche wie V2.

    
Narsireddy 23.04.2015 13:07
quelle
0

Combiner funktioniert nicht immer, wenn Sie mapreduce ausführen.

Wenn es mindestens drei Überlaufdateien gibt (die Ausgabe des Mappers wird auf die lokale Festplatte geschrieben), wird der Combiner ausgeführt, so dass die Größe der Datei reduziert werden kann, so dass sie einfach übertragen werden kann, um Knoten zu reduzieren.

Die Anzahl der Überläufe, für die ein Combiner ausgeführt werden muss, kann über min.num.spills.for.combine property

festgelegt werden     
jintocvg 24.09.2014 13:45
quelle

Tags und Links