2013-06-01 23 views
7

Jetzt habe ich eine 4-Phasen-MapReduce Job wie folgt:Chaining Multi-Reduzierungen in einem Hadoop MapReduce Job

Input-> Map1 -> Reduce1 -> Reducer2 -> Reduce3 -> Reduce4 -> Output 

ich feststellen, dass es ChainMapper Klasse in Hadoop, wo Kette mehrere Mapper in eine große Mapper, und speichern Sie die E/A-Kosten der Festplatte zwischen den Kartenphasen. Es gibt auch eine ChainReducer Klasse, aber es ist kein echter "Chain-Reducer". Es kann nur unterstützen, Arbeitsplätze wie:

[Map+/ Reduce Map*] 

ich weiß, ich vier MR Jobs für meine Aufgabe einstellen kann und die Standard-Einsatz-Mapper für die letzten drei Arbeitsplätze. Aber das kostet viel Festplatten-I/O, da Reducer das Ergebnis auf die Festplatte schreiben sollten, damit der folgende Mapper darauf zugreifen kann. Gibt es eine andere integrierte Hadoop-Funktion, um meine Reduzierstücke zu verketten, um die I/O-Kosten zu senken?

Ich verwende Hadoop 1.0.4.

+0

Ich wäre auch sehr daran interessiert, wenn es möglich ist. –

Antwort

2

Ich glaube nicht, dass Sie das O/P eines Reduzierers zu einem anderen Reduzierer geben können direkt. Ich hätte dafür gegangen:

Input-> Map1 -> Reduce1 -> 
     Identity mapper -> Reducer2 -> 
       Identity mapper -> Reduce3 -> 
         Identity mapper -> Reduce4 -> Output 

In Hadoop 2.X Serie, intern können Sie Kette Mapper vor Minderer mit ChainMapper und Kette Mapper nach Minderer mit ChainReducer.

+0

Was meinst du mit o/p? – Adelin

+1

@Adio bedeutet Ausgabe. –