1. 程式人生 > 其它 >中國聯通改造 Apache DolphinScheduler 資源中心,實現計費環境跨叢集呼叫與資料指令碼一站式訪問

中國聯通改造 Apache DolphinScheduler 資源中心,實現計費環境跨叢集呼叫與資料指令碼一站式訪問

截止2022年,中國聯通使用者規模達到4.6億,佔據了全中國人口的30%,隨著5G的推廣普及,運營商IT系統普遍面臨著海量使用者、海量話單、多樣化業務、組網模式等一系列變革的衝擊。

當前,聯通每天處理話單量超過400億條。在這樣的體量基礎上,提高服務水平,為客戶提供更有針對性的服務,也成為了聯通品牌追求的終極目標。而中國聯通在海量資料彙集、加工、脫敏、加密等技術與應用方面已嶄露頭角,在行業中具有一定的先發優勢,未來勢必成為大資料賦能數字經濟發展的重要推動者。

在 Apache DolphinScheduler 4月 Meetup 上,我們邀請到了聯通軟體研究院的柏雪松,他為我們分享了《DolphinScheduler在聯通計費環境中的應用》。

本次演講主要包括三個部分:

  • DolphinScheduler在聯通的總體使用情況

  • 聯通計費業務專題分享

  • 下一步的規劃

柏雪松 聯通軟研院 大資料工程師

畢業於中國農業大學,從事於大資料平臺構建和 AI 平臺構建,為 Apache DolphinScheduler 貢獻 Apache SeaTunnel(Incubating) 外掛,併為 Apache SeaTunnel(Incubating) 共享 alluxio 外掛

01  總體使用情況

首先給大家說明一下聯通在DolphinScheduler的總體使用情況:

  • 現在我們的業務主要執行在3地4叢集

  • 總體任務流數量大概在300左右

  • 日均任務執行差不多5000左右

我們使用到的DolphinScheduler元件包括Spark、Flink、SeaTunnel(原Waterdrop),以及儲存過程中的Presto和一些Shell指令碼,涵蓋的業務則包含稽核,收入分攤,計費業務,還有其他一些需要自動化的業務等。

02 業務專題分享

​01 跨叢集雙活業務呼叫

上文說過,我們的業務執行在3地4叢集上,這樣就免不了叢集之間的互相的資料交換和業務呼叫。如何統一管理和排程這些跨叢集的資料傳輸任務是一個重要的問題,我們資料在生產叢集,對於叢集網路頻寬十分敏感,必須有組織地對資料傳輸進行管理。

另一方面,我們有一些業務需要跨叢集去呼叫,例如A叢集資料到位後B叢集要啟動統計任務等,我們選擇 Apache DolphinScheduler作為排程和控制,來解決這兩個問題。

首先說明下我們跨叢集資料傳輸的流程在AB兩個叢集上進行,我們均使用HDFS進行底層的資料儲存,在跨叢集的HDFS資料交換上,根據資料量大小和用途,我們將使用的資料分為小批量和大批量資料,向結構表,配置表等。

對於小批量資料,我們直接將其掛載到同一個Alluxio上進行資料共享,這樣不會發生資料同步不及時導致的版本問題。

  • 像明細表和其他大檔案,我們使用Distcp和Spark混合進行處理;

  • 對於結構表資料,使用SeaTunnel on Spark的方式;

  • 通過Yarn佇列的方式進行限速設定;

  • 非結構資料使用Distcp傳輸,通過自帶的引數Bandwidth進行速度限制;

這些傳輸任務都是執行在DolphinScheduler平臺上面,我們整體的資料流程主要是A叢集的資料到位檢測,A叢集的資料完整性校驗,AB叢集之間的資料傳輸,B叢集的資料稽核和到位通知。

強調一點:其中我們重點用到了DolphinScheduler自帶的補數重跑,對失敗的任務或者不完整的資料進行修復。

在完成了跨叢集的資料同步和訪問,我們還會使用DolphinScheduler進行跨地域和叢集的任務呼叫。

我們在A地有兩個叢集,分別是測試A1和生產A2,在B地有生產B1叢集,我們會在每個叢集上拿出兩臺具有內網IP的機器作為介面機,通過在6臺介面機上搭建DolphinScheduler建立一個虛擬叢集,從而可以在統一頁面上操作三個叢集的內容;

Q:如何實現由測試到生產上線?

