Pandora資料工廠之任務排程引擎
任務排程引擎
排程引擎作為整個叢集的大腦,主要為平臺中資料採集、資料計算、資料查詢、資料清洗等各種需要排程任務的場景,提供統一的任務排程功能。
一、執行引擎
執行引擎主要負責任務請求、任務排程和任務執行,整個架構採用master-slave架構,包括客戶端、註冊中心、任務管理中心、執行器和任務元資料等。
- 客戶端JobClient
JobClient為執行引擎的web客戶端,提供任務的配置、管理、監控等功能。針對資料採集、資料計算、資料查詢、資料清洗等各種需要排程任務的場景問題,在客戶端介面進行任務配置和排程配置後,通過restful api向jobmanager傳送任務排程請求。當然,也可以直接呼叫restful api向jobmanager傳送任務排程請求
- 註冊中心Discover
是將jobmanager和執行器結合到一起的服務。執行器節點啟動後向註冊中心進行服務註冊,jobmanager從註冊中心Discover獲得可以正常工作的執行器節點,進行任務排程執行。
- 任務元資料
Job的元資料儲存採用Mysql,儲存Job的配置、依賴關係、執行歷史、資源配置、告警配置等元資料。
- 管理中心JobManager
JobManager主要功能提供http服務,接收並處理JobClient提交的所有操作;與元資料通訊,維護Job元資料;負責任務的統一配置維護、觸發、排程、監控度資訊。JobManager主要包括服務註冊、HttpServer、資源管理、任務監控、排程服務、日誌管理以及Failover等功能。
HttpServer:接收JobClient排程任務的請求;
JobMonitor: 監控正在執行的Job狀態、監控任務池、監控等待執行的Job。
- 執行器
執行引擎專注於任務的執行等操作,執行器接收JobManager發出的任務執行請求並執行任務邏輯,並收集Job的執行狀態,維護至元資料庫。
二、任務管理
任務管理包括任務操作、任務的排程配置、觸發方式、任務執行狀態和日誌蒐集等功能。
- 任務操作
提供任務的新增、編輯、刪除以及任務執行狀態的獲取、任務啟動、掛起、暫停和重新執行等功能。
- 任務型別
除了Hadoop生態圈的MapReduce、Hive、Pig等,還支援其他任何語言開發的任務,如Java、Shell、Python、Spark等;
- 任務觸發方式
任務觸發方式主要有三種:
- Cron方式
- 任務依賴方式
- 直接呼叫api觸發任務的單次執行
- 執行流程
- 使用者通過JobClient向JobManager提交任務請求,httpserver模組接受任務請求;
- 執行引擎是以任務流為單位進行排程執行的,JobManager解析任務流,並把任務存放到任務池,同時把任務流和任務元資料寫入元資料儲存mysql;
- 排程器Scheduler根據蒐集各節點資源情況,檢測任務是否觸發,併發起排程請求,把任務傳送給執行器執行,並寫入排程日誌
- 執行器接受任務請求把任務存放到任務佇列裡,通過任務執行緒池執行任務,把執行日誌寫入本地日誌檔案並通過日誌服務傳遞給JobManager,執行狀態寫入元資料。如果是提交到yarn資源執行的hadoop任務,資源管理器會根據任務提交使用者進行許可權認證和資源需求校驗,如果認證失敗或資源不滿足需求,任務執行失敗,任務監控模組把執行失敗狀態寫入元資料,並把異常日誌寫入日誌並通過日誌服務傳遞給JobManager;
- 任務執行過程中,執行器通過回撥服務把任務執行狀態實時傳遞給JobManager的任務監控服務;
- 任務執行結束後,執行器執行回撥任務,在回撥請求執行結束之後會將執行結果回撥通知JobManager。
- 資源管理
任務是任務排程的執行單位,主要包括執行的程式、指令碼和所需要的資源。資源管理主要負責執行任務執行過程中依賴的資源進行管理,資源型別包括jar、指令碼等
- 路由策略
- ROUND(輪詢):根據輪詢演算法選擇線上的機器;
- RANDOM(隨機):隨機選擇線上的機器;
- CONSISTENT_HASH(一致性HASH):每個任務按照Hash演算法固定選擇某一臺機器,且所有任務均勻雜湊在不同機器上。
- LEAST_FREQUENTLY_USED(最不經常使用):使用頻率最低的機器優先被選舉;
- LEAST_RECENTLY_USED(最近最久未使用):最久為使用的機器優先被選舉;
- FAILOVER(故障轉移):按照順序依次進行心跳檢測,第一個心跳檢測成功的機器選定為目標執行器併發起排程;
- 回撥服務
JobManager作為Web服務部署時,一方面承擔排程中心功能,另一方面也為執行器提供API服務。執行器在接收到任務執行請求後,執行任務,在執行結束之後會將執行結果回撥通知JobManager。
- 日誌管理
執行引擎的日誌大體上有三種:監控日誌、排程日誌和任務執行日誌。JobManager每次進行任務排程,都會記錄一條任務排程日誌。執行器在任務執行過程中產生的任務執行日誌。監控器產生的Job狀態日誌和監控日誌。
- 失敗策略
三、流程管理
- 任務超時控制:支援自定義任務超時時間,任務執行超時將會主動中斷任務;
- 任務失敗重試:支援自定義任務失敗重試次數,當任務失敗時將會按照預設的失敗重試次數主動進行重試;
- 任務失敗告警;預設提供郵件方式失敗告警,同時預留擴充套件介面,可方便擴充套件簡訊、釘釘等告警方式;
任務流程管理主要是管理任務執行之間得依賴關係,多個任務通過依賴關係組成任務流程。執行引擎是以任務流為單位進行任務排程的。
1. 依賴配置
任務配置時,可選擇任務的前置依賴。只有前置依賴任務執行成功,後置的任務才可執行。前置依賴可以選擇多個。不同週期的任務也可依賴,可以指定不同週期依賴任務的時間偏移如當日任務可依賴上可月的月任務。
每個任務都對應有一個任務ID,同時,每個任務支援設定屬性“子任務ID”,通過“任務ID”可以匹配任務依賴關係。當父任務執行結束並且執行成功時,將會根據“子任務ID”匹配子任務依賴,如果匹配到子任務,將會主動觸發一次子任務的執行。
2. 流程操作
流程操作主要包括任務流程的查詢、建立、編排和刪除以及以圖形化的方式展示任務之間存在的依賴關係。使用者可以通過JobClient提供的圖形介面進行任務的編排。
3. 排程配置
排程配置用於任務的排程規則的配置,能夠滿足各任務型別的排程策略。排程規則又分為:
1) crontab表示式
2) 時間排程規則如分鐘、小時、天、周和月排程週期配置
3) 頻率排程規則
四、外掛管理
外掛式架構是一種理想的高擴充套件性的架構,應用廣泛。為了考慮執行任務執行模式的可擴充套件性,任務執行模式採用外掛式架構。
- 外掛定義
結合不通的任務型別,針對各種資料處理流程的不同需求(資料採集分發,清洗轉換,核心處理,資料探勘等),為使用者提供視覺化,可管理,可編輯,可擴充套件的外掛開發。外掛開發把已配置管理的資料來源、元資料封裝成不同的業務任務。
- 外掛使用
平臺提供滿足不同業務型別的外掛,並按照業務型別進行分類。使用者可採用拖拽方式,將分類中的外掛圖示拖拽到開發區域,不同外掛圖示間可連線形成完整業務處理DAG流程,並將流程掛載到排程平臺執行。滿足豐富靈活的業務開發需求。
- 外掛擴充套件
可根據業務需求配置開發新的外掛,實現業務處理的可擴充套件性。外掛的擴充套件主要包括外掛頁面的動態配置和外掛邏輯包的上傳管理。
- 外掛管理
支援外掛(包括採集外掛,其它外掛等)的增刪改查,授權和版本管理。
- 外掛開發者可以檢視外掛的資訊:外掛型別,外掛名,外掛版本,外掛狀態,外掛新增修改時間和使用者等資訊。
- 外掛開發者可通過外掛配置服務動態的進行動態配置和外掛依賴包上傳,完成外掛和新增和修改操作。外掛管理可定義外掛所屬型別,如資料採集,資料加工,資料配送等
- 外掛開發者可以對外掛進行授權,可開放給所有角色使用,也可以授權給具體角色或使用者使用。
- 具備版本管理和版本回退功能。外掛開發完成後需要提交稽核,只有稽核通過後才能生效並形成正式版本。外掛開發人員可以選擇不同的版本號進行回退。
無題
暗停針線燭影長,落絮輕沾撲繡廊。
銀河漸落微風起,桂樹輕搖一院香。