2015-07-28 3 views
0

У меня есть простой входной файл с 2 колонками, какпроцесса Ряды Отдельно в Oozie

pkg1 date1 
pkg2 date2 
pkg3 date3 
... 
... 

Я хочу, чтобы создать рабочий процесс oozie который будет обрабатывать каждую строку отдельно. Для каждой строки я хочу запускать несколько действий один за другим (Hive, Pig ..), а затем обрабатывать другую строку. Но это сложнее, чем я ожидал. Я думаю, мне нужно как-то создать цикл и перебрать его.

Можете ли вы дать мне архитектурные рекомендации, как я могу это достичь?

ответ

1

Oozie не поддерживает петлю/циклов, так как это Направленное ациклического граф

https://oozie.apache.org/docs/3.3.0/WorkflowFunctionalSpec.html#a2.1_Cycles_in_Workflow_Definitions

Кроме того, нет встроенного способа (что я знаю) для чтения данных из улья в Oozie и использовать его для управления потоком рабочего процесса Oozie.

У вас может быть один рабочий процесс Oozie, который запускает какой-то пользовательский процесс (например, действие оболочки) и внутри этого процесса считывает данные из Hive и запускает новый отдельный рабочий процесс Oozie для каждой записи.

1

Я полностью согласен с @Mattinbits, вы должны использовать некоторый процедурный код (сценарий оболочки, Python и т. Д.) Для запуска цикла и запуска соответствующих задач Pig/Hive.

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

  • записать общий Oozie рабочий процесс, который выполняет действия Свиньи/Hive для 1 набор параметров, который передается в качестве свойств
  • записать «мастер-шаблон» рабочего процесса Oozie, который только запускает WF выше в качестве рабочего процесса с фиктивными значениями для свойств
  • вырезать шаблон на 3 части: заголовок XML, вызов подпотока (с заполнителями для фактических значений свойства) и нижний колонтитул XML
  • ваш цикл затем будет создавать фактический «главный» рабочий процесс динамический ly, объединив заголовок, вызов вспомогательного потока для первого набора значений, другой вызов для второго набора и т. д. и т. д., затем нижний колонтитул - и, наконец, отправьте Workflow на сервер Oozie (используя REST или интерфейс командной строки)

Конечно, есть кое-что, о чем нужно позаботиться - генерации уникальных имен для суб-рабочих процессов. Действия, их цепочки, обработка ошибок. Обычный материал.

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