Pfad für mehrere Ausgaben (Java - Hadoop - MapReduce)
Ich mache zwei MapReduce-Jobs und möchte, dass der zweite Job mein Ergebnis in zwei verschiedene Dateien in zwei verschiedenen Verzeichnissen schreibt. Ich möchte etwas Ähnliches wie FileInputFormat.addInputPath (.., mehrere Eingabepfade) in gewissem Sinne, aber für die Ausgabe.
Ich bin völlig neu in MapReduce und habe eine Besonderheit darin, meinen Code in Hadoop 0.21.0 zu schreiben, das ich verwendecontext.write(..)
in meinem Schritt "Reduzieren", aber ich verstehe nicht, wie ich mehrere Ausgabepfade steuern kann ...
Vielen Dank für Ihre Zeit !
Mein reduCode aus meinem ersten Job, um Ihnen zu zeigen, dass ich nur weiß, wie man etwas ausgibt (er wird in eine /../part* Datei geschrieben. Nun möchte ich aber in der Lage sein, zwei genaue Dateien für unterschiedliche Ausgaben anzugeben, abhängig von der Schlüssel) :
public static class NormalizeReducer extends Reducer<LongWritable, NetflixRating, LongWritable, NetflixUser> {
public void reduce(LongWritable key, Iterable<NetflixRating> values, Context context) throws IOException, InterruptedException {
NetflixUser user = new NetflixUser(key.get());
for(NetflixRating r : values) {
user.addRating(new NetflixRating(r));
}
user.normalizeRatings();
user.reduceRatings();
context.write(key, user);
}
}
BEARBEITEN: Also habe ich die Methode im letzten Kommentar durchgeführt, wie du erwähnt hast, Amar. Ich weiß nicht, ob es funktioniert, ich habe ein anderes Problem mit meinem HDFS, aber bevor ich es vergesse, wollen wir meine Entdeckungen der Zivilisation zuliebe hier einfügen:
MultipleOutputs fungiert NICHT anstelle von FormatOutputFormat. Sie definieren einen Ausgabepfad mit FormatOutputFormat und können dann mit mehreren MultipleOutputs viele weitere hinzufügen.addNamedOutput-Methode: Die Zeichenfolge namedOutput ist nur ein Wort, das beschreibt.Sie definieren den Pfad tatsächlich in der write-Methode, dem String baseOutputPath arg.