一文帶你瞭解數棧百萬級分散式排程引擎DAGScheduleX
公交車伴隨著我們的日常生活已是隨處可見,不同路線的公交車根據各自的時間表有序發出,到達站點,接上站臺的乘客再緩緩駛向下一站……早高峰會有短區間的加班車,發車間隔也更短,夜半時分的班次則間隔更長。這一切都服從於公交總站的排程。
在大資料平臺中,也會有各式各樣的任務需要按照一定的時間間隔和先後順序有序進行,而管理這一切的就是排程引擎。它不僅要讓任務按時按點的執行,更要面對種種複雜的場景,例如:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Superior Scheduler:帶你瞭解FusionInsight MRS的超級排程器
- 熬夜之作:一文帶你瞭解Cat分散式監控分散式
- 深入瞭解Python的Dask分散式排程程式 - selectfromPython分散式
- 帶你快速瞭解 MongoDB 分散式叢集MongoDB分散式
- 一文帶你瞭解 chatgptChatGPT
- 理論+實踐,帶你瞭解分散式訓練分散式
- 一文帶你深入瞭解 Lambda 表示式和方法引用
- 一文帶你瞭解容器探針
- 一文帶你瞭解nginx基礎Nginx
- 一文帶你瞭解文字識別
- 一文帶你瞭解HDFS技術
- 分散式任務排程分散式
- 一文帶你瞭解 Spring 的@Enablexxx 註解Spring
- 一文帶你瞭解Java反射機制Java反射
- 一文帶你瞭解 JS Module 的始末JS
- 【星課堂】一文帶你瞭解webSocketWeb
- 一文章帶你瞭解微服務微服務
- Smartbi:一文帶你瞭解企業級BI工具的設計思路
- 分散式排程任務-ElasticJob分散式AST
- 一文帶你徹底瞭解大資料處理引擎Flink記憶體管理大資料記憶體
- 一步一圖,帶你瞭解分散式架構的前世今生分散式架構
- 從兩個模型帶你瞭解DAOS 分散式非同步物件儲存模型分散式非同步物件
- ? 一文帶你瞭解多檔案混淆加密加密
- 一文帶你瞭解什麼是工控機?
- 一文帶你瞭解python中的多型Python多型
- 一文帶你瞭解執行緒池原理執行緒
- 一文帶你瞭解Java的命名規範!Java
- 乾貨分享!帶你瞭解數棧FlinkX實時採集原理與使用
- LTS分散式任務排程部署分散式
- 一文帶你瞭解 JVM 的垃圾回收機制JVM
- 共享WiFi專案盈利如何?一文帶你瞭解WiFi
- 一文帶你瞭解 WGCLOUD 監控硬碟故障 SMARTGCCloud硬碟
- 一文帶你瞭解python語言命名規則!Python
- 帶有分散式鎖的Go計劃任務排程器- DEV分散式Godev
- 帶你瞭解webpackWeb
- 帶你瞭解分散式系統的資料一致性問題分散式
- 一篇文章帶你瞭解——Kotlin協程Kotlin
- 一文帶你瞭解內部開發者門戶