Hadoop學習筆記十一 使用Oozie自動化資料處理(未完)
使用Oozie自動化資料處理
本文學習資源部分來自《Hadoop高階程式設計——構建與實現大資料解決方案》清華大學出版社。
一、簡介
Oozie是一個Workflow協調系統,可以用來管理Apache Hadoop作業。Oozie的主要元件之一是Oozie伺服器————一個運行於Java Servlet容器(標準的Oozie釋出使用Tomcat)的Web應用程式。該伺服器支援讀取和執行Workflow、Coordinator、Bundle和SLA定義。它實現了一組遠端Web Service API,可以通過Oozie客戶端元件和第三方應用程式來呼叫。
伺服器的執行需要利用一個可配置的資料庫。該資料庫包含Workflow、Coordinator、Bundle和SLA的定義,以及執行狀態和程序變數。目前支援的資料庫包括MySQL、Oracle和Apache Derby。Oozie共享庫元件位於Oozie的HOME目錄,包含Oozie執行要用到的程式碼。
最後,Oozie提供了一個命令列介面(CLI),它基於一個客戶端元件,該元件是對Oozie Web Service API的很薄的Java封裝。這些API也可以用於有足夠許可權的第三方應用程式。
二、Oozie伺服器要實現的4個功能元件
- Oozie Workflow
- Oozie Coordinator
- Oozie Bundle
- Oozie SLA
三、Oozie Workflow
Oozie Workflow支援動作有向無環圖(Directed Acyclic Graph,DAG)的設計和執行。
有向無環圖
在數學和電腦科學中,有向無環圖指的是不包含迴圈路徑的有向圖。DAG由一組通過有向邊進行相互連通的節點組成。DAG的主要特徵是它不包含迴圈——換句話說,就是不存在某個節點N ,從該節點出發,存在一個最終可以回到節點N的路徑。
在數學和電腦科學領域中,DAG被廣泛用於對某些型別的結構進行建模。例如:受某些任務必須先於其它任務執行的規則約束,一組任務必須按順序執行,它們就可以使用一個DAG來表示,令每個節點代表一個任務,而每條有向邊表示一個約束。
Oozie Workflow的定義主要基於以下概念:
- 動作(Action):關於一個獨立的Workflow任務/步驟的約定。例如,一個動作可以表示一段程式碼的執行,一個MapReduce作業、一個Hive指令碼,等等。
- 轉換(Transition):關於一個給定動作完成時,哪個動作可以隨後執行的約定。它是一種描述動作之間依賴關係的方法。
- Workflow : 這是一組排列在一張依賴順序圖中的動作和轉換的集合。
- Workflow應用程式 :這是由Oozie Workflow語言定義的Oozie Workflow。Oozie伺服器會對Oozie Workflow應用程式定義進行解釋,並儲存到Oozie資料庫中。
- Workflow作業:這是Oozie伺服器中的一個程序,它解釋(執行)Oozie Workflow定義。Oozie Workflow任務會控制動作提交的順序和條件。
Oozie還支援兩種不同型別的動作:
- 同步
- 非同步
- 結構條件
- 執行時執行條件
Oozie使用Hadoop流程定義語言(Hadoop Process Definition Language,hPDL)來描述WOrkflow,hPDL是一種借鑑了JBoss業務流程建模語言(JBoss Business Process Modeling Language,jBPML)的XML描述語言。
hPDL是一種相當簡潔的語言,它使用有限數目的流控制和動作節點。Oozie Workflow節點可以是流控制節點或動作節點。
流控制節點提供了一種控制Workflow執行路徑的方法。
流控制節點
流控制節點 | XML元素型別 | 描述 |
---|---|---|
Start節點 | start | 該節點定義一個Oozie Workflow的起始點 |
End節點 | end | 該節點定義一個Oozie Workflow的結束點 |
Decision節點 | decision | 該節點用於表述”switch-case”邏輯 |
Fork | fork | 該節點會把執行流程定義叉開為多個併發的路徑 |
Join節點 | join | 該節點表示Workflow的執行要進行等待,直到前一次fork節點產生的所有併發執行路徑都到達該join節點 |
Sub-Workflow | sub-workflow | 該節點會呼叫一個子Workflow |
Kill節點 | kill | 該節點會使Oozie伺服器強制殺死當前的Workflow作業 |
動作節點
動作節點 | XML元素型別 | 描述 | 型別 |
---|---|---|---|
Java動作 | java | 該動作呼叫特定Java類的main()方法 | 非同步 |
Pig動作 | pig | 該動作執行一個pig作業 | 非同步 |
MapReduce動作 | map-reduce | 該動作執行一個Hadoop MapReduce作業(可以是Java MapReduce作業、streaming作業或pipe作業) | 非同步 |
Shell動作 | fs | 該動作允許定義一個在HDFS上執行的命令(delete,mkdir,move和chmod)序列 | 同步 |
Oozie擴充套件動作
- Hive動作
- Email動作
- SSH動作
- Sqoop動作
- Distcp動作
在Oozie Workflow中執行非同步操作