2015-08-22 5 views
2

У меня есть требование запуска нескольких заданий на создание карт, основанных на разных наборах файлов, которые попадают в одну и ту же таблицу. Я изучал Оози, но я полностью не знаю Оози.Оози скоординированный рабочий процесс

Мои требования как
1. Запуск заданий на основе временной привязки (и/или) привязки файлов.
2. Если некоторые файлы недоступны, тогда он должен пропустить шаг.
3. Пользователь должен иметь возможность настроить, какие шаги и какой приоритет должен выполняться каждый шаг.

Может ли кто-нибудь предложить, подходит ли Oozie для моих требований? Если да, то как я могу выполнить?
Если нет, есть ли бесплатный или коммерческий инструмент, похожий на Visual Cron, который мы намереваемся заменить, чтобы выполнить работу по сокращению карты и java?

+0

, что вы имеете в виду 'времени bound'? Не могли бы вы рассказать о своем третьем пункте? – YoungHobbit

+0

По времени я ссылаюсь на то, что задания должны работать в одно и то же время. Что касается 3-х пунктов, например, я могу получить 3 набора файлов для рабочего процесса сегодня. Но завтра я могу получить всего 2 набора файлов, а не 3. Таким образом, пользователь должен пропустить один шаг в этой ситуации. – Satya

ответ

1

В принципе, вы хотите запустить рабочий процесс oozie для выполнения заданий MR на основе доступности данных в запланированное время суток. Вам нужно определить узел Decision для проверки наличия данных и mapreduce действие для запуска задания mapreduce. Вы можете определить функцию уведомления по электронной почте, а также для отказа задания. Вы можете найти подробную информацию здесь MapReduce Node, Decision Node, Oozie Actions Documentation. Я дал образец узла decision и узел mapreduce вместе с файлом job.properties. Вот команда запуска рабочего процесса oozie. Вы можете назначить его как cron для ежедневного запуска в заданное время.

oozie job -config job.properties -D param1=value -run

<workflow-app xmlns="uri:oozie:workflow:0.4" name="${app_name}"> 
<global> 
    <job-tracker>${jobTracker}</job-tracker> 
    <name-node>${nameNode}</name-node> 
    <configuration> 
     <property> 
      <name>mapred.job.queue.name</name> 
      <value>${queueName}</value> 
     </property> 
    </configuration> 
</global> 

<start to="data1_check"/> 

<decision name="data1_check"> 
    <switch> 
     <case to="data1_job">${fs:exists(input-data)}</case> 
     <default to="data2_check"/> 
    </switch> 
</decision> 

<action name='data1_job'> 
    <map-reduce> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     <prepare> 
     </prepare> 
     <configuration> 
      <property> 
       <name>mapred.mapper.class</name> 
       <value>org.myorg.WordCount.Map</value> 
      </property> 
      <property> 
       <name>mapred.reducer.class</name> 
       <value>org.myorg.WordCount.Reduce</value> 
      </property> 
      <property> 
       <name>mapred.input.dir</name> 
       <value>${inputDir}</value> 
      </property> 
      <property> 
       <name>mapred.output.dir</name> 
       <value>${outputDir}</value> 
      </property> 
     </configuration> 
    </map-reduce> 
    <ok to="data2_check"/> 
    <error to="data2_check"/> 
</action> 
###Here we are going to data2_check decision node for both failure and success. 
Because you want to run the next data job to run. You can stop the work flow by sending it to kill node failure. 


###Your Last MR action will go to 'kill' node for failure and 'end' node for success. 
<kill name="fail"> 
    <message>Errormessage[${wf:errorMessage(wf:lastErrorNode())}]</message> 
</kill> 

<end name="end" /> 
</workflow-app> 

Вот job.properties файл.

nameNode=hdfs://localhost:9000 # or use a remote-server url. eg: hdfs://abc.xyz.yahoo.com:8020 
jobTracker=localhost:9001   # or use a remote-server url. eg: abc.xyz.yahoo.com:50300 
queueName=default 
examplesRoot=map-reduce 

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot} 
inputDir=input-data 
outputDir=map-reduce 
+0

Спасибо Abishek Я буду попробуйте и сообщите, если я столкнулся с какими-либо проблемами. – Satya

+0

Или вы можете использовать координатор Oozie (или группу координаторов, в зависимости от сложности критериев времени X-файлов), чтобы вызвать соответствующий рабочий процесс (ы), когда это необходимо. В конце концов, для этого нужны координаторы ... –

1

Цитирование «Oozie Coord Use Cases» (от парней, которые фактически используются Oozie, прежде чем он был Open Source - и по-прежнему самые большие пользователи на сегодняшний день)

Вот некоторые типичные случаи использования для Oozie Двигатель координатора.

  • Вы хотите запустить рабочий процесс один раз в день в 2 вечера (аналогично CRON).
  • Вы хотите запустить рабочий процесс каждый час, и вы также хотите ждать конкретных данных каналов будут доступны на HDFS
  • Вы хотите запустить рабочий процесс, который зависит от других рабочих процессов.

Продолжение с учебником.

И, кстати, последний выпуск Oozie является V4.2 => документация Coordinator

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