Oozie工作流之理論篇
簡介
Apache Oozie 是一個面向Hadoop平臺的工作流引擎框架。
它能夠提供對Hadoop Mapreduce、Pig Jobs、Spark、Sqoop、Hive的任務調度與協調。
Oozie工作流是放置在控制依賴DAG(有向無環圖Direct Acyclic Graph)中的一組動作,如Hadoop的Map/Reduce作業:
對於Oozie工作流(workflow)來說,一個工作流就是一些活動(actions)的容器,其中活動包括Hadoop Map/Reduce jobs或者Pig jobs等,然後通過有向無環圖來控制依賴,比如一個活動必須要在另一個活動結束之後才能運行。
定義
Oozie工作流定義,同JBoss jBPM提供的jPDL一樣,也提供了類似的流程定義語言hPDL,通過XML文件格式來實現流程的定義。對於工作流系統,一般都會有很多不同功能的節點,比如分支、併發、匯合等等。
控制流節點
Oozie定義了控制流節點(Control Flow Nodes)和動作節點(Action Nodes),其中控制流節點定義了流程的開始和結束(start,end和fail節點),以及工作流的執行路徑(execution path)機制,如:decision,fork,join節點
動作節點
Oozie的動作節點提供了工作流觸發實際執行計算任務的途徑,並且可以支持多種不同的動作,如:Hadoop map-reduce,Pig,Sqoop以及子工作流。還可以支持額外的擴展。
運行
Oozie工作流作業是在遠程系統中運行的,也就是說所有由動作節點觸發的計算和處理人的都不在Oozie之中。而是如:Hadoop平臺,將workflow.xml
工作流定義文件上傳到HDFS文件系統目錄,然後運行Map/Reduce作業,遠程系統通過回調的方式通知Oozie活動的運行情況。
觸發
Oozie工作流可以根據時間與數據變化等外部條件進行觸發。
一些工作流是根據需要觸發的,但是大多數情況下,我們有必要基於一定的時間段和(或)數據可用性和(或)外部事件來運行它們。Oozie協調系統(Coordinator system)讓用戶可以基於這些參數來定義工作流執行計劃。Oozie協調程序讓我們可以以謂詞的方式對工作流執行觸發器進行建模,那可以指向數據、事件和(或)外部事件。工作流作業會在謂詞得到滿足的時候啓動。