助力長城汽車數據管道平臺連接“數據孤島”,加強數據一元化,Apache DolphinScheduler 的角色定位

講師簡介

file

長城汽車-IDC-數據中臺部-劉永飛 高級工程師

我是長城汽車 IDC-數據中臺部的劉永飛,給大家分享一下我們自研的一個數據同步工具平臺,以及在使用這個工具過程中遇到的問題。今天的分享主要有四個部分:

  1. 我們自研的數據管道工具平臺的定位和功能;
  2. DolphinScheduler 在這個數據管道平臺中的應用;
  3. 總結了我們在使用 DolphinScheduler 時遇到的一些問題;
  4. 對於數據管道平臺的總結。

數據管道

本章節我將介紹一下我們自研的數據管道平臺,包括技術架構、支持多種數據源、支持多種管道、主要界面、引擎設置、數據類型映射、人工告警和推廣幾個方面。

平臺簡介

數據管道是一個基於分佈式技術構建的數據傳輸平臺,支持多種數據源海量數據的實時、離線的方式傳輸。

數據管道可通過簡單的頁面配置即可完成數據傳輸,操作過程簡單且高效,降低用戶使用門檻;內設告警機制,傳輸任務出現異常可第一時間通過釘釘將信息發送具體責任人。

我們從立項之初,其實是爲了解決長城汽車在數據方面的一些問題,主要目標就是連接數據孤島,加速數據的一元化。大家知道凡是涉及到數據,數據孤島問題就是一個繞不開的問題,我們就希望能夠通過數據管道連接好各個業務線、各個領域、各個系統,真正的打破數據孤島。 另一個目標就是加速數據一元化了,數據一元化是長城汽車在數智化轉型過程中一個關鍵目標,做數據一元化的第一步就是數據的快速彙集,我們也能夠承擔好這個快速彙集數據的角色。

技術架構

給大家介紹一下我們的這個管道平臺的技術架構。 file

整個架構中,最左邊是一個數據源的源端,也就是整個數據的起點。最右邊就是數據源的目的端,是數據的目的地。通過中間的這個數據管道,可以實現數據的傳輸,中間最下邊就是數據管道資源池。

在數據管道中有一個資源池的概念,我們把它分爲公共資源和私有化資源。公共資源是我們平臺提供的,公共資源也做到了資源隊列隔離,相互之間不會有影響。如果用戶對於資源有特殊要求,我們也支持用戶提供機器,提供私有化的資源。

在資源之上就是管道引擎層,引擎層中是我們自研的數據傳輸引擎,細節就不在這裏體現了。 最上面的 web 層,我們提供了項目級隔離,任務管理、資源管理、日誌查看、告警等能力,更加友好的讓用戶使用我們平臺。

支持多種數據源

截止到當前的V2.1.4版本,數據管道平臺可以支持 23 種數據源,基本上涵蓋了主流的關係型數據庫常見的大數據組件。 file file

支持多種管道

在現有支持的 23 種數據源基礎上,細分到離線任務、實時任務的全量同步、增量同步維度後,數據管道平臺可支持將近 900 種管道。

以常見的關係型數據庫 MySQL 做爲數據源爲例,一共可以支持 38 個管道。

file

操作簡單、容易上手

這是數據管道的 UI 界面,我們自研的初衷就是要簡單,通過簡單的交互,用戶錄入源端數據源、目的端數據源,連通性測試通過後,就可以進行任務的創建了。通過簡單的頁面配置,用戶很快就可以創建出一個能夠支持大數據量同步的任務。

file

主要界面

這是數據源的管理用戶界面,你可以根據你想要的類型進行對應的數據源連接參數創建,下面這張圖以一個離線任務創建任務爲例,來展示新建任務設置的界面。 file

引擎設置

數據管道平臺可以根據任務使用的計算引擎(Spark/Flink)來設置任務運行過程中所需的資源參數。

數據管道平臺可以根據任務使用的計算引擎(Spark/Flink)來設置任務運行過程中所需的資源參數。 file

數據類型映射

目標庫設置時可以方便的進行源端字段和目標端字段的映射。我們收集了Spark/Flink的數據類型映射字典,用於進行源端數據類型到目標數據類型的轉換。 file

任務告警

用戶在創建任務的時候開啓告警設置並選擇通知用戶後,如果任務執行失敗,會在第一時間將告警信息發給通知用戶的釘釘賬戶。

如果用戶已經在數據管道平臺處於登錄狀態,則點擊”查看錯誤日誌”可以直接跳轉到任務實例的提交日誌界面,查看日誌詳情。

file

方便、豐富的日誌查看

在任務創建成功,設置任務”上線”後,點擊”手動運行”便可以運行任務了。數據管道平臺提供了豐富的日誌管理功能,供用戶查看任務執行信息。用戶可以通過平臺生成的日誌鏈接很方便的查看任務向集羣提交時的提交日誌、任務在集羣運行時的運行日誌,如果是實時任務,還可以直接跳轉到 Flink的web UI 進行任務信息的查看。 file

推廣成果

目前該產品已經在我們內部的一些部門及子公司進行了使用,創建任務 300+ 個,每日近 2000 個任務實例運行 。

DolphinScheduler 在數據管道平臺中的應用

主要流程

