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