Wann beginnen reduzierte Aufgaben in Hadoop?


81

Wann beginnen in Hadoop reduzierte Aufgaben? Beginnen sie, nachdem ein bestimmter Prozentsatz (Schwellenwert) der Mapper abgeschlossen ist? Wenn ja, ist dieser Schwellenwert festgelegt? Welche Art von Schwelle wird normalerweise verwendet?

Antworten:


205

Die Reduktionsphase besteht aus 3 Schritten: Mischen, Sortieren, Reduzieren. Beim Mischen werden die Daten vom Reduzierer von jedem Mapper erfasst. Dies kann passieren, während Mapper Daten generieren, da es sich nur um eine Datenübertragung handelt. Auf der anderen Seite kann das Sortieren und Reduzieren erst gestartet werden, wenn alle Mapper fertig sind. Anhand des Prozentsatzes für die Fertigstellung des Reduzierers können Sie erkennen, welche MapReduce-Aktion ausgeführt wird: 0-33% bedeutet, dass der Shuffle ausgeführt wird, 34-66% sind sortiert, 67% -100% sind reduziert. Dies ist der Grund, warum Ihre Reduzierer manchmal bei 33% "stecken bleiben" - es wartet darauf, dass die Mapper fertig sind.

Reduzierungen beginnen mit dem Mischen basierend auf einem Schwellenwert für den Prozentsatz der fertiggestellten Mapper. Sie können den Parameter ändern, damit die Reduzierungen früher oder später gestartet werden.

Warum ist es gut, die Reduzierungen frühzeitig zu starten? Weil es die Datenübertragung von den Mappern zu den Reduzierern im Laufe der Zeit verteilt, was eine gute Sache ist, wenn Ihr Netzwerk der Engpass ist.

Warum ist es schlecht, die Reduzierungen früh zu starten? Weil sie "Slots" machen, reduzieren sie die Slots, während sie nur Daten kopieren und darauf warten, dass die Mapper fertig sind. Ein anderer Job, der später beginnt und tatsächlich die reduzierten Slots verwendet, kann sie jetzt nicht verwenden.

Sie können den Start der Reduzierungen anpassen, indem Sie den Standardwert von mapred.reduce.slowstart.completed.mapsin ändern mapred-site.xml. Ein Wert von 1.00wartet darauf, dass alle Mapper fertig sind, bevor die Reduzierungen gestartet werden. Ein Wert von 0.0startet die Reduzierungen sofort. Ein Wert von 0.5startet die Reduzierungen, wenn die Hälfte der Mapper vollständig ist. Sie können auch mapred.reduce.slowstart.completed.mapsvon Job zu Job wechseln . In neuen Versionen von Hadoop (mindestens 2.4.1) wird der Parameter aufgerufenmapreduce.job.reduce.slowstart.completedmaps (danke Benutzer yegor256).

Normalerweise möchte ich mapred.reduce.slowstart.completed.mapsoben bleiben, 0.9wenn auf dem System jemals mehrere Jobs gleichzeitig ausgeführt werden. Auf diese Weise verschlingt der Job keine Reduzierungen, wenn sie nur Daten kopieren. Wenn immer nur ein Job gleichzeitig ausgeführt wird, ist dies 0.1wahrscheinlich angemessen.


3
Weißt du, wo ich mehr über das lesen kann, was du erwähnt hast?
Tagträumer

1
Slowstart ist meiner Meinung nach ziemlich schlecht dokumentiert ... ebenso wie die meisten obskuren Konfigurationsparameter.
Donald Miner

5
Gute Antwort @Donald Miner. Ich möchte nur hinzufügen, dass in der neueren Hadoop-Version (ich verwende 1.1.2) der Wert standardmäßig 0,05 ist. hadoop.apache.org/docs/r1.1.2/mapred-default.html
Sufinawaz

@Donald Ich verwende die Version 0.20.205.0 von hadoop und setze den Parameter "mapred.reduce.slowstart.completed.maps" in mapred-site.xml auf 0.1, aber der Reduzierer wird nach Abschluss der Mapper noch ausgeführt. Darf ich wissen warum?
Harry Potter

3
@nishm Ich denke, Sie verwirren die Terminologie der gesamten Reduktionsphase im Vergleich zu Reduzieren Sie nur innerhalb der Reduktionsphase. Die Reduktionsphase ist das Mischen, Sortieren und Reduzieren. Slowstart gibt an, wann die Gesamtphase gestartet werden soll. Sie haben Recht, dass die Reduzierung innerhalb der Reduktionsphase erst beginnt, wenn die Mapper fertig sind.
Donald Miner

5

