Как заставить координатор материализоваться на определенной частоте?

Я хотел бы знать, возможно ли/как заставить координатора материализовать или создать экземпляр рабочего процесса через равные промежутки времени, даже если предыдущий созданный рабочий процесс еще не выполнен.

Поясню: у меня есть простой координатор, выглядящий так:

<coordinator-app name="myApp" frequency="${coord:hours(3)}" start="2015-01-01T0:00Z" end="2016-01-01T00:00Z" timezone="UTC" xmlns="uri:oozie:coordinator:0.4">
   <action>
      <workflow>
         <app-path>${myPath}/workflow.xml</app-path>
      </workflow>
   </action>
</coordinator-app>

Периодичность установлена ​​на 3 часа. Каждые 3 часа я ожидаю, что координатор «материализует» новый экземпляр/задание рабочего процесса.

Вот моя проблема: когда выполнение рабочего процесса длится более 3 часов, координатор не материализует новый экземпляр рабочего процесса, а ждет, пока текущий рабочий процесс завершится первым. Затем он создаст экземпляр следующего рабочего процесса. Запущенные координатором рабочие процессы ставятся в очередь, если они длятся дольше, чем частота.

Как заставить координатора начинать новую работу каждые 3 часа несмотря ни на что? Спасибо


person ponponke    schedule 31.07.2015    source источник


Ответы (1)


Вы должны использовать свойство concurrency. По умолчанию он один, поэтому у вас проблемы с очередями. Установите его настолько большим, насколько вы считаете разумным.

   <coordinator-app name="[NAME]" frequency="[FREQUENCY]" 
                    start="[DATETIME]" end="[DATETIME]" timezone="[TIMEZONE]" 
                    xmlns="uri:oozie:coordinator:0.1">
      <controls>
        <concurrency>[CONCURRENCY]</concurrency>
      </controls>

Из документов:

Параллелизм: задание координатора может указать параллелизм для своих действий координатора, то есть, сколько действий координатора разрешено выполнять одновременно (состояние РАБОТАЕТ), прежде чем механизм координатора начнет их регулировать.

person Mikhail Golubtsov    schedule 31.07.2015