大數據 通用 調度系統 的設計和實現

目標:

調度的業務類型是針對ETL數據抽取任務、個性化推薦的離線任務、每天的報表、每週的統計報表、月級別的統計報表等,小時級的日誌清洗任務等 能夠按照用戶的配置,準時進行調度。

調度的任務主要是一些腳本文件還有mr寫的jar包程序。任務內部存在子任務的依賴關係,這種依賴關係形成DAG圖,在調度系統中能夠嚴格的按照依賴關係對任務進行調度執行。

整個調度系統有前端和後臺兩個部分,前端支持任務的創建配置,每天跑的實例的查看,新建任務的審覈、郵件組的配置、以及分佈式提交機的配置等幾個大的方面。

在任務創建這部分,用戶可以對代碼git 路徑進行配置 然後調度系統會拉取代碼,然後按照用戶的啓動腳本對代碼進行執行。執行完畢後刪除掉該任務,自定義的日誌信息會轉出到用戶的執行環境目錄下。任務的隔離

新建任務的審覈,用戶新建的任務只有每個開發組的組長確認以後才能真正予以實施。

郵件組的配置 郵件組是用來發報警用的。DAG圖中任意一個子任務失敗都會導致整個任務失敗並停止該任務的執行。同時發出報警郵件到相應郵件組的郵箱和手機中。

分佈式提交機配置  可以配置兩臺提交機 用作主備   如果一臺提交機掛掉會自動切到備份提交機上提交任務  如果用戶選擇了負載均衡提交  那麼就會在多個提交機上提交  其實這個沒有很大的必要

任務運行實例的查看   這個部分是該調度系統比較核心的部分,能夠把調度系統針對每個任務的執行情況展示出來,比如幾點執行 幾點結束,是否需要重跑,子任務的執行情況查看。子任務的日誌查看等。

實現過程:

前端是使用的tomcatspring-mvc構建的一個頁面事件處理,能夠對用戶的操作信息計入mysql數據庫。

調度後臺是使用python寫的,主要是在mysql中讀取作業信息,然後分析作業的調度配置和依賴關係,生成具有執行依賴隊列的調度實例,在正確的時間將調度的實例運行起來。目前是一個master進程 一個worker進程 一個日誌採集進程

Master進程主要負責任務分發,1.在任務級別,判斷哪些任務當前該要執行了,2,同時分析該要執行的任務,按照依賴情況 形成依賴隊列 分發到worker進程中。

Worker的作用一是針對沒有依賴的子任務,直接調度起來執行,針對有依賴的子任務,首先檢查該依賴的子任務是否執行成功,如果執行成功則開始執行,如果執行失敗,則直接標記爲失敗。Worker在執行完該子任務後  會更新自己的執行信息寫入到myql中。

日誌採集進程

主要是針對作業在集羣上執行的過程中,控制檯輸出的日誌信息,用戶自己重定向的日誌由用戶自己負責查看。日誌採集的過程是,針對worker進程標記出的子任務的狀態信息,比如狀態是在運行中,那麼這種需要每分鐘去提取該日誌信息,當用戶在網頁上查看日誌信息時能夠看到是增量的效果,說明任務在不停的執行。針對子任務的狀態是未執行的不提取,針對任務的狀態是執行結束 而且日誌標誌位還沒置爲已提取過時,最後一次提取出來。


詳細的代碼信息我會傳到git上,後期會有更新,目前該調度系統已經穩定運行一年多,每天都有幾百個集羣任務在正常調度。成就感還是不錯。

發佈了119 篇原創文章 · 獲贊 17 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章