2014-02-07 2 views
0

У меня есть координатор по oozie, который выполняет ряд задач, каждый из которых зависит от результата последнего. Каждая задача выводит датированную папку и ищет выхода своего предшественника с использованиемУпорядочить порядок работы координатора на Oozie

${coord:latest(0)} 

Это все работало нормально на моем Dev кластера, когда ничего не было работы; каждые 5 минут oozie будет стоять в очереди на другую работу, и за эти 5 минут предыдущая работа выполнялась так, что когда новое задание было настроено, она увидела нужную ему директорию.

Я столкнулся с проблемами в производственном кластере; задания отправляются, но помещаются в очередь и не запускаются некоторое время, но все равно каждые 5 минут oozie ставит очередную очередность, и на этапе инициализации ей назначается ее «предыдущая» папка, которая не была созданный еще, поскольку его предшественник не работал, поэтому «последняя» функция дает ему тот же вклад, что и предыдущая работа. Затем я получаю 10 заданий, все берут один и тот же вход ...

Что мне нужно - это способ строго запретить следующую работу в последовательности координаторов даже от создания, пока ее предшественник не закончит работу. Есть ли способ, которым это можно сделать?

Спасибо за чтение

+0

Какова частота, которую вы указали для совместного участия? –

+0

Взгляните на эти примеры, https://github.com/yahoo/oozie/wiki/Oozie-Coord-Use-Cases Я не уверен, что это лучшая идея, но myabe вы можете использовать «Работа координатора с тайм-аутами» пример, чтобы установить тайм-аут и устранить сложенные то же задание. –

+0

К сожалению, я пропустил ключевой бит информации там - частота установлена ​​на ежедневной основе, но у нас есть запас старых данных для импорта, так что они планируют задания чаще, чем что, поскольку их номинальное время работы в прошлом. – user1111284

ответ

1

Это точное использование случай, Oozie предназначен для решения. Oozie будет ждать всех зависимостей данных перед запуском.

Пожалуйста, попытайтесь понять следующие конфиги в вашем coordinator.xml

<datasets> 
     <dataset name="my_data" frequency="${coord:days(1)}" initial-instance="2013-01-27T00:00Z"> 
      <uri-template>YOUR_DATA/${YEAR}${MONTH}${DAY}</uri-template> 
     </dataset> 
    ... 
    <datasets> 

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

    <output-events> 
     <data-out name="my_data" dataset="my_data"> 
      <instance>${coord:current(0)}</instance> 
     </data-out> 
    </output-events> 

«коорд: ток (-1)» во входных-событий означает, что предыдущий вывод. Он будет интерпретировать таблицу URI команды набора данных до «вчера», а Oozie проверит, существуют ли данные в HDFS, проверив флаг успеха, который по умолчанию является пустым файлом с именем «_SUCCESS», прямо под выходным каталогом. Oozie будет продолжать ждать этого флага перед запуском текущего рабочего процесса.

Кстати, вы также можете установить

<coordinator-app name="my_coordinator" frequency="${coord:days(1)}" start="${start_time}" end="${end_time}" ...> 

определить время начала и время окончания работы координатора, так что вы можете нагнать данные отставания.

+0

Мы рассмотрели использование 'coord: current (-1)', но мы не можем гарантировать, что данные будут всегда доступны в течение определенного дня, и в этом случае мы хотим вернуться к выходу предыдущего дня, поэтому мы использовали 'coord: latest (0)». В случае, когда выполняется несколько заданий, это оценивается до завершения предыдущего задания и выбирается неправильный вход. Кажется невозможным регулировать материализацию, хотя мы должны будем переконфигурировать остальную часть нашего процесса, чтобы быть совместимым с этим методом. – user1111284

+0

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

+0

Каждая работа зависит от вывода предыдущей работы, но она не может гарантировать, что предыдущее задание успешно выполнялось в предыдущий день, поэтому оно принимает папку «coord: latest (0)». Мы могли бы, чтобы каждое задание выводило свои данные в одну общую папку, но нам все равно нужно было бы обеспечить завершение последней работы, которая должна была работать. – user1111284

Смежные вопросы