azkaban web server原始碼解析

2021-07-09 16:48:01 字數 2227 閱讀 9657

azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web-server(任務上傳,管理,排程),executor-server(接受web-server的排程指令,進行任務執行)。

1.資料表:

projects:工程

project_versions:工程版本資訊已經上傳檔案的資訊(md5,chunk數等

),每次上傳都會覆蓋上乙個flow,並且版本號+1,但是資料表裡不會做舊資料物理刪除

project_permissions:工程許可權配置資訊

project_flows:工程下包含的flow資訊

project_files:工程包含的上傳檔案內容,分成多個chunk儲存

project_events:操作日誌

project_properties:每個job的配置資訊

triggers:排程配置,例如執行週期等。乙個排程對應乙個trigger,webserver啟動的時候會載入所有的trigger到記憶體。

active_executing_flows:執行中的flow,執行完後會delete

executors:執行節點(伺服器的ip埠號以及是否active)

execution_flows:可執行flow,包含了flow的一些資訊以及執行配置資訊(對應資料結構executableflow),其中executor_id是executors表的id

2.資料結構:

node的內部屬性:

level: 距離起始節點的距離(多條路徑的話取最大值),起始節點level為0

edge的內部屬性:

id:getsourceid() + ">>" + gettargetid()

flow的內部屬性:

inedges:key為jobname,value為節點的入邊集合

outedges:key為jobname,value為節點的出邊集合

startnodes:起始node集合,沒有入邊的謂之起始節點

endnodes:結束node結合,沒有出邊的謂之結束節點

每個flow裡能配置報警等資訊

nodedependencies:

map>,例如

}}

flowmap:key為root節點的jobname,value為flow

flowdependencies: key為jobname,value為jobname的集合(依賴的節點屬於另乙個flow)

schedule:

executableflow:可執行的flow,執行的單元,使用者傳遞給executormanager,包含了執行資訊,以及執行配置資訊

executionoptions(成功失敗郵件、併發控制等)

2.上傳job:

(1)把壓縮包存到/temp下

(2)解壓壓縮包到azkaban/temp下

(3)directoryflowloader載入azkaban/temp下的properties檔案以及job檔案

3-1:載入解析properties檔案,properties有繼承覆蓋關係,子目錄的properties裡會繼承覆蓋父目錄裡的properties

3-2:載入解析job檔案,對每個job檔案新建乙個node,設定type(例如command),設定id(為jobname),設定

jobsource(為job檔案相對路徑,相對於azkaban/temp目錄),更新快取(設定

jobpropsmap和nodemap)

(4)job檔案校驗,校驗http job callback

(5)解析job依賴關係,主要是建立資料結構nodedependencies

(6)構造flow,從root節點開始遞迴建立(不被其他節點依賴的節點也就是出度為0的節點稱之為root節點)。

(7)解析flow間的依賴,就是檢查了下flow與flow之間是否有迴圈依賴

3.建立schedule:

(1)解析引數,構造

executionoptions(排程配置,就schedule配置頁面那些引數)

(2)插入trigger表

2-1:判斷排程合法性(是否非週期執行並且排程已過期)

2-2:

2-3:建立triggeraction(觸發器觸發的動作,有很多實現類,比如

executeflowaction,表示執行flow的動作)

JDK LinkedHashMap原始碼解析

今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...

Redux原始碼createStore解讀常用方法

const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...

JDk原始碼解析之四 Vector原始碼解析

具體的三個屬性 解釋看圖中注釋。vector沒有採取arraylist臨界值擴容的辦法,而是每次不夠的時候,直接根據capacity的值來增加。具體怎麼增加後面會說。vector的構造方法如下。簡單粗暴,如果呼叫無參建構函式,直接就將初始容量設定成了10,最終在右側的構造方法裡,將陣列的長度設定為1...