2017-01-12 5 views
1

Ich habe einen Oozie-Koordinator, der beim Start seine Startzeit auf 365 Tage setzt und dann seinen Workflow mit einer täglichen-Frequenz ausführt, bis das letzte Datum mit den Eingabedaten erreicht wird. Die coordinator.xml sieht also ungefähr so ​​aus:Oozie Workflows jeden Tag neu starten

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<coordinator-app name="${jobName}" frequency="${coord:days(1)}" start="${startTime}" end="${endTime}" timezone="${timezone}" xmlns="uri:oozie:coordinator:0.2"> 
    <controls> 
     <timeout>-1</timeout> 
     <concurrency>30</concurrency> 
     <execution>FIFO</execution> 
    </controls> 

    <datasets> 
     <dataset name="myData" frequency="${coord:days(1)}" initial-instance="${initialTime}" timezone="${timezone}"> 
      <uri-template>${outputPath}/${YEAR}${MONTH}${DAY}</uri-template> 
     </dataset> 
    </datasets> 

    <input-events> 
     <data-in name="myInput" dataset="myData"> 
      <instance>${coord:current(-1)}</instance> 
     </data-in> 
    </input-events> 

    <action> 
     <workflow> 
      <app-path>${appPath}</app-path> 
      <configuration> 
       <property> 
        <name>myInput</name> 
        <value>${coord:dataIn('myInput')}</value> 
       </property> 
       <property> 
        <name>date</name> 
        <value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), 'yyyyMMdd')}</value> 
       </property> 
      </configuration> 
     </workflow> 
    </action>  
</coordinator-app> 

Beim Start löst dieser Koordinator 365 Workflows aus. Am nächsten Tag wird dann nur ein Workflow für die Eingabedaten dieses Tages ausgeführt. Und so weiter für den nächsten Tag.

Jetzt haben sich die Anforderungen geändert und ich muss 365 Arbeitsabläufe jeden Tag, nicht nur das erste Mal ausführen! Also beim Start möchte ich, dass es so läuft wie jetzt. Aber dann, am nächsten Tag, wenn die Eingabedaten verfügbar sind, muss ich zurückgehen und tägliche Arbeitsabläufe für die letzten 365 Tage wieder ausführen. Und so weiter für jeden weiteren Tag, sobald neue Eingabedaten erkannt werden.

Wie kann ich das erreichen? Danke,

Alvaro

Antwort

0

Im data-in Tag des Koordinators verwendet start-instance und end-instance den Bereich der Instanz angeben, die als Eingang zu prüfen.

Start-Instanz: bezieht sich auf den Beginn eines Instanzbereichs (die Zeit für einen synchronen Datensatz). End-Instanz: bezieht sich auf das Ende eines Instanzbereichs (die Zeit für einen synchronen Datensatz).

<input-events> 
    <data-in name="myInput" dataset="myData"> 
     <start-instance>${coord:current(-365)}</start-instance> 
     <end-instance>${coord:current(-1)}</end-instance> 
    </data-in> 
</input-events> 

Weitere Informationen erhalten Sie unter: Synchronous Coordinator Application Definition