定時任務排程——oozie總結(轉)
簡介
(翻譯自官網)
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如下:
image首先是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。儲存即可。
image寫workflow.xml和使用hue配置action,兩者是等價的。
最後使用coordinator設定每小時執行一次。也可以設定輸入,當指定位置有資料時才開始執行;設定輸出,將資料輸出到指定位置。
如果coordinator設定的開始時間比當前時間早的話,會先將開始時間和當前時間之間應該執行的workflow全部執行一遍。
image參考文獻:
作者:紅蓮之火
連結:https://www.jianshu.com/p/6cb3a4b78556
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。