Die Reduktionsphase kann lange vor dem Aufruf eines Reduzierers beginnen. Sobald "ein" Mapper den Job beendet, werden die generierten Daten sortiert und gemischt (einschließlich Aufruf von Combiner und Partitionierer). Die "Phase" des Reduzierers beginnt in dem Moment, in dem die Datenverarbeitung nach dem Mapper gestartet wird. Wenn diese Verarbeitung abgeschlossen ist, werden Sie Fortschritte beim Prozentsatz der Reduzierungen sehen. Es wurde jedoch noch keiner der Reduzierer hinzugezogen. Abhängig von der Anzahl der verfügbaren / verwendeten Prozessoren, der Art der Daten und der Anzahl der erwarteten Reduzierungen möchten Sie den Parameter möglicherweise wie oben von @ Donald-Miner beschrieben ändern.


1

Soweit ich weiß, beginnt die Phase "Reduzieren" mit der Kartenphase und verbraucht weiterhin die Aufzeichnung von Karten. Da es jedoch nach der Kartenphase eine Sortier- und Mischphase gibt, müssen alle Ausgänge sortiert und an den Reduzierer gesendet werden. Logischerweise können Sie sich vorstellen, dass die Reduzierungsphase erst nach der Kartenphase beginnt, aber aus Leistungsgründen werden Reduzierungen auch mit den Mappern initialisiert.


0

Der für die Reduzierungsphase angezeigte Prozentsatz entspricht tatsächlich der Menge der Daten, die aus den Kartenausgängen in die Reduzierereingabeverzeichnisse kopiert wurden. Um zu wissen, wann dieser Kopiervorgang beginnt? Es ist eine Konfiguration, die Sie wie oben gezeigt einstellen können. Sobald alle Daten in Reduzierungen kopiert wurden (dh 100% reduzieren), beginnen die Reduzierungen zu arbeiten und können daher "100% reduzieren" einfrieren, wenn Ihr Reduzierungscode E / A- oder CPU-intensiv ist.


0

Reduzieren startet erst, nachdem alle Mapper ihre Aufgabe gefischt haben. Reduzieren muss mit allen Mappern kommunizieren, damit es warten muss, bis der letzte Mapper seine Aufgabe beendet hat. Der Mapper beginnt jedoch mit der Datenübertragung, sobald er seine Aufgabe abgeschlossen hat.


-1

Betrachten Sie ein WordCount-Beispiel, um besser zu verstehen, wie die Map-Reduction-Aufgabe funktioniert. Angenommen, wir haben eine große Datei, beispielsweise einen Roman, und unsere Aufgabe besteht darin, die Häufigkeit zu ermitteln, mit der jedes Wort in der Datei vorkommt. Da die Datei groß ist, kann sie in verschiedene Blöcke unterteilt und in verschiedenen Arbeitsknoten repliziert werden. Der Wortzähljob ​​besteht aus Zuordnungs- und Reduzierungsaufgaben. Die Zuordnungsaufgabe nimmt jeden Block als Eingabe und erzeugt ein Zwischenschlüssel-Wert-Paar. In diesem Beispiel würde der Mapper während der Verarbeitung eines Blocks zu Zwischenergebnissen der Form (word1, count1), (word2, count2) usw. führen, da wir die Anzahl der Vorkommen von Wörtern zählen. Das Zwischenergebnis aller Mapper ist durchlief eine Shuffle-Phase, die das Zwischenergebnis neu ordnet.

Angenommen, unsere Kartenausgabe von verschiedenen Mappern hat die folgende Form:

Karte 1: - (ist, 24) (war, 32) (und, 12)

Karte 2: - (meine, 12) (ist, 23) (war, 30)

Die Kartenausgänge sind so sortiert, dass dem gleichen Reduzierer dieselben Schlüsselwerte zugewiesen werden. Hier würde es bedeuten, dass die Schlüssel, die is, was usw. entsprechen, denselben Reduzierer haben. Es ist der Reduzierer, der die endgültige Ausgabe erzeugt, was in diesem Fall sein würde: - (und, 12) (ist, 47) (my, 12 ) (war 62)


Behandelt nicht die Frage von OP, wann der Reduzierer startet.
Sai Kiriti Badam

-1

Reduzieraufgaben beginnen erst nach completionallen Mappern.

Die Datenübertragung erfolgt jedoch nach eachMap. Eigentlich ist es eine Pull-Operation.

Das bedeutet, dass jedes Mal, wenn der Reduzierer jede Mappask fragt, ob er Daten hat, die von Map abgerufen werden können. Wenn er feststellt, dass ein Mapper seine Aufgabe erfüllt hat, zieht der Reduzierer die Zwischendaten.

Die Zwischendaten von Mapper werden in gespeichert disk. Die Datenübertragung von Mapper zu Reduce erfolgt über das Netzwerk ( Data Localitywird in der Reduce-Phase nicht beibehalten).


-2

Wenn Mapper seine Aufgabe beendet hat, startet Reducer seinen Job, um die Daten zu reduzieren. Dies ist ein Mapreduce-Job.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.