2009-05-20 10 views
6

Gibt es eine Möglichkeit, die Ausgabedateinamen eines Hadoop Streaming-Jobs zu steuern? Insbesondere möchte ich den Inhalt und den Namen meiner Job-Ausgabedateien von den Ket Reducer-Ausgaben organisiert werden - jede Datei würde nur Werte für einen Schlüssel enthalten und der Name wäre der Schlüssel.Wie kontrolliere ich den Namen und den Inhalt der Ausgabedateien eines Hadoop-Streaming-Jobs?

Update: Nur die Antwort gefunden - Verwenden Sie eine Java-Klasse, die von MultipleOutputFormat abgeleitet ist, da das Auftragsausgabeformat die Steuerung der Ausgabedateinamen ermöglicht. http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

Ich habe keine Proben für diese da draußen gesehen ... Kann jemand auf eine Hadoop Streaming Probe weisen darauf hin, dass die Verwendung eines benutzerdefinierten Ausgabeformat Java-Klasse macht?

Antwort

8

Die Verwendung einer Java-Klasse, die von MultipleOutputFormat abgeleitet wird, als Ausgabeformat für Jobs ermöglicht die Steuerung der Ausgabedateinamen. http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

Bei der Verwendung von Hadoop Streaming, da nur ein JAR unterstützt Sie haben tatsächlich die Streaming-Glas-Gabel und Ihre neue Ausgabeformat Klassen in ihnen Arbeitsplätzen für das Streaming der Lage sein, es zu verweisen ...

EDIT: Ab Version 0.20.2 von hadoop dieser Klasse ist veraltet und Sie sollten jetzt verwenden: http://hadoop.apache.org/docs/mapreduce/current/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

+1

Link zu neuen Dokumenten unterbrochen –

-1

Im Allgemeinen würde Hadoop das gesamte Verzeichnis als Ausgabe und nicht als einzelne Datei betrachten. Es gibt keine Möglichkeit, den Dateinamen direkt zu steuern, egal ob Sie Streaming- oder normale Java-Jobs verwenden.

Nichts hält Sie jedoch davon ab, diese Aufteilung und Umbenennung selbst durchzuführen, nachdem der Job beendet ist. Sie können $ HADOOP dfs -cat Pfad/zu/Ihrem/output/directory/part- *, und pipe das zu einem Skript von Ihnen, die Inhalte durch Schlüssel teilt und schreibt sie in neue Dateien.

+0

Im allgemeinen, das ist nicht der Ansatz, den Sie nehmen möchten. –