A:在A1測試上進行任務開發,並且通過測試之後,直接將worker節點改動到A2生產上;

Q:遇到A2生產出了問題,資料未到位等情況怎麼辦?

A:我們可以直接切換到B1生產上,實現手動的雙活容災切換;

最後我們還有些任務比較大,為滿足任務時效性,需要利用兩個叢集同時計算,我們會將資料拆分兩份分別放到A2和B1上面,之後同時執行任務,最後將執行結果傳回同一叢集進行合併,這些任務流程基本都是通過DolphinScheduler來進行呼叫的。

請大家注意,在這個過程中,我們使用DolphinScheduler解決了幾個問題:

  • 專案跨叢集的任務依賴校驗;

  • 控制節點級別的任務環境變數;

02 AI開發同步任務執行

1、統一資料訪問方式

我們現在已經有一個簡易的AI開發平臺,主要為使用者提供一些Tensorflow和Spark ML的計算環境。在業務需求下,我們需要將使用者訓練的本地檔案模型和叢集檔案系統打通,並且能夠提供統一的訪問方式和部署方法,為解決這個問題,我們使用了Alluxio-fuse和DolphinScheduler這兩個工具。

  • Alluxio-fuse打通本地和叢集儲存

  • DolphinScheduler共享本地和叢集儲存

由於我們搭建的AI平臺叢集和資料叢集是兩個資料叢集,所以在資料叢集上我們進行一個數據的儲存,利用Spark SQL或者Hive進行一些資料的預加工處理,之後我們將處理完的資料掛載到Alluxio上,最後通過Alluxio fuse跨級群對映到本地檔案,這樣我們基於Conda的開發環境,就可以直接訪問這些資料,這樣就可以做到統一資料的訪問方式,以訪問本地資料的方法訪問叢集的資料。

2、資料指令碼一站式訪問

分離資源之後,通過預處理大資料內容通過資料叢集,通過我們的AI叢集去處理訓練模型和預測模型,在這裡,我們使用Alluxio-fuse對DolphinScheduler的資源中心進行了二次改動,我們將DolphinScheduler資源中心連線到Alluxio上,再通過Alluxio-fuse同時掛載本地檔案和叢集檔案,這樣在DolphinSchedule上面就可以同時訪問在本地的訓練推理指令碼,又可以訪問到儲存在hdfs上的訓練推理資料,實現資料指令碼一站式訪問。

03 業務查詢邏輯持久化

第三個場景是我們用Presto和Hue為使用者提供了一個前臺的即時查詢介面,因為有些使用者通過前臺寫完SQL,並且測試完成之後,需要定時執行一些加工邏輯和儲存過程,所以這就需要打通從前臺SQL到後臺定時執行任務的流程。

另一個問題是Presto原生沒有租戶間的資源隔離問題。我們也是對比了幾個方案之後,最後結合實際情況選擇了Presto on Spark方案。

因為我們是一個多租戶平臺,最開始給使用者提供的方案是前端用Hue介面,後端直接使用原生的Presto跑在物理叢集上,這導致了使用者資源爭搶佔的問題。當有某些大查詢或者大的加工邏輯存在時,會導致其他租戶業務長時間處於等待狀態。

為此,我們對比了Presto on Yarn和Presto on Spark,綜合對比效能之後發現Presto on Spark資源使用效率會更高一些,這裡大家也可以根據自己的需求選擇對應的方案。

另一方面,我們使用了原生Presto和Presto on spark共存的方式,對於一些資料量較小,加工邏輯較為簡單的SQL,我們直接將其在原生Presto上執行,而對於一些加工邏輯比較複雜,執行時間比較長的SQL,則在Presto on spark上執行,這樣使用者用一套SQL就可以切換到不同的底層引擎上。

此外,我們還打通了Hue到DolphinScheduler定時任務排程流程。我們在Hue上進行SQL開發調製後,通過儲存到本地Serve檔案,連線到Git進行版本控制。

我們將本地檔案掛載到Alluxio fuse上,作為SQL的同步掛載,最後我們使用Hue,通過DolphinScheduler的API建立任務和定時任務,實現從SQL開發到定時執行的流程控制。

04 資料湖資料統一治理

最後一個場景是資料湖資料統一管理,在我們自研的資料整合平臺上,使用分層治理的方式對資料湖資料進行統一的管理和訪問,其中使用了DolphinScheduler作為入湖排程和監控引擎。

在資料整合平臺上,對於資料整合、資料入湖、資料分發這些批量的和實時的任務的,我們使用DolphinScheduler進行排程。

底層執行在Spark和Flink上,對於資料查詢和資料探索這些需要即時反饋的業務需求,我們使用嵌入Hue接入Spark和Presto的方法,對資料進行探索查詢;對於資料資產登記同步和資料稽核等,直接對資料來源檔案資訊進行查詢,直接同步底層資料資訊。

最後一個場景是資料湖資料統一管理,在我們自研的資料整合平臺上,使用分層治理的方式對資料湖資料進行統一的管理和訪問,其中使用了DolphinScheduler作為入湖排程和監控引擎。

在資料整合平臺上,對於資料整合、資料入湖、資料分發這些批量的和實時的任務的,我們使用DolphinScheduler進行排程。

底層執行在Spark和Flink上,對於資料查詢和資料探索這些需要即時反饋的業務需求,我們使用嵌入Hue接入Spark和Presto的方法,對資料進行探索查詢;對於資料資產登記同步和資料稽核等,直接對資料來源檔案資訊進行查詢,直接同步底層資料資訊。

目前我們整合平臺基本上管理著460張資料表的質量管理,對資料準確性和準時性提供統一的管理。

03 下一步計劃與需求

01 資源中心

在資源中心層面,為了方便使用者之間的檔案共享,我們計劃為全使用者提供資源授權,同時根據它的歸屬租戶,分配租戶級別的共享檔案,使得對於一個多租戶的平臺更為友善。

02 使用者管理

其次與使用者傳許可權相關,我們只提供租戶級別的管理員賬賬戶,後續的使用者賬戶由租戶管理員賬戶建立,同時租戶組內的使用者管理也是由租戶管理員去控制,以方便租戶內部的管理。

03 任務節點

最後是我們的任務節點相關的計劃,現在已在進行之中:一方面是完成SQL節點的優化,讓使用者能夠選擇一個資源中心的SQL檔案,而不需要手動複製SQL;另一方面是HTTP節點對返回的json自定義解析提取欄位判斷,對複雜返回值進行更為友好的處理。

04 參與貢獻

隨著國內開源的迅猛崛起,Apache DolphinScheduler 社群迎來蓬勃發展,為了做更好用、易用的排程,真誠歡迎熱愛開源的夥伴加入到開源社群中來,為中國開源崛起獻上一份自己的力量,讓本土開源走向全球。

參與 DolphinScheduler 社群有非常多的參與貢獻的方式,包括:

貢獻第一個PR(文件、程式碼) 我們也希望是簡單的,第一個PR用於熟悉提交的流程和社群協作以及感受社群的友好度。

社群彙總了以下適合新手的問題列表:https://github.com/apache/dolphinscheduler/issues/5689

非新手問題列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A"volunteer+wanted"

如何參與貢獻連結:https://dolphinscheduler.apache.org/zh-cn/docs/development/contribute.html

來吧,DolphinScheduler開源社群需要您的參與,為中國開源崛起添磚加瓦吧,哪怕只是小小的一塊瓦,匯聚起來的力量也是巨大的。

參與開源可以近距離與各路高手切磋,迅速提升自己的技能,如果您想參與貢獻,我們有個貢獻者種子孵化群,可以新增社群小助手微信(Leonard-ds) ,手把手教會您( 貢獻者不分水平高低,有問必答,關鍵是有一顆願意貢獻的心 )。

新增小助手微信時請說明想參與貢獻。

來吧,開源社群非常期待您的參與。

05 活動推薦

當資料資源成為生產發展乃至於生存過程中必不可少的要素,企業該如何通過資料整合幫助企業資料服務全生命週期落地呢?5月14日,資料整合框架 Apache SeaTunnel(Incubating)將邀請一站式資料整合平臺 Apache InLong(Incubating)的技術專家與開源貢獻者們,一同來到直播間,與大家暢談使用Apache SeaTunnel(Incubating)與Apache InLong(Incubating)後的實踐經歷與心得體會。

本次活動受疫情影響仍以線上直播的形式開展,活動現已開放免費報名,歡迎掃描下圖二維碼,或點選“閱讀原文”免費報名!

直播連結:https://www.slidestalk.com/m/777