深入淺出聊Taier—大資料分散式視覺化DAG任務排程系統

語言: CN / TW / HK

導讀:

上週,袋鼠雲數棧全新技術開源規劃——DTMO(DTstack Meetup Online)的第一場直播圓滿完成。袋鼠雲數棧大資料開發專家、Taier專案主導人偷天為大家帶來了《Taier入門介紹》的分享,我們將直播精華部分做了整理,帶大家再次回顧內容,加深技術細節的瞭解。

 

你能看到👇👇👇

▫ Taier發展歷程

▫ Taier架構設計和功能詳解

▫ Taier具體應用和未來規劃

 

點選連結,檢視直播影片回放

https://www.bilibili.com/video/BV13L4y1L71w?spm_id_from=333.1007.top_right_bar_window_history.content.click

 

 

歡迎加入開源框架技術交流群

(釘釘群:30537511)

 

 

開源專案技術交流

ChunJun

https://github.com/DTStack/chunjun

https://gitee.com/dtstack_dev_0/chunjun

 

Taier

https://github.com/DTStack/Taier

https://gitee.com/dtstack_dev_0/taier

MoleCule

https://github.com/DTStack/molecule

https://gitee.com/dtstack_dev_0/molecule

演講 / 偷天

整理 / 向山

Taier發展歷程

Taier是袋鼠雲數棧大資料家族的開源專案之一 ,於2022年2月22日正式在github上開源,它是一個分散式視覺化的DAG任務排程系統,旨在降低ETL開發成本、提高大資料平臺穩定性,讓大資料開發人員可以在Taier直接進行業務邏輯的開發,而不用關心任務錯綜複雜的依賴關係與底層的大資料平臺的架構實現,將工作的重心更多地聚焦在業務之中。

 

2021年4月,數棧技術團隊確定了以DAGScheduleX為主,複合多個專案工程的核心板塊的開源計劃;

2021年9月,技術團隊完成了專案雛形;

2021年11月,我們重構了DAGScheduleX的工程程式碼,並將之正式命名為Taier;

2022年2月22日,經過不斷的打磨和不懈的努力,Taier終於正式開源1.0版本。

開源並不意味著專案的結束,恰恰是專案的開始,未來Taier將持續自我迭代,積極吸取社群力量,不斷優化,推出更優越的版本。

 

Taier的前世與雛形

Taier最早之前在數棧內的雛形是當時負責數棧“承上啟下”的基礎元件DAGScheduleX

 

它承上對接各個上層應用(離線開發、實時開發、演算法開發、標籤引擎、資料服務、資料質量、資料資產),啟下相容多叢集多版本(Hadoop、CDH、TDH、HDP、MRS),實現任務例項的分散式排程執行。在作為數棧的基礎元件服務過程中,DAGScheduleX累計為數百家企業提供了大資料任務排程能力,在前期為後續的更新整合積累了大量的實戰經驗。

 

DAGScheduleX可以做到很多,但還遠遠不夠。數棧邊運用邊迭代,漸漸地看見圍繞著它開發更多功能,一體化解決問題的可能性。這時,Taier雛形已經具備清晰的構想,作為一個任務排程系統,Taier初步設計具備以下這些模組。

v1.0的里程碑意義

回頭看,Taier的開發之路是由4組具有里程碑意義的資料鋪成的:

  • Taier開發團隊累計解決了70+個大大小小的 issue ;

  • 總共311次程式碼commit ;

  • 90w+程式碼修改行數

  • 初始的9位Contributor。

道阻且長,我們卻已經走了這麼遠。

 

架構設計和功能詳解

在架構設計與功能特點上,Taier整體架構是使用外掛式的開發模式,在任務開發下面有排程模組和各項元件,也包括數棧開源家族的Chunjun等等。

 

Taier功能特點

Taier的功能特點有下面幾個比較重要的方面:

1.任務型別Spark SQL、資料同步(流計算任務);

2.控制檯:包括佇列管理、資源管理、多叢集管理等;

3.運維中心:比如任務管理、週期排程、補資料等;

4.外掛化開發:具體包括 taier-plugin、、DatasourceX、Chunjun等幾個外掛。

 

 

Taier功能特徵

隨著不斷更新完善,現在的Taier已經具有以下的幾種特性:

 

穩定性

  • 單點故障:去中心化的分散式模式

  • 高可用方式:Zookeeper

  • 過載處理∶分散式節點+兩級儲存策略+佇列機制。每個節點都可以處理任務排程與提交;任務多時會優先快取在記憶體佇列,超出可配置的佇列最大數量值後會全部落資料庫;任務處理以佇列方式消費,佇列非同步從資料庫獲取可執行例項

  • 實戰檢驗:得到數百家企業客戶生產環境實戰檢驗

     

    易用性

  • 支援大資料作業Spark、Flink的排程;

  • 支援眾多的任務型別,目前支援Spark SQL、Chunjun

  • 視覺化工作流配置︰支援封裝工作流、支援單任務執行,不必封裝工作流、支援拖拽模式繪製;

  • DAG監控介面:運維中心、支援叢集資源檢視,瞭解當前叢集資源的剩餘情況、支援對排程佇列中的任務批量停止、任務狀態、任務型別、重試次數、任務執行機器、視覺化變數等關鍵資訊一目瞭然;

  • 排程時間配置:視覺化配置;

  • 多叢集連線:支援一套排程系統連線多套Hadoop叢集。

 

