簡介
(翻譯自官網(wǎng))
Oozie是一個用于管理Apache Hadoop作業(yè)的工作流調(diào)度程序系統(tǒng)全肮。
Oozie Workflow job是由多個Action組成的有向無環(huán)圖(DAG)锥腻。
Oozie Coordinator job是根據(jù)時間(頻率)和數(shù)據(jù)可用性觸發(fā)的可重復(fù)執(zhí)行的Oozie Workflow job(簡單講就是根據(jù)時間或數(shù)據(jù)條件儡炼,規(guī)劃workflow的執(zhí)行)。
Oozie與Hadoop技術(shù)棧的項目集成占婉,支持多種類型的Hadoop作業(yè)(例如Java map-reduce丐膝,Streaming map-reduce,Pig蔓纠,Hive褒搔,Sqoop和Distcp绊汹,Spark)以及系統(tǒng)特定的工作(例如Java程序和shell腳本)。
Oozie是一個可水平擴展昼窗,可靠和可使用擴展插件(scalable, reliable and extensible)的系統(tǒng)蚯妇。
使用oozie命令行執(zhí)行shell workflow
這里使用cdh虛擬機自帶的oozie examples中的例子猴誊,執(zhí)行hdfs dfs -put examples examples,將examples上傳到hdfs侮措。
打開apps/shell/ 可以看到j(luò)ob.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三個控制節(jié)點畏吓,分別指定了workflow開始時,結(jié)束時卫漫,kill時的行為菲饼。
start指向了一個名為shell-node的action,該action執(zhí)行了ehco命令列赎,并使用capture-output獲取標(biāo)準(zhǔn)輸出宏悦。如果執(zhí)行成功,則進入decision node check-output如果輸出結(jié)果正確則順利結(jié)束,否則輸出錯誤信息饼煞。
然后使用以下命令測試(這里的config是使用的是本地文件)
oozie job -oozie http://quickstart.cloudera:11000/oozie -config ~/oozie-examples/examples/apps/shell/job.properties -dryrun
如果成功源葫,會顯示OK
然后使用一下命令執(zhí)行該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查看任務(wù)運行狀態(tài)
也可以在hue中或者oozie web控制臺中查看任務(wù)運行狀態(tài)砖瞧。
配置hive任務(wù)
數(shù)據(jù)準(zhǔn)備:使用了權(quán)力與榮耀2017 ios的addcash的數(shù)據(jù)息堂,test.hql(插入一條數(shù)據(jù))
首先需要上傳hive-site.xml到hdfs,Oozie需要通過該文件找到Hive Metastore块促,另外上傳寫好的hql文件到hdfs荣堰。然后向workflow中加入hive script action。并按圖中的配置設(shè)置好hive腳本和hive-site.xml竭翠。保存即可振坚。
寫workflow.xml和使用hue配置action,兩者是等價的逃片。
最后使用coordinator設(shè)定每小時執(zhí)行一次屡拨。也可以設(shè)置輸入,當(dāng)指定位置有數(shù)據(jù)時才開始執(zhí)行褥实;設(shè)置輸出呀狼,將數(shù)據(jù)輸出到指定位置。
如果coordinator設(shè)定的開始時間比當(dāng)前時間早的話损离,會先將開始時間和當(dāng)前時間之間應(yīng)該執(zhí)行的workflow全部執(zhí)行一遍哥艇。
參考文獻: