Может ли Oozie приостановить рабочий процесс до тех пор, пока не будет создан или существует определенный файл?

78
11

Я использую Oozie в первый раз и считаю это немного трудным для анализа спецификации. Я пытаюсь создать простой рабочий процесс, в котором я запускаю некоторые запросы в Hive, а затем выполняю действие shell, чтобы выполнить некоторый анализ с другой программой, а затем, наконец, я хотел бы выполнить Java работу через Oozie.

Хотя я понимаю, как делать все эти действия изолированно, как настроить мой рабочий процесс, чтобы окончательное задание Java ожидало, что файл будет создан до запуска? Подойдя к нему, я вижу способы заставить рабочий процесс Oozie ждать создания набора данных до его запуска, но я не хочу, чтобы весь рабочий процесс ожидал, так как мне нужно только одно конкретное действие в рабочем процессе, чтобы дождаться входного файла для генерации.

Входной файл будет чем-то простым - скорее всего, у меня будет только второе действие - shell, выполните некоторую команду, например touch $(date -u "+%Y-%m-%d-%H").done прямо перед тем, как он выйдет, так что мой входной файл будет файлом с нулевым байтом с именем типа 2015-07-20-14.done.

спросил(а) 2015-07-21T00:43:00+03:00 4 года, 11 месяцев назад
1
Решение
67

Создайте кординатор, который будет искать набор данных в указанном местоположении hdfs на заданную продолжительность.

Примерный координатор

<coordinator-app name="FILE_CHECK" frequency="1440" start="2009-02-01T00:00Z" end="2009-02-07T00:00Z" timezone="UTC" xmlns="uri:oozie:coordinator:0.1">
<datasets>
<dataset name="datafile" frequency="60" initial-instance="2009-01-01T00:00Z" timezone="UTC">
<uri-template>hdfs://<URI>:<PORT>/data/feed/${YEAR}/${MONTH}/${DAY}/${HOUR}</uri-template>
</dataset>
</datasets>
<input-events>
<data-in name="coorddatafile" dataset="datafile">
<start-instance>${coord:current(-23)}</start-instance>
<end-instance>${coord:current(0)}</end-instance>
</data-in>
</input-events>
<action>
<workflow>
<app-path>hdfs://<URI>:<PORT>/workflows</app-path>
</workflow>
</action>
</coordinator-app>

ответил(а) 2015-07-23T15:00:00+03:00 4 года, 11 месяцев назад
40

Здесь вы можете использовать концепцию решения.

Проверьте файл, папку коммутатора, чтобы определить, как скоро у вас будет выполняться следующее действие java.

----РЕДАКТИРОВАТЬ------

ниже пример, это как не решает ваш случай:

 <workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>echo</exec>
<argument>my_output=Hello Oozie</argument>
<capture-output/>
</shell>
<ok to="check-output"/>
<error to="fail"/>
</action>
<decision name="check-output">
<switch>
<case to="end">
${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}
</case>
<default to="fail-output"/>
</switch>
</decision>
<kill name="fail">
<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<kill name="fail-output">
<message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
</kill>
<end name="end"/>

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

ответил(а) 2015-07-21T18:35:00+03:00 4 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема