1. 程式人生 > >Hadoop學習筆記十一 使用Oozie自動化資料處理(未完)

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中執行非同步操作