我們的數據管道依賴了 DolphinScheduler(V3.0.0)的能力,用戶在數據管道上創建任務、運行任務,會經海豚調度器進行調度,提交工作流後,最終任務將在集羣中執行。 file 對大家可以看到,最左側就是數據管道平臺創建數據源,創建任務,數據管道根據不同的數據源獲取模板,更新模板,綁定配置文件,最終在數據管道上點執行任務,就會依賴 DolphinScheduler 的能力去執行工作流,提交任務,並在 Yarn 集羣中執行。同時在這個過程中,DolphinScheduler 會收集到提交任務的日誌,我們利用這個能力,在我們的平臺上可以查看任務的實時日誌。

數據管道使用了哪些DolphinScheduler的API服務

數據管道前臺使用了我們自定義的 UI 界面,後臺的許多功能使用了DolphinScheduler 的 API 服務,包括項目相關的操作,任務狀態相關、數據源相關等,具體如下圖所示:

file

數據管道創建任務會生成工作流定義數據

用戶在數據管道上創建任務之後會生成一個 Resource Name,還有一些配置文件。配置文件會上傳到資源中心,上傳成功之後會有一個Resource ID,之後我們會組裝數據格式,把它合成任務所需要的參數,然後再組裝出來一個任務節點的定義,形成一個任務節點定義列表。任務節點關係就形成任務節點關係列表,任務節點位置就形成任務節點位置列表。任務的執行類型、全局參數等數據組裝起來之後,到 DolphinScheduler 創建功能的定義接口,這樣創建工作流的流程就做完了。

然後我再講幾個特色的功能給大家分享一下。

參數設置

用戶在數據管道創建任務的時候可以進行參數的設置。這裏我們使用了 DolphinScheduler 內置的時間參數進行參數複製,在過濾條件裏邊使用定義好的參數進行數據過濾。

file

離線任務比較常見的是補數,這一塊,我們通過參數式的功能支持用戶在界面上進行參數的自定義,如上圖所示。

提交日誌

從數據管道平臺運行任務後,我們會調用DolphinScheduler 的運行工作流接口,我們DolphinScheduler 的提交任務日誌詳情接口拿到提交任務日誌數據,用戶可以刷新、下載日誌。 file

擴充實例列表支持實時任務斷點續傳

數據管道平臺在創建任務時支持創建多個子任務。每個子任務均可查看實例列表。這裏我們調用了 DolphinScheduler 的實例列表接口來展示運行信息,並在該接口的基礎上,添加了實例的運行狀態、運行開始時間、運行結束時間、實例運行時長等。同時,我們提供了實時任務的停止、運行按鈕,可支持實時任務的斷點續傳功能。 file

在使用DolphinScheduler時遇到的問題

現在我來說一下我們團隊小組的成員在使用 DolphinScheduler 時遇到的一些問題。當然遇到的問題很多,我摘出了三個比較有代表性的問題。並給出了我們對應的解決方案。

問題1:獲取到的任務狀態不對

最初,我們在數據管道平臺調用工作流實例列表接口獲取實例的信息時,發現接口返回的 state字段值是 SUCCESS,但其實任務是執行失敗的。於是就去仔細研究了一下這個 state 字段,發現其實這只是海豚調度器提交任務時獲取到的一個狀態,並不能真實反映任務的運行狀態,於是我們在改接口的基礎上又添加了實例的運行狀態的邏輯封裝。

問題2:DolphinScheduler 集羣擴容,workgroup 分組遇到的問題

這個問題是這樣,我們在擴容時新增的節點的也加入到了默認的 default 組,由於新擴容的節點和現在的 work 節點屬於不同的 Hadoop 集羣,這樣的話,提交任務到 default 組,會存在這個組的節點不是屬於同一個集羣而報錯。所以需要把這些新增的節點根據hadoop集羣而進行分組。

最初我們修改了 install_env.sh 配置文件裏面的 works 設置,分發文件,重啓集羣,但是通過DolphinScheduler web 界面發現 work分組設置沒有生效,新節點還是屬於 default 組。爲什麼沒生效呢?找了好長的時間,最後發現新節點的 worker-server 的application.yaml 配置裏面看到 groups 是 default,於是修改 default 爲新的workgroup 名稱,再次重啓DolphinScheduler 集羣,分組就顯示正常了。

問題3:資源中心配置

這個說起來也是因爲我們的 DolphinScheduler 上面有兩個 Hadoop 集羣,配置一個 hdfs,提交到另一個集羣的任務可能會存在找不到文件的情況。我們知道對於 standalone 環境,可以選擇本地文件目錄作爲上傳文件夾,我們想了兩個方案,一個是 NFS 文件共享,另一個是 OSS,我們選擇了後者,OSS 通過服務器掛載就像普通磁盤一樣使用方便,還有就是 OSS 底層是多副本存儲,數據存儲上和NFS相比更安全。

總結

說完了我們所遇到的問題,最後總結一下我在使用 DolphinScheduler 過程中的一些心得體會吧!

首先,得益於 DolphinScheduler 強大的能力、豐富的文檔、火熱的社區等多方面綜合因素,我們在技術選項的時候首選了DolphinScheduler。

也得益於這個選擇,截止到當前數據管道最新版爲止,DolphinScheduler 對數據管道平臺提供了強有力的支撐,使我們的開發工作重心可全面投入到數據管道本身產品功能上去,跟工作流調度有關的實現直接調用 DolphinScheduler 的 API 服務即可,我們會在此基礎上添加了針對數據管道平臺場景的邏輯補充去完善數據管道的產品功能。

最後,在後續的數據管道版本迭代中,我們會根據功能需求,繼續深入研究我們尚未體驗和使用的 DolphinScheduler 功能,也希望 DolphinScheduler 社區能夠一直活躍下去, 讓 DolphinScheduler 能夠越來越好。

本文由 白鯨開源科技 提供發佈支持!

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