2013-05-20 7 views
5

Kann ich Platzhalter (z. B. *) oder Dateimuster (z. B. {}) in Oozie-Bewegungsaktionen verwenden?Kann Oozie HDFS Aktion Dateimuster oder Glob?

Ich versuche, die Ergebnisse meines Jobs in Archivierungsverzeichnis zu verschieben.

Zustand der Verzeichnisstruktur:

output 
- 201304 
- 201305 
archive 
- 201303 

Meine Aktion:

<fs name="archive-files"> 
    <move source="hdfs://namenode/output/{201304,201305}" 
      target="hdfs://namenode/archive" /> 
    <ok to="next"/> 
    <error to="fail"/> 
</fs> 

resultierende Fehler:

FS006: move, source path [hdfs://namenode/output/{201304,201305}] does not exist 

Gibt es eine einfache Möglichkeit, mehr als eine Datei in einem bewegen Glob oder Bash wie Syntax? Suchen, etwas Ähnliches zu diesem hadoop Befehl zu tun:

hadoop fs -mv hdfs://namenode/output/{201304,201305} hdfs://namenode/archive 

Fehle ich etwas? Der Befehl hadoop fs akzeptiert glob. Ist Oozie?

Antwort

1

Oozie HDFS-Aktion hat recht eingeschränkte Funktionalität, die vollständig in functional specification beschrieben wird. Um etwas komplizierter zu machen, können Sie Shell action verwenden. Es ermöglicht, beliebige Shell-Befehle als Teil des Arbeitsablaufs auszuführen, z. hadoop fs in Ihrem Fall.

0

Nein - aus meiner Erfahrung sieht es nicht so aus, als ob es funktioniert.

FS006: move, Quellpfad [hdfs: // nodename: 8020/projects/blah/201 * .gz] existiert nicht

-1

In workflow.xml Verwendung dieses:

<action name="Movefiles"> 
    <fs> 
    <move source='${SourcePath}' target='${DestinationPath}'/> 
    </fs> 
    <ok to="end"/> 
    <error to="fail"/> 
    </action> 

und in job.properties schreiben:

SourcePath = Ausgang/*/

DestinationPath = Archiv