2017-02-03 2 views
0

Ich habe einen Oozie-Koordinator und Workflow-Jobs, wenn meine Workflow-Aktion abgeschlossen ist, muss ich nächste Aktion nach einiger Zeit sagen 50 Minuten sagen. Kann ich das von Oozie Workflow oder Oozie Koordinator konfigurieren, um einige Zeit zu warten, um die nächste Aktion auszuführen (abhängig von vorheriger Aktion und etwas Async-Aufgabe, die vorher gestartet wurde).wie Workflow-Aktion mit Oozie-Koordinator zu verzögern

Koordinator xml

<coordinator-app name="ods-ds-cms-coordinator" start="${startTime}" end="${endTime}" 
       frequency="${coord:days(1)}" timezone="${timeZone}" xmlns="uri:oozie:coordinator:0.5"> 
    <action> 
     <workflow> 
      <app-path>${exampleDir}/ods-ds-cms-workflow.workflow</app-path> 
      <configuration> 
       <property> 
        <name>nameNode</name> 
        <value>${nameNode}</value> 
       </property> 
       <property> 
        <name>jobTracker</name> 
        <value>${jobTracker}</value> 
       </property> 
       <property> 
        <name>exampleDir</name> 
        <value>${nameNode}/custom/oozie</value> 
       </property> 
      </configuration> 
     </workflow> 
    </action> 
</coordinator-app> 

workflow.xml

<?xml version="1.0" encoding="UTF-8"?> 

<workflow-app xmlns="uri:oozie:workflow:0.5" name="ods-ds-cms-workflow.workflow"> 
    <global> 
    <job-tracker>${jobTracker}</job-tracker> 
    <name-node>${nameNode}</name-node> 
    <configuration> 
     <property> 
     <name>mapred.job.queue.name</name> 
     <value>${queue}</value> 
     </property> 
    </configuration> 
    </global> 
    <start to="cms-checker"/> 
    <action name="cms-checker"> 
    <java> 
     <main-class>com.insense.helper.CMSPullChecker</main-class> 
     <arg>${cmsChecker}</arg> 
     <arg>${cmsType}</arg> 
     <capture-output/> 
    </java> 
    <ok to="trigger_next_job"/> 
    <error to="kill"/> 
    </action> 
    <action name="trigger_next_job"> // need to start this after some time 
    <sub-workflow> 
     <app-path>${exampleDir}/ods-ds-bank.workflow</app-path> 
     <propagate-configuration/> 
    </sub-workflow> 
    <ok to="end"/> 
    <error to="kill"/> 
    </action> 

Wie kann ich mit Oozie framwork archivieren, dass, ich kann mit Thread.sleep (50 * 60 * 1000), um diese mit Java Aktion zu tun , ist besserer Weg mit Oozie zu tun?

Antwort

1

Sie können einen anderen Workflow mit nur einem Job erstellen - Shell-Job. Dann sollten Sie Shell-Skript mit einem Befehl erstellen:

sleep 50m 

Wenn ein Workflow abgeschlossen sein wird, können Sie diesen Workflow mit sleep Befehl ausgeführt werden soll. Der nächste Workflow beginnt nach 50 Minuten.

Beispiel.

workflow.xml

<workflow-app name="My_Workflow" xmlns="uri:oozie:workflow:0.5"> 
<start to="shell-3322"/> 
<kill name="Kill"> 
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> 
</kill> 
<action name="shell-3322"> 
    <shell xmlns="uri:oozie:shell-action:0.1"> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     <exec>sleep.sh</exec> 
     <file>sleep.sh#sleep.sh</file> 
      <capture-output/> 
    </shell> 
    <ok to="End"/> 
    <error to="Kill"/> 
</action> 
<end name="End"/> 

sleep.sh

sleep 50m 
+0

in diesem Fall muss ich scp/Shell-Skript zu jedem Knoten kopieren, wie Oozie Job auf jedem verfügbaren laufen kann Knoten oder nur auf oozie.libpath platzieren wird in Ordnung sein? Gibt es einen anderen Weg? Einstellungen einige Konfigurationen im Koordinator? Vielen Dank für Ihre Antwort . –

+0

Sie müssen das Shell-Skript nicht auf jeden Knoten kopieren. Sie müssen es in HDFS kopieren (Sie können den Befehl copyFromLocal verwenden) und Oozie mitteilen, wo sich das Skript befindet. Ich glaube nicht, dass es andere Wege gibt, Oozie zu benutzen. Oozie ist ein einfacher Service. Vielleicht solltest du Apache NiFi oder StreamSets überprüfen. –

+0

@MateuszGrabowski Die Antwort ist in Ordnung, aber es wird großartig sein, wenn das Skript die Menge und die Einheiten von außerhalb des Skripts erhält, was es generischer macht und wiederverwendet werden kann – Mzf

Verwandte Themen