Anzahl der Reduzierungen für 1 Aufgabe in MapReduce

8

Wie viele Reduzierer werden in einem typischen MapReduce-Setup (wie Hadoop) für eine Aufgabe verwendet, z. B. Wörter zählen? Mein Verständnis dieses MapReduce von Google bedeutet, dass nur 1 Reducer beteiligt ist. Ist das richtig?

Zum Beispiel teilt die Wortzählung die Eingabe in N Chunks auf, und N Map wird ausgeführt, wobei die Liste (Wort, #) erzeugt wird. Meine Frage ist, dass, sobald die Map-Phase abgeschlossen ist, nur eine Reduziererinstanz ausgeführt wird, um das Ergebnis zu berechnen? Oder wird es parallel laufende Reduzierungen geben?

    
Wei Shi 02.06.2011, 16:26
quelle

5 Antworten

13

Die einfache Antwort ist, dass die Anzahl der Reduzierungen nicht 1 sein muss und ja, Reduzierer können parallel laufen. Wie ich oben erwähnt habe, ist dies benutzerdefiniert oder abgeleitet.

Um die Dinge im Zusammenhang zu halten, werde ich in diesem Fall auf Hadoop verweisen, damit Sie eine Vorstellung davon haben, wie die Dinge funktionieren. Wenn Sie die Streaming-API in Hadoop (0.20.2) verwenden, müssen Sie explizit definieren, wie viele Reduzierungen Sie standardmäßig ausführen möchten. Es wird nur eine Reduzierungsaufgabe gestartet. Sie tun dies, indem Sie die Anzahl der Reduzierungen an das Argument -D mapred.reduce.tasks=# of reducers übergeben. Die Java-API versucht, die Anzahl der benötigten Reduzierungen abzuleiten, aber Sie können dies auch explizit festlegen. In beiden Fällen gibt es eine feste Obergrenze für die Anzahl der Reduzierungen, die Sie pro Knoten ausführen können und die in Ihrer mapred-site.xml -Konfigurationsdatei mit mapred.tasktracker.reduce.tasks.maximum festgelegt ist.

Zu einer eher konzeptuellen Anmerkung könnt ihr euch diesen Beitrag im hadoop Wiki ansehen, wo es darum geht, die Anzahl von Aufgaben zuordnen und reduzieren.

    
diliop 02.06.2011, 18:07
quelle
1

Das hängt ganz von der Situation ab. In einigen Fällen haben Sie keine Reduzierungen ... alles kann mapside gemacht werden. In anderen Fällen können Sie nicht vermeiden, einen Reduzierer zu haben, aber im Allgemeinen kommt dies in einem 2. oder 3. Map / Reduce-Job, der frühere Ergebnisse verdichtet. Im Allgemeinen möchten Sie jedoch viele Reduzierungen haben, sonst verlieren Sie viel von MapReduce! Bei der Wortzählung sind zum Beispiel die Ergebnisse Ihrer Mapper Paare. Diese Paare werden dann basierend auf dem Wort partitioniert, so dass jeder Reduzierer die gleichen Wörter erhält und Ihnen die ultimative Summe geben kann. Jeder Reduzierer gibt dann das Ergebnis aus. Wenn Sie möchten, könnten Sie dann einen anderen M / R-Job abfeuern, der all diese Dateien aufgenommen und verkettet hat - dieser Job würde nur einen Reduzierer haben.

    
A Question Asker 02.06.2011 17:59
quelle
1

Bei einem einfachen Wordcount-Beispiel wäre es sinnvoll, nur einen Reducer zu verwenden.
Wenn Sie als Ergebnis der Berechnung nur eine Zahl haben möchten, müssen Sie einen Reduzierer verwenden (2 oder mehr Reduzierer würden Ihnen 2 oder mehr Ausgabedateien geben).

Wenn dieses Reduzierstück lange braucht, können Sie daran denken, mehrere Reduzierstücke zu verketten, bei denen Reduzierstücke in der nächsten Phase die Ergebnisse früherer Reduzierstücke summieren würden.

    
wlk 02.06.2011 18:19
quelle
0

Die Reduzierungen laufen parallel. Die Anzahl der Reduzierungen, die Sie in Ihrem Job gesetzt haben, während Sie die Konfigurationsdatei mapred-site.xml ändern oder indem Sie den Reduzierer während der Ausführung des Jobs setzen oder Sie können ihn im Programm einstellen, außerdem wird die Anzahl der Reduzierer parallel laufen. Es ist nicht notwendig, es als 1 zu behalten. Standardmäßig ist der Wert 1.

    
kumari swati 08.04.2015 08:52
quelle
0

Der Standardwert ist 1. Wenn Sie Bienenstock oder Schwein betrachten, hängt die Anzahl der Reduzierung von der Abfrage, wie Gruppe, Summe .....

ab

Falls Ihr Mapreduce-Code verwendet wird, kann er in job / conf von setNumReduceTasks definiert werden.

%Vor%

Meistens ist es fertig, wenn Sie getPartition() überschreiben, d. h. Sie verwenden einen benutzerdefinierten Partitionierer

%Vor%

Eine Sache wird Ihnen auffallen, dass die Anzahl der Reduzierungen = die Anzahl der Teile in der Ausgabe ist.

Lassen Sie es mich wissen, wenn Sie Zweifel haben.

    
user3123372 07.12.2015 15:41
quelle

Tags und Links