2016-06-02 22 views
0

Ich habe eine Reihe von Daten, auf denen ich den Multispeicherbefehl auf Spalte 'Typ' lief und jetzt habe ich diese Pfade in hdfs: "/output/type1/ " "/output/Typ2/", "/output/Typ3/" usw.Molchausgabe von Multistorage angehängt werden, wenn ich es jeden Tag ausführen

Nun Everyday i ein Skript mit multistorage Befehl auf Spalte 'Typ' laufen, um" /tmp/type1/ "," /tmp/type2/ "," /tmp/type3/ "usw. (Typen können hier entweder < oder = die Typen in der Masterausgabe sein, die bereits vorhanden sind).

Da Pig es mir nicht erlaubt, den Ausgabepfad eines bereits vorhandenen Verzeichnisses anzugeben, ist mein Skript, das jeden Tag ausgeführt wird,/tmp /. Gibt es eine Möglichkeit,/tmp/with/output/unter den richtigen 'type'-Unterverzeichnissen zu kombinieren?

Erwartet werden/tmp/type1/file unter/output/type1/as/output/type1/file und so weiter. So kann ich das/tmp löschen und das Skript erneut ausführen.

Jede Hilfe wird geschätzt. Vielen Dank im Voraus.

+0

Wie Sie wissen, welche Art Verzeichnis willst du speichern? – 54l3d

+0

Typ Verzeichnisse werden dynamisch erstellt, indem Multistorage-Befehl auf 'Typ' Spalte verwendet – dreddy

Antwort

0

Pig kann Verzeichnisse nicht behandeln, aber fs commands aufrufen. Das Zuweisen temporärer Verzeichnisse zu den endgültigen Verzeichnissen erfordert mehr als das, was Pig tun kann. Sie können die FileSystem Api in einem kleinen Java-Programm verwenden und separat oder im Oozie-Workflow ausführen.

Zusätzlich zu, dass Sie sicherstellen müssen, dass angehängte Datei unterschiedliche Dateinamen als die existant diejenigen hat, ist dies nicht das Standardverhalten und Sie können es mit diesem Befehl erreichen:

%declare timestamp `date +"%s"` 
SET mapreduce.output.basename '$timestamp' 
/* here we used the timestamp to get unicity*/ 
+0

Ich verwendete guid, die in ähnlicher Weise funktioniert :) – dreddy