2017-01-12 3 views
1

У меня есть координатор Oozie, который при запуске устанавливает свое время начала до 365 дней назад, а затем запускает рабочий процесс с частотой ежедневно, пока не достигнет последней даты с входными данными. Так coordinator.xml выглядит примерно так:Rerun oozie workflows каждый день

<?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> 

При запуске этот координатор запускает 365 рабочих процессов. Затем на следующий день он просто запускает один рабочий процесс для входных данных этого дня. И так далее на следующий день.

Теперь требования были изменены, и мне нужно запустить 365 рабочих процессов каждый день, а не только в первый раз! Поэтому при запуске я хочу, чтобы он работал, как сейчас. Но на следующий день, когда входные данные станут доступными, мне нужно вернуться и запустить ежедневные рабочие процессы за последние 365 дней. И так далее для каждого последующего дня, как только будут обнаружены новые входные данные.

Как я могу это достичь? Спасибо,

Альваро

ответ

0

В data-in теге координатора использовать start-instance и end-instance указать диапазон, например, чтобы рассматривать в качестве входных данных.

start-instance: относится к началу диапазона экземпляров (время для синхронного набора данных). end-instance: относится к концу диапазона экземпляров (время для синхронного набора данных).

<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> 

Для получения дополнительной информации, пожалуйста, обращайтесь: Synchronous Coordinator Application Definition