簡介
(翻譯自官網)
Oozie是一個用於管理Apache Hadoop作業的工作流調度程序系統。
Oozie Workflow job是由多個Action組成的有向無環圖(DAG)。
Oozie Coordinator job是根據時間(頻率)和數據可用性觸發的可重復執行的Oozie Workflow job(簡單講就是根據時間或數據條件,規划workflow的執行)。
Oozie與Hadoop技術棧的項目集成,支持多種類型的Hadoop作業(例如Java map-reduce,Streaming map-reduce,Pig,Hive,Sqoop和Distcp,Spark)以及系統特定的工作(例如Java程序和shell腳本)。
Oozie是一個可水平擴展,可靠和可使用擴展插件(scalable, reliable and extensible)的系統。
使用oozie命令行執行shell workflow
這里使用cdh虛擬機自帶的oozie examples中的例子,執行hdfs dfs -put examples examples,將examples上傳到hdfs。
打開apps/shell/ 可以看到job.properties和workflow.xml兩個文件,在workflow.xml中定義action和workflow,在job.properties中定義各種變量。示例如下:
job.properties
nameNode=hdfs://quickstart.cloudera:8020 #指定hadoop的nameNode
jobTracker=quickstart.cloudera:8032 #指定jobTracker,如果使用yarn則指定為resource manager的applications manager端口
queueName=default
examplesRoot=examples
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/shell #指定workflow.xml的位置
workflow.xml
<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"/> </workflow-app>
可以看到這里定義了一個shell workflow,它的DAG如下:

首先是start,end,kill三個控制節點,分別指定了workflow開始時,結束時,kill時的行為。
start指向了一個名為shell-node的action,該action執行了ehco命令,並使用capture-output獲取標准輸出。如果執行成功,則進入decision node check-output如果輸出結果正確則順利結束,否則輸出錯誤信息。
然后使用以下命令測試(這里的config是使用的是本地文件)
oozie job -oozie http://quickstart.cloudera:11000/oozie -config ~/oozie-examples/examples/apps/shell/job.properties -dryrun
如果成功,會顯示OK
然后使用一下命令執行該workflow
oozie job -oozie http://quickstart.cloudera:11000/oozie -config ~/oozie-examples/examples/apps/shell/job.properties -run
最后,使用oozie job -oozie http://quickstart.cloudera:11000/oozie -info workflowID查看任務運行狀態
也可以在hue中或者oozie web控制台中查看任務運行狀態。
配置hive任務
數據准備:使用了權力與榮耀2017 ios的addcash的數據,test.hql(插入一條數據)
首先需要上傳hive-site.xml到hdfs,Oozie需要通過該文件找到Hive Metastore,另外上傳寫好的hql文件到hdfs。然后向workflow中加入hive script action。並按圖中的配置設置好hive腳本和hive-site.xml。保存即可。

寫workflow.xml和使用hue配置action,兩者是等價的。
最后使用coordinator設定每小時執行一次。也可以設置輸入,當指定位置有數據時才開始執行;設置輸出,將數據輸出到指定位置。
如果coordinator設定的開始時間比當前時間早的話,會先將開始時間和當前時間之間應該執行的workflow全部執行一遍。

參考文獻:
作者:紅蓮之火
鏈接:https://www.jianshu.com/p/6cb3a4b78556
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。