摘要:我的最近一段時間一直在使用oozie,從剛開始的各類別扭到如今愈來愈以爲有意思的狀況下,想整理一下關於oozie的認知,整理出來一個oozie系列,原本市面上關於oozie的資料就比較少,但願寫完後能造成本身對oozie的獨特理解和增強總體性的把握.java
linux自帶定時器,沒有web界面 ,不利於監控任務和調度任務,在工做量比較小的狀況下,建議使用linux的crontab定時命令mysql
##crongtab 命令
* * * * * 後面接調度 job 的命令
分 時 日 月 周
##簡單實例(天天0點11分執行)
11 0 * * * /home/hduser/lubians/intelligentDevice/intelligentDevice.sh
複製代碼
開源項目,key/value配置對,操做簡單,帶web界面linux
Azkaban開源網站git
apache項目,xml配置文件,操做稍微有難度,帶web查看界面,經常使用於hadoop相關任務的調度github
Oozie官網web
公司下半年技術架構升級,將整個大數據集羣管理流程化,規模化,引入了更多的技術組件,這其中就有Oozie.算法
在這以前公司使用的調度工具主要是TaskCtl和Kettle,TaskCtl分爲三層,Manage,Server和Agent.sql
能夠理解爲將調度分層了.shell
TASKCTL主要能夠完成串行、並行、依賴、互斥、執行計劃、定時、容錯、循環、條件分支、遠程、負載均衡、自定義條件等各類不一樣的核心調度功能。數據庫
根據不一樣的功能分類,TASKCTL將客戶端分爲Admin(平臺管理)、Designer(流程集成開發環境)、Monitor(流程監控管理)三套不一樣的軟件。
**Admi:**平臺節點管理、任務類型管理、工程管理、應用設置、全局變量管理以及流程導入導出等功能。
**Designer:**平臺流程代碼信息管理、代碼設計編輯、流程圖形編輯、規則語法適時檢測功能以及編譯發佈等功能。
**Monitor:**圖形方式監控、多角度統計監控、流程起停重置、任務鎖定、任務重作、信息對象查詢等。
TaskCtl最大的問題是做爲調度系統須要一臺單獨的調度服務器,而且和Hadoop生態圈的產品搭配不是很好,因此考慮另行辦法在Hadoop集羣上使用調度工具.
使用Oozie的緣由是由於公司使用的是Ambari集羣管理工具,自帶Oozie插件安裝,同時Oozie支持Java API調度,會在工做中用到Java語言的緣故,選擇了Oozie.
oozie是一個workflow(工做流)協調系統,是由Cloudera公司貢獻給Apache的,主要用來管理Hadoop做業(job).屬於web應用程序,由oozie client和oozie server兩個組件構成.
oozie server運行於java servlet容器(tomcat)中的web程序.
①對於較爲複雜的Hadoop做業系統來講,單純的依靠shell腳本方式,手工方式調度是的流程更加難以控制.
②複雜系統的算法須要不少不一樣的做業(如mr,Java程序,shell腳本,hivesql,sqoop,spark等)按照特定的順序,串行並行,不一樣時間,不一樣條件進行執行,就須要oozie這樣的調度系統作支撐,將複雜問題簡單化.
①將hadoop生態系統中常見的mr任務啓動,hdfs操做,shell調度,hive操做等經過統一的方式進行連貫調度.
②將複雜的依賴關係,時間觸發,事件觸發使用xml語言進行表達,提升開發效率.
③一組任務使用一個DAG(有向無環圖)來表示,圖形化的表達,流程邏輯更加清晰.
④支持不少種任務調度,能完成大部分的hadoop任務處理.
⑤程序定義支持EL常量和函數,寫過shell腳本的小夥伴使用根本沒難度.
在網上找了一個oozie架構圖,以下:
oozie包含四大服務組件:
workflow: 用於支持動做有向無環圖(DAG)的設計和執行,能夠按照特定的順序執行mr,hive和shell等節點.
coordinator: 用於定時調度特定的 workflow 進行執行,能夠基於事件,資源存在,傳遞參數等自動執行.
bundle: 批量設定一組coordinator執行.
SLA(Service Level Agreement, oozie服務器等級協定): 用於程序執行過程的日誌跟蹤.
如上圖,oozie調度自己就是一個mr程序,開始,執行,結束或者失敗,簡單易懂.
因此咱們能夠思考一下,在oozie調度mr程序時,其實同一時間是運行了兩個mr的,一個是調度自己,一個是任務.
任務自己是一個有向無環圖(DAG)
圖中fork標籤後面的 MR job 和 Hive job 是並行執行的,都成功後經過 join 節點合併.
coordinator是一個定時服務,經過定時來固定頻率的執行任務,這裏的功能相似crontab.
bundle的做用就是設定多個coordinator定時服務按批次執行,這樣使得多個任務也造成一個DAG.
單獨安裝: 須要安裝server端和client端
組件安裝: 使用Ambari進行oozie組件添加(可使用HA)
注意:若是使用CDH集羣管理工具,也是一鍵配置,由於我是直接組件式安裝,這裏就不細講了,有須要的小夥伴能夠聯繫我,看狀況寫一下ambari配置oozie.
節點內存配置:
這裏的節點內存配置可能會涉及到oozie調度阻塞的問題,這個在以後有時間整理一下整個問題現象以及解決辦法,這裏就看一下
#(節點併發),決定了你能夠同時執行幾個action
oozie.service.callablequeueservice.callable.concurrency
#(隊列大小)
oozie.service.callablequeueservice.queue.size
#(擴展)一些擴展相關
oozie.service.ActionService.executor.ext.classes
複製代碼
ambari配置oozie元數據
Ambari默認數據庫爲Derby.
咱們配置時,無特殊需求狀況下,通常默認選擇mysql
選擇數據庫類型,庫名,用戶名,url鏈接串,驅動,密碼
測試鏈接成功便可.
進入oozie文件夾
將ext-2.2.tar.gz解壓放到./libext/ext-2.2目錄下
這裏有時候會出現oozieUI界面沒法訪問問題,以後更新一篇文章,簡單說明一下.
狀態 | 含義說明 |
---|---|
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
別驚訝,今年的主題就是愛與和平,希望我能一直用下去...
按例按例,個人我的公衆號:魯邊社,歡迎關注,分享更多的技術文章和技術資料