Oozie任務調度框架詳解及使用簡介(一)

摘要:個人最近一段時間一直在使用oozie,從剛開始的各種彆扭到現在越來越覺得有意思的情況下,想整理一下關於oozie的認知,整理出來一個oozie系列,本來市面上關於oozie的資料就比較少,希望寫完後能形成自己對oozie的獨特理解和加強整體性的把握.

一.常見的調度框架

1.1.crontab定時器

linux自帶定時器,沒有web界面 ,不利於監控任務和調度任務,在工作量比較小的情況下,建議使用linux的crontab定時命令

##crongtab 命令 
*   *   *   *   *    後面接調度 job 的命令  
分  時  日   月  周  
##簡單實例(每天0點11分執行) 
11 0 * * * /home/hduser/lubians/intelligentDevice/intelligentDevice.sh 
1.2.Azkaban調度

開源項目,key/value配置對,操作簡單,帶web界面

Azkaban開源網站

1.3.Oozie調度

apache項目,xml配置文件,操作稍微有難度,帶web查看界面,常用於hadoop相關任務的調度

Oozie官網

二.使用背景

公司下半年技術架構升級,將整個大數據集羣管理流程化,規模化,引入了更多的技術組件,這其中就有Oozie.

2.1. 之前使用的調度技術

在這之前公司使用的調度工具主要是TaskCtl和Kettle,TaskCtl分爲三層,Manage,Server和Agent.

可以理解爲將調度分層了.

TASKCTL主要可以完成串行、並行、依賴、互斥、執行計劃、定時、容錯、循環、條件分支、遠程、負載均衡、自定義條件等各種不同的核心調度功能。

根據不同的功能分類,TASKCTL將客戶端分爲Admin(平臺管理)、Designer(流程集成開發環境)、Monitor(流程監控管理)三套不同的軟件。

Admi:平臺節點管理、任務類型管理、工程管理、應用設置、全局變量管理以及流程導入導出等功能。

Designer:平臺流程代碼信息管理、代碼設計編輯、流程圖形編輯、規則語法適時檢測功能以及編譯發佈等功能。

Monitor:圖形方式監控、多角度統計監控、流程起停重置、任務鎖定、任務重做、信息對象查詢等。

2.2. 爲什麼使用Oozie

TaskCtl最大的問題是作爲調度系統需要一臺單獨的調度服務器,並且和Hadoop生態圈的產品搭配不是很好,所以考慮另行辦法在Hadoop集羣上使用調度工具.

使用Oozie的原因是因爲公司使用的是Ambari集羣管理工具,自帶Oozie插件安裝,同時Oozie支持Java API調度,會在工作中用到Java語言的緣故,選擇了Oozie.

三.Oozie介紹

3.1. Oozie是什麼

oozie是一個workflow(工作流)協調系統,是由Cloudera公司貢獻給Apache的,主要用來管理Hadoop作業(job).屬於web應用程序,由oozie client和oozie server兩個組件構成.

oozie server運行於java servlet容器(tomcat)中的web程序.

image_1akhmftbi11bjakq13n210q216db2a.png

3.2. 爲什麼需要Oozie

①對於較爲複雜的Hadoop作業系統來說,單純的依靠shell腳本方式,手工方式調度是的流程更加難以控制.

②複雜系統的算法需要很多不同的作業(如mr,Java程序,shell腳本,hivesql,sqoop,spark等)按照特定的順序,串行並行,不同時間,不同條件進行執行,就需要oozie這樣的調度系統做支撐,將複雜問題簡單化.

3.3. oozie能帶來什麼

①將hadoop生態系統中常見的mr任務啓動,hdfs操作,shell調度,hive操作等通過統一的方式進行連貫調度.

②將複雜的依賴關係,時間觸發,事件觸發使用xml語言進行表達,提高開發效率.

③一組任務使用一個DAG(有向無環圖)來表示,圖形化的表達,流程邏輯更加清晰.

④支持很多種任務調度,能完成大部分的hadoop任務處理.

⑤程序定義支持EL常量和函數,寫過shell腳本的小夥伴使用根本沒難度.

四.Oozie架構圖

在網上找了一個oozie架構圖,如下:

image_1akhmf44nvfh140gqc68pmhs1t.png

oozie包含四大服務組件:

workflow: 用於支持動作有向無環圖(DAG)的設計和執行,可以按照特定的順序執行mr,hive和shell等節點.

