一文帶你瞭解數棧百萬級分散式排程引擎DAGScheduleX

數棧DTinsight發表於2021-03-25

公交車伴隨著我們的日常生活已是隨處可見,不同路線的公交車根據各自的時間表有序發出,到達站點,接上站臺的乘客再緩緩駛向下一站……早高峰會有短區間的加班車,發車間隔也更短,夜半時分的班次則間隔更長。這一切都服從於公交總站的排程。

在大資料平臺中,也會有各式各樣的任務需要按照一定的時間間隔和先後順序有序進行,而管理這一切的就是排程引擎。它不僅要讓任務按時按點的執行,更要面對種種複雜的場景,例如:

    10分鐘執行一次的週期任務執行了11分鐘,下一週期是否要直接開始計算
    需要A任務執行完成後才執行的B任務,等待了一天還未等到A執行完畢,是否該繼續等待
    十萬個任務同時被提交,該以怎樣的順序進行執行

問題種類繁多,如果沒有一個健壯智慧的排程引擎,是無法像有序的公交車系統一樣支撐起一個大資料平臺的任務執行的。

在市場上存在許多的排程框架,比如:Quartz、Elastic-Job、XXL-JOB等,但是他們僅支援定時提交任務,就好比固定班次的公交車,雖然能按時到達站點,卻難以面對早晚的乘車高峰。這樣單一的排程方式是遠遠滿足不了“曲折離奇、複雜多變”的業務場景。這個時候我們數棧自研的百萬級分散式排程引擎--DAGScheduleX就上場啦,它不僅滿足定時功能,內建豐富的策略來應對不同情況下的場景,如:資源限制、快速失敗、優先順序動態調整、快速過期、上下游排程狀態依賴。
數棧支援基礎定時排程與複雜跨週期依賴策略。

在整個數棧架構中,DAGScheduleX作為數棧平臺應用和底層大資料叢集的紐帶,起著承上啟下的作用,在叢集資源範圍內,協調著任務資源分配,安排著任務提交執行與週期性排程。
一、DAGScheduleX的主要流程
二、多叢集配置和多租戶隔離

在實際的資料開發中,我們可能會有開發、測試等多環境。若要將任務提交在對應的叢集下,我們只需要在數棧的控制檯上配置好不同的叢集環境,並繫結不同的租戶,此時任務提交會根據不同租戶實現叢集隔離。
    1. 控制檯可以繫結不同型別的叢集: 如生產環境A Hadoop、 生產環境B LibrA
    2. 多個租戶可繫結一個叢集
    3. 提交任務時,透過tenantId 區分目標叢集了

三、例項生成和提交

DAGScheduleX目前支援多種計算元件,如Flink、Spark、TensorFlow、Python、Shell 、Hadoop MR、Kylin、Odps、RDBMS(多種關係型資料庫)等等,所有上層應用提交任務都只要找好對應的外掛型別就可以執行了。
DAGScheduleX支援自定義任務型別,擴充套件新的外掛也是非常的方便,只要定義好對應的外掛typeName並實現IClient中的定義的介面方法就可以。介面方法有以下:

    init(初始化)方法
    judgeSlots(資源判斷)方法
    submitJob(提交任務)方法
    getJobStatus(獲取任務狀態)方法
    getJobLog(獲取任務執行日誌)方法
    cancelJob(取消任務)方法
一個Task(任務)提交到DAGScheduleX,就會提前一天生成好第二天的Job(例項)任務,到了執行的當天他們都會按照規定好的排程時間去執行,然後再獲取執行結果。當然補資料和立即執行是不受限的,DAGScheduleX還支援跨租戶間任務上下游依賴、任務自依賴、任務優先順序調整、控制檯任務佇列管理、運維中心任務監控等功能。
四、任務告警

在上下游依賴鏈路較長的時候,一個上游Job(例項)失敗就可能導致下游的資料出現問題。對於這種情況,DAGScheduleX支援多種場景的監控告警:

    執行超過規定時長
    執行失敗
    任務未執行
    任務停止

控制檯告警通道不僅支援釘釘、簡訊、郵件等通用告警方式還支援使用者自定義的告警通道:

    引入DAGScheduleX的告警sdk
    實現ICustomizeChannel中的自定義告警邏輯
    控制檯告警通道上傳打包好的jar
    應用中配置對應的告警場景

五、總結

DAGScheduleX是一個能對任務進行例項生成,例項排程、例項提交、例項運維、例項告警的分散式任務排程引擎。而數棧的離線計算、流計算、演算法開發等所有的套件都依賴於排程引擎來執行任務,是很重要的樞紐。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995740/viewspace-2764822/,如需轉載,請註明出處,否則將追究法律責任。

相關文章