2012-03-26 10 views
1

Ich musste vor kurzem einen Job ausführen, bei dem alle Mapper abgeschlossen werden mussten, bevor die Ergebnisse an die Kombinationsstufe übergeben wurden (aufgrund der Struktur der verarbeiteten Dateien). Diese Funktion ist an den Minderer durch die folgende Konfiguration -MapReduce erfordert, dass alle Mapper vor der Kombinationsstufe fertig sind

// force 100% of the mappers to conclude before reducers start 
job.set("mapred.reduce.slowstart.completed.maps", "1.0"); 

ich keine ähnliche Konfiguration für die kombinieren Bühne finden konnten. Schließlich habe ich meinen Job in zwei Teile aufgeteilt, wobei die Mähdrescherstufe als Reduzierer fungierte und mein ursprünglicher Reduzierer an Job Nr. 2 weitergegeben wurde (Mapper2 übergibt einfach die Daten, ohne sie zu modifizieren).

Ich habe mich gefragt - gibt es eine Möglichkeit, die ich zu 100% Kartenabschluss vor dem Kombinieren konfigurieren? Vielen Dank.

Antwort

1

Es gibt keine Möglichkeit, dies zu steuern - der Combiner kann für eine bestimmte Karteninstanz ausgeführt werden oder auch nicht, tatsächlich kann der Combiner mehrere Male über die verschiedenen Überläufe Ihrer Kartendaten laufen.

Es gibt eine detailliertere Definition in Tom Whites Buch: "Hadoop die definitive guide":

http://books.google.com/books?id=Nff49D7vnJcC&pg=PA178&lpg=PA178&dq=hadoop+combiner+spill&source=bl&ots=IiesWqctTu&sig=V5b3Z2EVWp5JzIvc_Fzv1-AJerI&hl=en&sa=X&ei=QUJwT9XBCOna0QGOzpnlBg&ved=0CFMQ6AEwAw#v=onepage&q=hadoop%20combiner%20spill&f=false

So Ihre Kombinierer laufen kann, bevor Sie Ihre Karte selbst beendet

+0

So ist der Ansatz grundsätzlich sein sollte, Teile den Job und benutze einen Reducer, was ich dachte. Vielen Dank! – sa125

Verwandte Themen