coordinator: 用於定時調度特定的 workflow 進行執行,可以基於事件,資源存在,傳遞參數等自動執行.

bundle: 批量設定一組coordinator執行.

SLA(Service Level Agreement, oozie服務器等級協定): 用於程序執行過程的日誌跟蹤.

4.1.Oozie簡易架構

image_1akhm3bv8muv162h1u41ve318189.png

如上圖,oozie調度本身就是一個mr程序,開始,執行,結束或者失敗,簡單易懂.

所以我們可以思考一下,在oozie調度mr程序時,其實同一時間是運行了兩個mr的,一個是調度本身,一個是任務.

4.2.一個有向無環圖

任務本身是一個有向無環圖(DAG)

image_1akhmaidd6a3d6m11ak15oe9p0m.png

圖中fork標籤後面的 MR job 和 Hive job 是並行執行的,都成功後通過 join 節點合併.

4.3.coordinator生命週期

image_1akhmbdfe32m1m6f363juu27713.png

coordinator是一個定時服務,通過定時來固定頻率的執行任務,這裏的功能類似crontab.

4.4.bundle Job

image_1akhmcmbn12hu12g412tv1cjo19g11g.png

bundle的作用就是設定多個coordinator定時服務按批次執行,這樣使得多個任務也形成一個DAG.

五.Oozie的安裝與配置

5.1.Oozie的安裝方式

單獨安裝: 需要安裝server端和client端

組件安裝: 使用Ambari進行oozie組件添加(可以使用HA)

注意:如果使用CDH集羣管理工具,也是一鍵配置,因爲我是直接組件式安裝,這裏就不細講了,有需要的小夥伴可以聯繫我,看情況寫一下ambari配置oozie.

5.2.Oozie配置

節點內存配置:

這裏的節點內存配置可能會涉及到oozie調度阻塞的問題,這個在之後有時間整理一下整個問題現象以及解決辦法,這裏就看一下

#(節點併發),決定了你可以同時執行幾個action
oozie.service.callablequeueservice.callable.concurrency 
#(隊列大小) 
oozie.service.callablequeueservice.queue.size 
#(擴展)一些擴展相關 
oozie.service.ActionService.executor.ext.classes 

clipboard.png

5.3.oozie元數據更改

ambari配置oozie元數據

clipboard1.png

Ambari默認數據庫爲Derby.

我們配置時,無特殊需求情況下,一般默認選擇mysql

選擇數據庫類型,庫名,用戶名,url連接串,驅動,密碼

測試連接成功即可.

5.4.ext2.2添加

進入oozie文件夾

將ext-2.2.tar.gz解壓放到./libext/ext-2.2目錄下

5.5.第三方jar包添加
  • 運行時的共享目錄(在HDFS下)
  • libserver目錄
  • libtools目錄

六.Oozie管理

6.1.Oozie管理Web界面

http://ip:11000/oozie/

這裏有時候會出現oozieUI界面無法訪問問題,之後更新一篇文章,簡單說明一下.

6.2.oozie使用
  • 任務列表查看
  • 任務狀態查看
  • 流程返回信息
  • 節點信息查看
  • 流程圖信息
  • 日誌查看
  • 系統信息查看和配置

clipboard2.png

6.3.狀態識別
狀態 含義說明
PREP 一個工作流Job第一次創建將處於PREP狀態,表示工作流Job已經定義,但是沒有運行。
RUNNING 當一個已經被創建的工作流Job開始執行的時候,就處於RUNNING狀態。它不會達到結束狀態,只能因爲出錯而結束,或者被掛起。
SUSPENDED 一個RUNNING狀態的工作流Job會變成SUSPENDED狀態,而且它會一直處於該狀態,除非這個工作流Job被重新開始執行或者被殺死。
SUCCEEDED 當一個RUNNING狀態的工作流Job到達了end節點,它就變成了SUCCEEDED最終完成狀態。
KILLED 當一個工作流Job處於被創建後的狀態,或者處於RUNNING、SUSPENDED狀態時,被殺死,則工作流Job的狀態變爲KILLED狀態。
FAILED 當一個工作流Job不可預期的錯誤失敗而終止,就會變成FAILED狀態。

clipboard3.png

我是魯邊, 2020 peace and love

別驚訝,今年的主題就是愛與和平,但願我能一直用下去...

按例按例,我的個人公衆號:魯邊社,歡迎關注

avatar

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章