數(shù)棧百萬級分布式調(diào)度引擎——DAGScheduleX能做啥?
數(shù)棧是云原生—站式數(shù)據(jù)中臺PaaS,我們在github和gitee上有一個有趣的開源項目:FlinkX,F(xiàn)linkX是一個基于Flink的批流統(tǒng)一的數(shù)據(jù)同步工具,既可以采集靜態(tài)的數(shù)據(jù),也可以采集實時變化的數(shù)據(jù),是全域、異構(gòu)、批流一體的數(shù)據(jù)同步引擎。大家喜歡的話請給我們點個star!star!star!
github開源項目:https://github.com/DTStack/flinkx
gitee開源項目:https://gitee.com/dtstack_dev_0/flinkx
公交車伴隨著我們的日常生活已是隨處可見,不同路線的公交車根據(jù)各自的時間表有序發(fā)出,到達站點,接上站臺的乘客再緩緩駛向下一站……早高峰會有短區(qū)間的加班車,發(fā)車間隔也更短,夜半時分的班次則間隔更長。這一切都服從于公交總站的調(diào)度。
在大數(shù)據(jù)平臺中,也會有各式各樣的任務需要按照一定的時間間隔和先后順序有序進行,而管理這一切的就是調(diào)度引擎。它不僅要讓任務按時按點的執(zhí)行,更要面對種種復雜的場景,例如:
10分鐘執(zhí)行一次的周期任務執(zhí)行了11分鐘,下一周期是否要直接開始計算
需要A任務執(zhí)行完成后才執(zhí)行的B任務,等待了一天還未等到A執(zhí)行完畢,是否該繼續(xù)等待
十萬個任務同時被提交,該以怎樣的順序進行執(zhí)行
問題種類繁多,如果沒有一個健壯智能的調(diào)度引擎,是無法像有序的公交車系統(tǒng)一樣支撐起一個大數(shù)據(jù)平臺的任務執(zhí)行的。
在市場上存在許多的調(diào)度框架,比如:Quartz、Elastic-Job、XXL-JOB等,但是他們僅支持定時提交任務,就好比固定班次的公交車,雖然能按時到達站點,卻難以面對早晚的乘車高峰。這樣單一的調(diào)度方式是遠遠滿足不了“曲折離奇、復雜多變”的業(yè)務場景。這個時候我們數(shù)棧自研的百萬級分布式調(diào)度引擎--DAGScheduleX就上場啦,它不僅滿足定時功能,內(nèi)置豐富的策略來應對不同情況下的場景,如:資源限制、快速失敗、優(yōu)先級動態(tài)調(diào)整、快速過期、上下游調(diào)度狀態(tài)依賴。

數(shù)棧支持基礎(chǔ)定時調(diào)度與復雜跨周期依賴策略。
在整個數(shù)棧架構(gòu)中,DAGScheduleX作為數(shù)棧平臺應用和底層大數(shù)據(jù)集群的紐帶,起著承上啟下的作用,在集群資源范圍內(nèi),協(xié)調(diào)著任務資源分配,安排著任務提交運行與周期性調(diào)度。

一、DAGScheduleX的主要流程

二、多集群配置和多租戶隔離
在實際的數(shù)據(jù)開發(fā)中,我們可能會有開發(fā)、測試等多環(huán)境。若要將任務提交在對應的集群下,我們只需要在數(shù)棧的控制臺上配置好不同的集群環(huán)境,并綁定不同的租戶,此時任務提交會根據(jù)不同租戶實現(xiàn)集群隔離。
1. 控制臺可以綁定不同類型的集群: 如生產(chǎn)環(huán)境A Hadoop、 生產(chǎn)環(huán)境B LibrA
2. 多個租戶可綁定一個集群
3. 提交任務時,通過tenantId 區(qū)分目標集群了
三、實例生成和提交
DAGScheduleX目前支持多種計算組件,如Flink、Spark、TensorFlow、Python、Shell 、Hadoop MR、Kylin、Odps、RDBMS(多種關(guān)系型數(shù)據(jù)庫)等等,所有上層應用提交任務都只要找好對應的插件類型就可以執(zhí)行了。

DAGScheduleX支持自定義任務類型,擴展新的插件也是非常的方便,只要定義好對應的插件typeName并實現(xiàn)IClient中的定義的接口方法就可以。接口方法有以下:
init(初始化)方法
judgeSlots(資源判斷)方法
submitJob(提交任務)方法
getJobStatus(獲取任務狀態(tài))方法
getJobLog(獲取任務執(zhí)行日志)方法
cancelJob(取消任務)方法

一個Task(任務)提交到DAGScheduleX,就會提前一天生成好第二天的Job(實例)任務,到了執(zhí)行的當天他們都會按照規(guī)定好的調(diào)度時間去運行,然后再獲取執(zhí)行結(jié)果。當然補數(shù)據(jù)和立即運行是不受限的,DAGScheduleX還支持跨租戶間任務上下游依賴、任務自依賴、任務優(yōu)先級調(diào)整、控制臺任務隊列管理、運維中心任務監(jiān)控等功能。

四、任務告警
在上下游依賴鏈路較長的時候,一個上游Job(實例)失敗就可能導致下游的數(shù)據(jù)出現(xiàn)問題。對于這種情況,DAGScheduleX支持多種場景的監(jiān)控告警:
執(zhí)行超過規(guī)定時長
執(zhí)行失敗
任務未運行
任務停止
控制臺告警通道不僅支持釘釘、短信、郵件等通用告警方式還支持用戶自定義的告警通道:
引入DAGScheduleX的告警sdk
實現(xiàn)ICustomizeChannel中的自定義告警邏輯
控制臺告警通道上傳打包好的jar
應用中配置對應的告警場景
五、總結(jié)
DAGScheduleX是一個能對任務進行實例生成,實例調(diào)度、實例提交、實例運維、實例告警的分布式任務調(diào)度引擎。而數(shù)棧的離線計算、流計算、算法開發(fā)等所有的套件都依賴于調(diào)度引擎來執(zhí)行任務,是很重要的樞紐。