基于Apache Linkis構建合合一站式數據開發平臺實踐分享
1. IDS 的簡介
Intsig Data Studio(IDS)是上海合合信息科技股份有限公司,大數據平臺基于微眾WDS社區開源的 Linkis&DSS 組件構建的一站式敏捷數據應用開發管理門戶,面向的主要用戶群體包括數據開發、數據分析、數據產品經理和數據質檢人員等。
對外提供的核心能力包括一站式數據開發交互平臺,支持數據從進來(數據集成),到處理(數據探查、作業調度),到出去(數據服務,BI 報表),到運維(任務運維、數據質量)等全鏈路的可視化操作。
下圖展示了 IDS 在我們大數據平臺中的定位,其上層銜接用戶或各種應用系統,底層聯通各種各樣的計算或存儲引擎。
IDS的定位
2. IDS 的誕生背景
在未引入 Linkis 和 DSS 之前,公司內部缺少一個統一的開發入口,數據平臺中的用戶在進行數據探查、業務上線的過程中要分別登入到不同的組件中進行操作,比如:對庫表元數據的訪問需求,需要使用自研的指標系統或數據地圖;做數據分析時,又要借助于 zeppelin 或 ipython 等工具進行交互式數據查詢;作業流調度發布時,又重度依賴于平臺組同事來編寫Airflow底層復雜的任務依賴描述代碼。
在數據開發的整條鏈路中,涉及到的系統之間無法做到有效聯通,應用孤島問題日漸嚴重,用戶也疲于在各種組件之間反復切換,這種現狀一直影響著大數據平臺用戶的開發效率和使用體驗。同時,多個開發入口的存在,也增加了我們大數據平臺的運維成本,其潛在的數據流出風險也被疊加放大。
在此背景之下,我們需要一個統一的一站式數據開發、分析和可視化的平臺。為此,我們先后調研或試用了商業化的大數據中臺產品,如網易的數帆和阿里的dataworks等。一線大廠開發出來的產品,確實有著一套業界非常領先的標準和規范,以及擁有著非常強大而全面的數據治理能力,但綜合考量我們現有的需求場景和成本投入等多方面因素,我們最終沒有接受商業化的數據中臺解決方案。
不得已,我們又把目光投向了開源界的產品,WDS 順理成章地闖入了我們的視野,雖記不清與 WDS 相識的具體日子,但 WDS 社區及其生態組件所展現出來的能力,著實讓我們怦然心動。
WDS 是一站式、金融級、全連通、開源開放的大數據平臺套件。目前支持的開源組件包括,DataSphere Studio 、Linkis,Qualitis 等。WDS 社區運營給力,成員活躍,自 19 年以來發布的 9 個開源組件,填補了業界“開源體系大數據平臺套件”的空白,受到了各行業的廣泛好評和采用。基于包裝好的輪子,讓眾多中小企業依托開源社區的力量來搭建內部一站式大數據平臺的夢想變得不再遙不可及。
3. IDS——合數據工坊的實踐之路
IDS(合數據工坊)是我們對 Linkis 和 DSS 的統稱,Linkis 作為計算中間件,底層對接各種計算或存儲引擎,上層銜接各種服務或應用,DSS 則提供一站式數據開發管理門戶的基層組件。在現階段,我們使用的 DataSphere Studio 和 Linkis 組件的版本分別是:1.0.1 和 1.0.3。
在這其中,最重要的工作是完成對 Linkis 的適配和應用,我司目前的大數據平臺基于 cdh5.13.1,為此我們修改了 Linkis 中依賴的大數據組件的版本以適配我們的版本,在這個過程中基本沒遇到什么太大的坑,因為自 Linkis1.x 版本以來,針對 CDH5、6 以及其他社區組件版本的兼容性都很好,基本不會出現太大的依賴沖突等問題,即使出現問題,依靠強大且活躍的 Linkis 社區,我們也能得到及時而有效的反饋。
除了與內部 hadoop 等組件做適配兼容之外,針對 Linkis1.1.x 版本中的一些大的特性修復,我們也以 patch 的形式打到了內部 1.0.3 版本里,如:
https://github.com/apache/incubator-linkis/issues/1765
https://github.com/apache/incubator-linkis/pull/1780
現階段是我們 IDS 的建設初期,內部針對 DSS&Linkis 的應用方式或一些小的改造點,我將在下文中從如下幾個方面來敘述:
- 用戶權限
- 引擎增強
- 作業調度
- 數據治理
- 小型優化
3.1 用戶權限
IDS 集成了公司內部的 SSO 登錄方式,用戶掃碼登錄系統之后,不可創建新的工作空間,只能使用統一的公共工作空間,在此工作空間下,不同角色身份的用戶,對 IDS 中集成的組件入口,擁有不同的訪問權限。
IDS
同時,基于 DSS 獨有的 AppConn 設計理念,DSS 可以簡單快速地集成各種上層 Web 系統。目前,在 IDS 中已集成的組件列表包括:數據傳輸,數據探查,數據地圖,運維平臺,數據質量,SLA 治理,數據服務等。
組件列表
DSS AppConn 的相關文檔可參考:https://github.com/WeBankFinTech/DataSphereStudio/blob/master/README-ZH.md
各個系統組件的入口訪問基于 IDS 中的角色及權限管控,組件之間 SSO 互通,共享同一個登錄認證體系。同時,為了更加方便地初始化用戶相關數據,我們增加了用戶數據初始化服務,負責在每個 Linkis 的安裝節點上初始化用戶的數據,如:創建 Linux 用戶和用戶組,創建用戶的 workspace 目錄,為用戶分配統一的工作空間,在 Windows AD 域中創建用戶,SSSD 同步用戶信息到所有集群節點,為用戶導出 keytab 等。
不僅用戶對 IDS 組件入口的訪問受到權限控制,在進入到組件內部之后,具體組件中受保護的資源同樣需要在權限系統上審批。
組件訪問權限
下圖展示組件系統中對應功能模塊的訪問申請與負責人審批。
組件權限申請
3.2 引擎增強
3.2.1 引擎類型擴展
基于 Linkis 官方提供的 JDBC 引擎,我們內部額外增加了 Presto 、 Clickhouse 、 Kyuubi 等引擎,并在 Scripts 中支持了對應引擎類型腳本的提交,以滿足用戶對不同計算引擎的需要,同時滿足用戶對不同類型腳本的區分。
引擎類型擴展
多引擎支持:
多引擎支持
3.2.2 Presto 慢查詢列表
Presto SQL 在我們內部所占比重最大,針對 Presto 引擎,我們為用戶提供了進度提示和慢查詢列表等功能。
Presto慢查詢列表
當前階段,Presto 慢查詢列表的主要功能是為了能直觀體現出來每個用戶提交 SQL 的執行情況,我們的 Presto 集群在未上 k8s 之前,用戶隔離機制還不夠完善,有些用戶提交的 SQL 會占用較大的資源,耗時較長,對其他用戶的 SQL 任務也會產生一定的影響,在舊的平臺模式下,這部分指標數據對開發用戶是不可見的,需要集群維護人員到 Presto UI 上去排查慢查詢的 SQL 任務,無法做到及時有效地響應,這嚴重影響著用戶使用 Presto 查詢數據的體驗。
在這之后,我們在 K8s 環境中部署了 Presto 集群,在 Presto 集群擴縮容,及資源管理方面進行了較大的優化,后續,如有必要,針對 Presto Query 時輸出的指標,我們會繼續從多個維度來分析,并以更好地形式展示給用戶。
3.2.3 JDBC 引擎多數據源的支持
目前,官方在 DSS&Linkis1.0.3 中,對 JDBC 類型引擎的多數據源連接支持還不夠完美,我們在此基礎上做了改良。
JDBC 多數據源支持
如圖,用戶通過切換不同的數據源連接標識,來達到連接不同 JDBC 服務的效果。后續官方會在 1.2.0 版本中支持此功能,詳見:https://github.com/apache/incubator-linkis/issues/2092
3.3 作業調度
DSS 提供了一套作業流設計與上線功能,其底層調度組件 Schedulis 的調度能力依賴于 Azkaban,但我們內部的調度系統一直使用的是 Airflow,在構建 IDS 之前,我們有一套自研的作業流設計和上線平臺—— Cuckoo Cloud ,其 web 化功能類似于 DolphinScheduler ,支持用戶拖拽式的設計工作流,并一鍵發布作業 DAG 到 Airflow 調度平臺上,以彌補 Airflow 在任務上線、依賴設計方面缺少可視化工具的不足。
因此在現階段,我們沒有使用 DSS 原生的工作流設計和發布能力,而是以 appconn 插件的形式集成了我們內部的工作流設計平臺,兩個組件之間打通了 SSO 登錄,共享一套用戶認證體系。
內部的作業流設計組件主要分三層結構,DAG 配置管理、調度單元管理、以及每個調度單元中所包含的任務節點及其依賴關系等。
3.3.1 DAG 配置管理
此處 DAG 配置與 Airflow 上的每個 DAG 信息相對應。
DAG配置
3.3.2 調度單元管理
IDS 平臺用戶把擁有某一具體業務含義的任務節點及其上下游依賴關系劃分到同一個調度單元之中,調度單元的作用不僅強調了某一具體的業務屬性,同時也是為了對一個完整 DAG 進行概念意義上的拆分。
調度單元
3.3.3 調度單元中的任務及其上下游依賴關系
用戶在使用調度設計功能時,有豐富的任務類型可供選擇和組合,幾乎涵蓋了公司內部一條數據開發鏈路中大部分的場景需要,同時,對額外任務節點的支持擴充,也非常快速便捷。
tasks
調度工作流的設計
調度設計
備注,特殊任務節點,如 Tableau、報表刷新、報表發送類型任務。原有的開發模式是,Tableau 數據源刷新任務的定時執行是需要用戶在 tableau server 平臺上創建相應數據源的定時刷新計劃。這會帶來以下幾個問題:
- 任務積壓,每個調度的時間點,都會有批量的數據源刷新任務提交執行,容易出現 Presto 節點負載過高,Spark Thrift Server 的 driver 進程掛掉等問題,這些問題的產生,都會導致數據源刷新任務的失敗。
- Tableau Server 上數據源刷新任務失敗之后,缺少自動重試機制,也無法進行有效預警,如高權重報表刷新失敗后打電話,低權重報表刷新失敗后發企業微信消息等。
- 報表數據源的刷新依賴于數倉批跑任務的完成,但兩者之間分散于不同的調度系統之中,只能預估上游任務的完成時間,來設置下游任務的開始執行時間,一旦上游延遲,下游任務無法做到及時感知,這將導致報表數據缺失。
針對上述問題,我們選擇把報表數據源刷新任務包裝成 Airflow 的任務節點,此舉帶來的成效有:
- 數據源刷新任務上下游依賴強關聯,消除了上游依賴任務缺失導致的下游數據源空刷,報表無數據的問題,同時,任務調度時間被打散,解決了任務運行積壓的隱患。
- 數據源刷新任務支持自定義權重,失敗之后可以自動重試,并能感知遠程計算引擎的健康狀態和自身刷新隊列的冗余,以選擇是否延遲提交刷新任務。在任務重試不過的情況下,可以匹配出不同權重下的報警方式,來告知用戶任務運行失敗的原因。
- 與 SLA 管理平臺打通,實現核心任務全生命周期的 SLA 標準化管理流程,自動為核心報表任務的上游依賴劃分高權重資源隊列,并可以動態調整上游鏈路任務運行時所需的資源,同時,還可以實時監控核心報表上下游任務鏈路的運行狀況,實時進行延遲告警,SLA 任務鏈路未準時指標收集,并發送給各個業務方核心任務的準時率統計指標等。
用戶完成工作流的設計之后,點擊發布按鈕,工作流便會被 Airflow 感知,渲染,繼而進行后續的定時執行,對應 Airflow 上工作流如下圖:
IDS工作流
未來工作流設計平臺的一些需要提升的地方:
- 目前工作流中一些腳本任務開發的時候,不支持腳本的直接執行,需要用戶在 IDS 中執行成功之后,把腳本貼回到工作流平臺上去發布上線。
- 其次,工作流不支持多環境發布、暫停調度及版本管理等高級功能,后續會考慮遷移工作流設計功能到 DSS 中或考慮遷移調度至 DolphinScheduler 中。
3.4 數據治理
3.4.1 數據地圖
數據地圖以不同的安全等級、主題域或業務標簽來劃分數倉庫表和其他存儲系統中的庫表元數據,并對外提供數據檢索能力,用戶通過該平臺可以以較小的成本找到所需的數據、報表、中間件、以及相關實體的血緣。
用戶在 IDS 平臺中查詢數倉、CK 或其他存儲系統中的線上表時,會經過 SQL 攔截器解析出來待操作的表,用戶只有在數據地圖中提交這些表的訪問申請,并被審批通過之后,才被允許繼續執行 SQL。
對應的,Scripts 中庫表元數據列表所能展示的也僅限于授權過的資源,以及用戶在數據地圖中分類創建的一些主題庫的資源,如下圖:
主題庫
數據地圖及主題庫建設
數據地圖
3.4.2 數據流出管理
現階段,IDS 平臺上的數據流出包含如下兩種形式:
- 少量數據下載,主要以 csv、excel 兩種文件格式。
- 全量數據導出,主要以 csv、excel、json 三種文件格式。并且,只有用戶在數據地圖中申請過表的導出權限后,才被允許導出服務器上的全量數據到內網隔離環境。
用戶提交的 SQL 正確接收到結果集之后,便會激活結果集的導出功能,用戶點擊導出按鈕,填寫好數據導出申請的表單,提交之后,數據導出服務檢測到數據導出任務,便開始處理用戶的數據導出需求。
數據導出
用戶可以在數據導出列表頁面中查看自己的數據導出任務最新的執行狀態。
download-data-list
3.4.3. 數據同步
主要用于多種異構數據源之間的數據交換,可實現各部門業務數據在應用層面的互聯互通和信息共享。功能特性:
- 多種數據源支持,包含但不限于 mysql、mongo、odps、es、oss、hive 之間的相互傳輸
- 數據傳輸限流,除了基本的限流算法還支持控制全局的傳輸并發
- 數據傳輸類型豐富,全量、增量、增量融合、拉鏈表
- 自動調參,以達到最好的抽取效率
- Web 端可視化配置,隨工作流設計與調度發布
數據同步
3.4.4 數據質量
數據質量中心通過事前定義監控規則、事中監控數據的生成過程以及事后評估和問題追溯,圍繞完整性、一致性、準確性、有效性和及時性五個方面衡量數據質量, 并依托離線開發中心的數據質量配置,提升企業數據價值。
現有數據質量平臺功能
- 可以添加自定義質量模板規則,模板規則支持 udf、正則
- 有質量評估評分,可以查看表和字段的質量評分
- 可以對臟數據進行保存,方便查看臟數據問題
- 支持強規則的熔斷機制,防止臟數據影響下游數據
- 擁有試跑機制,并且可以查看試跑結果
- 指標看板可以查看歷史的臟數據趨勢
規則列表
數據質量指標
數據質量指標
3.4.5 SLA 治理
SLA 平臺為用戶提供核心數據的申報、SLA 的在線簽署,及簽署后的 SLA 運維管理功能,通過協同全鏈路能力,共同保障申報節點的數據質量。
數據SLA
SLA 指標
SLA指標
3.5 IDS 中一些小的功能改造點或應用項
以下列舉的是一些小的優化項,主要是為了優化用戶的一些使用體驗。
- Scripts 中腳本目錄的復制和剪切功能
- 腳本執行過程中,改變任務進度拉取的固定頻率為漸次遞增頻率
- 腳本文件共享機制,用戶可以共享單個(或多個腳本文件)給其他用戶,并設置該用戶對此腳本的讀寫權限。
share-file
- 組件使用的文檔指引、及視頻教程等完善,以提供給用戶更好的使用體驗。
- 把 Spark 引擎的一些高級參數,增加到配置項中
spark-engine-conf
- IDS 中增加用戶意見反饋一鍵發布功能
意見反饋
4. 總結
當前階段,我們基于 DSS 和 Linkis 完成了內部 IDS 平臺的初步構建,獲取了部分用戶從 zeppelin 平臺過渡到 IDS 平臺的階段性成果,并為社區伙伴們,分享了我們內部實踐過程中的一些自認為值得說一說的點,以及一些小的功能或體驗改造項,以期望各位在調研或初步在使用 WDS 套件的公司或團隊,從我們的“答卷”中能獲取到一些有用的經驗,最后,再次感謝微眾及社區其他開發者大佬們,對我們集成過程中的解疑答惑。