摘要:個人最近一段時間一直在使用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界面
1.3.Oozie調度
apache項目,xml配置文件,操作稍微有難度,帶web查看界面,常用於hadoop相關任務的調度
二.使用背景
公司下半年技術架構升級,將整個大數據集羣管理流程化,規模化,引入了更多的技術組件,這其中就有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程序.
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架構圖,如下:
oozie包含四大服務組件:
workflow: 用於支持動作有向無環圖(DAG)的設計和執行,可以按照特定的順序執行mr,hive和shell等節點.
coordinator: 用於定時調度特定的 workflow 進行執行,可以基於事件,資源存在,傳遞參數等自動執行.
bundle: 批量設定一組coordinator執行.
SLA(Service Level Agreement, oozie服務器等級協定): 用於程序執行過程的日誌跟蹤.
4.1.Oozie簡易架構
如上圖,oozie調度本身就是一個mr程序,開始,執行,結束或者失敗,簡單易懂.
所以我們可以思考一下,在oozie調度mr程序時,其實同一時間是運行了兩個mr的,一個是調度本身,一個是任務.
4.2.一個有向無環圖
任務本身是一個有向無環圖(DAG)
圖中fork標籤後面的 MR job 和 Hive job 是並行執行的,都成功後通過 join 節點合併.
4.3.coordinator生命週期
coordinator是一個定時服務,通過定時來固定頻率的執行任務,這裏的功能類似crontab.
4.4.bundle Job
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
5.3.oozie元數據更改
ambari配置oozie元數據
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界面
這裏有時候會出現oozieUI界面無法訪問問題,之後更新一篇文章,簡單說明一下.
6.2.oozie使用
- 任務列表查看
- 任務狀態查看
- 流程返回信息
- 節點信息查看
- 流程圖信息
- 日誌查看
- 系統信息查看和配置
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狀態。 |
我是魯邊, 2020 peace and love
別驚訝,今年的主題就是愛與和平,但願我能一直用下去…
按例按例,我的個人公衆號:魯邊社,歡迎關注