2014-03-12 15 views
10

Im MapReduce-Framework wird für jeden vom Mapper erzeugten Schlüssel ein Reduzierer verwendet.Hadoop MapReduce: Erläuterung zur Anzahl der Reduzierungen

Sie würden also denken, dass die Angabe der Anzahl der Reduzierungen in Hadoop MapReduce keinen Sinn ergibt, da sie vom Programm abhängig ist. In Hadoop können Sie jedoch die Anzahl der zu verwendenden Reduzierungen angeben (-D mapred.reduce.tasks = Anzahl der Reduzierungen).

Was bedeutet das? Gibt der Parameterwert für die Anzahl der Reduzierungen an, wie viele Maschinenressourcen zu den Reduzierern anstatt der Anzahl der tatsächlich verwendeten Reduzierungen gehen?

Antwort

11

ein Minderer für jeden durch den Mapper generierten Schlüssel verwendet wird

Dieser Kommentar ist nicht korrekt. Ein Aufruf der Methode reduce() erfolgt für jeden vom Gruppenkomparator gruppierten Schlüssel. Ein Reducer (Task) ist ein Prozess, der null oder mehr Aufrufe zum Reduzieren() behandelt. Die Eigenschaft, auf die Sie verweisen, bezieht sich auf die Nummer des Reduzierers Aufgaben.

+1

Diese Antwort ist sehr hilfreich – Tommy

4

Um @Judge Mental (sehr genau) zu vereinfachen, beantworten Sie ein wenig: Eine Reducer-Aufgabe kann auf vielen Schlüsseln gleichzeitig arbeiten, aber der mapred.reduce.tasks = # -Parameter gibt an, wie viele gleichzeitige Reducer-Tasks für a ausgeführt werden spezifischer Job.

Ein Beispiel, wenn Ihre mapred.reduce.tasks = 10:
Sie haben 2.000 Schlüssel, jeder Schlüssel mit 50 Werten (für eine gleichmäßig verteilt 10.000 k: v-Paare). Jedes Reduzierstück sollte ungefähr 200 Schlüssel handhaben (1.000 k: v-Paare).

Ein Beispiel, wenn Ihre mapred.reduce.tasks = 20:
Sie haben 2.000 Schlüssel, jeder Schlüssel mit 50 Werten (für eine gleichmäßig verteilt 10.000 k: v-Paare). Jedes Reduzierstück sollte ungefähr 100 Tasten (500 k: v-Paare) handhaben.

Im obigen Beispiel gilt: Je weniger Tasten jeder Reduktor benötigt, desto schneller ist der Gesamtauftrag ... solange Sie die verfügbaren Reducer-Ressourcen im Cluster haben.

+1

Was passiert, wenn mein Mapper nur 1 Schlüssel ausgibt? Wird die Anzahl der Reduzierstücke keine Rolle spielen, da es zu wenige Schlüssel gibt, um die Arbeit unter Reduzierern aufzuteilen? – Bryan

+2

Dies wird als Datenschräglauf bezeichnet und kann je nach Datengröße ein Problem darstellen. Die häufigste Methode zum Lösen oder Mindern von Datenschräglauf ist das Erstellen einer benutzerdefinierten Partitionierung. Dies ermöglicht, dass die Daten auf eine andere Weise auf die Reduzierstücke verteilt werden. Es gibt eine anständige Beschreibung auf der Yahoo Hadoop Tutorial-Seite zu Partitionierungsdaten: http://developer.yahoo.com/hadoop/tutorial/module5.html#partitioning – JamCon

Verwandte Themen