1. 程式人生 > 實用技巧 >定時任務排程——oozie總結(轉)

定時任務排程——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

參考文獻:

Oozie官方文件

Hue官方文件

cloudera community



作者:紅蓮之火
連結:https://www.jianshu.com/p/6cb3a4b78556
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。