版本

  • 支援Spark 、Flink等引擎的多個版本共存,例如可同時支援Flink1.10、Flink1.12(後續開源)

  • Kerberos支援Spark、Flink

  • 豐富,支援3種時間基準,且可以靈活設定輸出格式。

     

    擴充套件性

  • 設計之處就考慮分散式模式,目前支援整體Taier 水平擴容方式;排程能力也隨叢集線性增長。

 

Taier重要概念

下面從原理和操作層面給大家進一步介紹Taier,還有一些具體概念的解釋。

 

 

任務與例項

方便起見,數棧在Taier中提出“任務”和“例項”兩個概念,例如資料開發的資料同步這項工作稱之為“任務”,而已經提交併且配置了週期屬性的任就稱之為“例項”。

 

例項具體操作

 

在Taier中,例項有這幾種構建的方式:

1.基於Zookeeper選舉Master節點參與Job 例項構建,T+1構建JobGraph

2. JobGraph構建前check &clean DirtyData

3.依據Task、TaskTask的資料(JobGraph)生成Job .JobJob例項資料

4.Master節點控制例項資料的負載均衡持久化入資料庫

 

 

構建完畢後,例項處理的幾種方式如下圖所示:

 

 

其中:

1.三種任務型別:週期任務、補資料任務、重跑任務,統一排程方式

2. Job 優先入佇列(1),佇列容量不足入DB (2)

3.當佇列容量空餘時,非同步執行緒從DB載入資料入佇列(3)

4. Job出佇列後進行任務提交

 

處理完成後,例項提交我們也做了思考,具體設計:

1.記憶體優先順序佇列,控制Job有序執行

2.多執行緒併發提交(可配置)

3. Job 執行超時判斷(可配置)

4. Job資源不足/失敗重試進入延遲佇列(可配置)﹔避免長時間佔用提交權

 

 

Taier 的例項狀態大家主要應該關注標誌停止的幾個,具體有下面幾種:

1. WaitEngine:記憶體佇列中的Job、記憶體容量不足儲存在DB中的Job(預設500 )

2. Lacking:資源不足暫時等待的Job(預設2min)

3. Restarting:失敗重試的Job(預設2min )

4. Finshed、Failed、Canceled、Killed:結束狀態

 

 

Taier的整個控制檯設計分為公共元件、排程元件、儲存元件和計劃元件。通過一個租戶ID,拿到這個叢集下common, YARN-conf等的四個配置資訊,組成包含一個任務外掛所有資訊的pluginlnfo。將它解析之後,一些資源初始化上傳,以便我們快取對應的客戶端。 

 

 

Taier Client Plugin這裡,要快速開發一個外掛要注意以下幾點:

  • 一種任務型別對應一個外掛,即一個jar包

  • 自定義類載入器(Classloader) 破壞雙親委派優先載入( Child-First)外掛

  • 外掛實現IClient介面方法

  • SPI: 在classpath 下的META-INF/services/目錄下,建立以介面IClient 全限定名命名的檔案,內容是上一步中實現類的全限定名

 

 

具體應用

Taier 部署環境依賴

  • 大資料元件:Flink、Spark (ThriftServer)、Hive

  • 三方框架:Datasourcex (4.3.0)、Chunjun(1.10.5)

  • 基礎元件: JDK版本:JDK 1.8 + 、MySQL版本:MySQL 5.7.33+、Zookeeper版本:Zookeeper 3.5.7 

  • Hadoop 2.7.3 :HDFS、Yarn

 

環境依賴配置完畢之後,Taier編譯&啟動按下面流程操作:

 

  • 後端: /build/mvn-build.sh,檢查lib、pluginLibs目錄

DB初始化,sql/create.sql、sql/insert.sql、Datasourcex、Chunjun外掛、配置conf/application.properties

  • 前端:安裝Node、yarn、mini-cup 和pm2、yarn build、檢查dist目錄、cup.config.js

 

編譯啟動之後,Taier應用的具體操作的步驟如下:

 

  • 登入、新建租戶

  • 依次配置叢集元件、公共元件、排程元件,上傳hadoop zip配置·儲存元件,同上

  • 計算元件:Spark相關(Spark SQL)、Hive相關(Hive sQL)、Flink相關(資料同步)

  • 租戶繫結:資源使用情況

  • 任務開發&執行操作介面如下圖:

 

圖片

 

 

未來規劃

 

目前袋鼠雲開源家族已經匯齊TaierChunjun雙劍,未來我們計劃整合Chunjun,豐富資料同步支援的資料來源、實時採集、FlinkSQL;同時加入Docker 部署,使用docker使Taier能進一步簡化,輕量化部署依賴;整合OceanBase v1.2版本中,預計對OceanBase外掛高優整合;

 

未來,Taier會持續在實戰中自我迭代,也會積極汲取社群的力量,我們的開發計劃已經在路上,每月也會有固定一到兩場的線上直播分享,線下meetup也在積極計劃中。大家保持關注,數棧希望與大家一起進步。

 

「其他文章」