etl數據調度平臺系統類別的實現方法及工作流程

什麼是調度系統

調度系統,更確切地說,作業調度系統(Job Scheduler)或者說工作流調度系統(workflow Scheduler)是任何一個稍微有點規模,不是簡單玩玩的大數據開發平臺都必不可少的重要組成部分。

除了Crontab,Quartz這類偏單機的定時調度程序/庫。開源的分佈式作業調度系統也有很多,比較知名的比如:oozie,azkaban,chronos,zeus等等,此外,還有包括阿里的TBSchedule,SchedulerX,騰訊的Lhotse以及我司歷盡十年磨礪的TASKCTL

作業系統的兩大種類

現在市面上的調度系統根據功能性可以分爲兩類定時類作業調度系統&DAG工作流類作業調度系統這兩類系統的架構和功能實現通常存在很大的差異,下面就來跟大家普及一下這兩種作業系統的不同之處;

定時類作業系統

定時類系統的方向,重點定位於大量併發的任務分片執行場景;

在實際應用場景中,通常平時維護工作需要定時執行的業務邏輯相對離散無序,僅僅存在一定的簡單關聯。

例如:

  • 需要定時批量清理一批機器的磁盤空間,
  • 需要定時生成一批商品清單,
  • 需要定時批量對一批數據建索引,
  • 需要定時對一批用戶發送推送通知等等。

核心目標基本兩點:

1.作業分片邏輯支持:將一個大的任務拆分成多個小任務分配到不同的服務器上執行, 難點在於要做到不漏,不重,保證負載平衡,節點崩潰時自動進行任務遷移等

2.高可用精確定時觸發:由於平時經常涉及到實際業務流程的及時性和準確性,所以通常需要保證任務觸發的強實時和可靠性

所以"負載均衡,彈性擴容",“狀態同步”和“失效轉移”通常是這類調度系統在架構設計時重點考慮的特性

DAG工作流類作業調度系統

主要定位於有序作業的調度依賴關係的正確處理,分片執行的邏輯通常不是系統關注的粒度,如果某些作業真的關注分片邏輯,通常交給後端集羣(比如MR任務自帶分片能力)或者具體類型的任務執行後端去實現。

DAG工作流類調度系統所服務的通常是作業繁多,作業之間的流程依賴比較複雜的場景;

如:大數據開發平臺的離線數倉報表處理業務,從數據採集,清洗,到各個層級的報表的彙總運算,到最後數據導出到外部業務系統,一個完整的業務流程,可能涉及到成百上千個相互交叉依賴關聯的作業。

所以DAG工作流類調度系統關注的重點,通常會包括:

  • 足夠豐富靈活的依賴觸發機制(如:時間觸發任務,依賴觸發任務,混合觸發任務)
  • 作業的計劃,變更和執行流水的管理和同步
  • 任務的優先級管理,業務隔離,權限管理等
  • 各種特殊流程的處理(如:暫停任務,重刷歷史數據,人工標註失敗/成功,臨時任務和週期任務的協同等)
  • 完備的監控報警通知機制

小結:這兩類系統的定位目標,並不是絕對沖突矛盾的,並且從目前定時類調度系統的發展來看,也需要處理一些複雜的作業間強依賴關係了,比如 "微批(少量DAG批量作業處理)" 概念的提出。只不過,要同時圓滿的支持這兩大類需求,從實現的角度來說是很困難的,因爲側重點的不同,在架構上多少會對某些方面做些取捨,當前這兩類系統都沒有能夠做到完美的兩者兼顧。

爲什麼需要調度系統

我們都知道大數據的計算、分析和處理,一般由多個任務單元組成(Hive、Sparksql、Spark、Shell等),每個任務單元完成特定的數據處理邏輯。

多個任務單元之間往往有着強依賴關係,上游任務執行併成功,下游任務纔可以執行。比如上游任務結束後拿到 A 結果,下游任務需結合 A 結果才能產出 B 結果,因此下游任務的開始一定是在上游任務成功運行拿到結果之後纔可以開始。

而爲了保證數據處理結果的準確性,就必須要求這些任務按照上下游依賴關係有序、高效的執行。一個較爲基礎的處理方式是,預估出每個任務處理所需時間,根據先後順序,計算出每個任務的執行的起止時間,通過定時跑任務的方式,讓整個系統保持穩定的運行。

一個完整的數據分析任務最少執行一次,在數據量較少,依賴關係較爲簡單的低頻數據處理過程中,這種調度方式完全可以滿足需求。

然而在企業級場景中,更多的是需要每天執行,如果任務數量較多,在任務啓動的時間計算上就將耗費大量時間,另外如果出現上游任務執行時長超出原定預計時間或者運行異常的問題,上述的處理方式將完全無法應對,也會對人力物力造成重複損耗,因此,對於企業數據開發過程來說,一個完整且高效的工作流調度系統將起到至關重要的作用。

寫在最後

TASKCTL目前是暫時唯一提出 "無序定時和有序DAG作業流" 完整概念的調度產品。既可以在定時中處理 "微批" 的控制,也能夠在DAG作業流中處理 "定時" 的控制。

例如:

  • 在大數據分佈式(分片)計算中,對數據進行實時ETL跑批處理,
  • 在ETL作業跑批中,對某個作業或一段分支進行時間窗口內循環定時處理

瞭解產品信息可以參讀:

隨着大數據應用需求的不斷膨脹,數據處理的複雜度和實時性要求越來越高。TASKCTL作爲國內自主研發的專業調度產品,爲企業進入大數據2.0時代做好提前佈局。

對啦,我們的公衆號“敏捷調度taskctl”(ID:gh_79ababc7910b)長期更新互聯網最新資訊、行業內職場趣聞、以及有趣且實用性較高的編程插件和開發框架知識分享之類的

如果你開心的話可以關注一下下呢!期待(๑˙ー˙๑)

社羣討論75273038(qq)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章