2015-08-22 94 views
2

我有一個要求,可以根據不同的文件集來運行多個mapreduce作業,這些文件會碰到同一張表。我正在探索Oozie,但我完全不知道Oozie。Oozie協同工作流程

我的要求就像
1.根據時間限制(和/或)文件綁定運行作業。
2.如果某些文件不可用,則應跳過該步驟。
3.用戶應該能夠配置每個步驟的步驟和優先級。

任何人都可以建議,如果Oozie符合我的要求?如果是這樣,我該如何完成?
如果沒有,是否有任何類似於Visual Cron的免費或商業工具,我們打算將其替換爲運行地圖縮減和基於Java的作業?

+0

你用'時間bound'意思文檔?你能否詳細說明你的第三點? – YoungHobbit

+0

受時間限制,我指的是作業應該同時運行。關於第三點,例如,我今天可能會收到3套工作流程文件。但明天我可能會收到2套文件,而不是3份。所以用戶應該可以在這種情況下跳過一步 – Satya

回答

1

基本上,您希望基於一天中預定時間的數據可用性爲一堆MR作業運行oozie工作流程。您需要定義Decision節點來檢查數據是否存在以及mapreduce用於運行mapreduce作業的操作。您也可以定義郵件通知功能以及作業失敗。您可以在這裏找到詳細信息MapReduce NodeDecision 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的前它是開源的人 - 和仍然是最大的用戶目前爲止)

下面是一些典型使用案例Oozie的協調員引擎。

  • 您希望每天在2PM運行一次您的工作流程(類似於CRON)。
  • 你想運行您的工作流程每隔一小時,你還需要等待具體數據饋送可用HDFS上
  • 您想運行依賴於其他工作流的工作流。

繼續教程。

而且,順便說一句,Oozie的最新版本是V4.2 =>爲Coordinator