天穹數(shù)倉自治能力在大模型時代的新實踐
一、大數(shù)據(jù)自治的背景
1. 大數(shù)據(jù)自治涵蓋的范疇
大數(shù)據(jù)自治是一個廣義的概念,涵蓋從數(shù)據(jù)采集到數(shù)據(jù)接入、計算、存儲、應(yīng)用等一系列問題。它不僅包括數(shù)據(jù)治理,還涉及數(shù)據(jù)研發(fā)和業(yè)務(wù)發(fā)生問題的解決。大數(shù)據(jù)自治的目的是管理數(shù)據(jù)的整個生命周期,從數(shù)據(jù)產(chǎn)生到數(shù)據(jù)使用,再到數(shù)據(jù)銷毀。
2. 業(yè)務(wù)、技術(shù)的快速發(fā)展
在過去的三十年中,數(shù)倉的發(fā)展歷程經(jīng)歷了從傳統(tǒng)數(shù)倉到大數(shù)據(jù)數(shù)倉,再到數(shù)字?jǐn)?shù)倉的三個階段。傳統(tǒng)數(shù)倉如 Oracle、DB2 等,架構(gòu)單一,主要處理結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)規(guī)模較小,實時性較低。
隨著 Google 三篇論文的發(fā)表,開始進入大數(shù)據(jù)時代,Hive、Hadoop/MR、Spark 等大數(shù)據(jù)數(shù)倉先后問世,產(chǎn)生了 Lambda、Kappa 等較為復(fù)雜的架構(gòu),處理的數(shù)據(jù)規(guī)模呈爆炸性增長,結(jié)構(gòu)化、半結(jié)構(gòu)化和異構(gòu)化數(shù)據(jù)并存,實時性要求更高,計算也變得更為復(fù)雜。
從 2020 年至今,處于數(shù)智數(shù)倉時代,實時性和計算復(fù)雜性進一步提升,架構(gòu)也更加復(fù)雜,包括流批一體、湖倉一體等,大模型也逐漸應(yīng)用到數(shù)倉之中。
隨著數(shù)倉技術(shù)的發(fā)展,數(shù)據(jù)處理的流程從傳統(tǒng)的 ETL,變?yōu)榇髷?shù)據(jù)時代的 ELT,當(dāng)前又提出了 EtLT 的概念。
3. 數(shù)倉模式演進:EtLT 崛起
EtLT 是 ELT 的擴展,其中 Extract、Load、Transform 的含義并沒有改變,在此基礎(chǔ)上提出了小 t 和大 T 的區(qū)別。針對當(dāng)前數(shù)智數(shù)倉的技術(shù)生態(tài),小 t 更緊密地結(jié)合湖倉技術(shù),偏數(shù)據(jù)底層的工程架構(gòu),而大 T 階段則更貼合業(yè)務(wù),結(jié)合大模型的能力,完成偏數(shù)據(jù)上層應(yīng)用的工作。
二、天穹大數(shù)據(jù)自治能力建設(shè)和落地:雙引擎策略
天穹大數(shù)據(jù)自治平臺采用雙引擎策略,結(jié)合 SQL 智能體和傳統(tǒng)機器學(xué)習(xí),推動平臺自治。通過構(gòu)建感知力、觀測力、診斷力和優(yōu)化力,實現(xiàn)對數(shù)據(jù)相關(guān)進程的細(xì)粒度感知和智能優(yōu)化。能力范圍包括從數(shù)據(jù)采集、數(shù)據(jù)接入,到數(shù)據(jù)計算、存儲,再到應(yīng)用的全流程,從資源、計算、研效等各方面進行了優(yōu)化。
最終實現(xiàn)了包括算子粒度的回放和診斷能力的產(chǎn)品化:支持 40 多個算子粒度問題的診斷,并優(yōu)化了 SQL 粒度算子實現(xiàn)了自動 map join 功能,在 Presto 上測試效果顯著,CPU 和內(nèi)存節(jié)省顯著。SQL 引擎自動選擇方面,提升了計算性能,減少了資源浪費。作業(yè)任務(wù)資源優(yōu)化方面,大幅降低了天穹上運行作業(yè)的內(nèi)存和 CPU 成本。除此之外還有 SQL 智能體的優(yōu)化改寫等功能,這些功能在實際應(yīng)用中取得了顯著效果。
1. 感知力
感知力是數(shù)據(jù)系統(tǒng)的重要部分,決定著上層觀測力、診斷力、優(yōu)化力等能力體系建設(shè)的深度。天穹平臺通過 JVM 級別的數(shù)據(jù)感知,已基本覆蓋所有物理機和容器,每天感知的數(shù)據(jù)量達(dá)到了萬億規(guī)模。
2. 觀測力
通過對采集數(shù)據(jù)進行指標(biāo)的聚合和抽象,建立以健康分為核心的數(shù)據(jù)體系,實現(xiàn)任務(wù)進程粒度的數(shù)據(jù)上卷和下鉆操作,使大數(shù)據(jù)生態(tài)的“黑盒”更加透明化,發(fā)現(xiàn)底層指標(biāo)或異常問題。
3. 診斷力
(1)全鏈路診斷能力的構(gòu)建
針對內(nèi)部經(jīng)常遇到的作業(yè)鏈路較長,問題定位和診斷工作繁瑣低效的問題,天穹平臺基于組件粒度構(gòu)建了全鏈路診斷能力,使得用戶能夠清晰地了解當(dāng)前問題發(fā)生在哪個組件,并在此基礎(chǔ)上進行深入挖掘和對比。例如,如果問題發(fā)生在計算引擎?zhèn)?,能夠清晰地告知用戶作業(yè)在計算引擎層是由于資源搶占被 kill,或任務(wù)本身數(shù)據(jù)膨脹、數(shù)據(jù)傾斜等原因?qū)е碌漠惓?,并提供?xì)粒度的判斷。
(2)算子粒度的異常識別
同時,針對 SQL 任務(wù),推出了算子粒度的診斷,可以將實際物理執(zhí)行過程中發(fā)生的異常點與 SQL 邏輯片段對應(yīng)起來,從而幫助用戶在繁雜的計算過程中快速準(zhǔn)確地定位到問題的具體原因。
在實際應(yīng)用中,我們已經(jīng)將算子粒度的回放和診斷能力產(chǎn)品化。這使得用戶能夠回放 SQL 計算的過程,診斷每一個算子的數(shù)據(jù)規(guī)模和資源占用情況。目前,我們已經(jīng)支持了 40 多個算子粒度問題的診斷。
4. 優(yōu)化力
針對在大數(shù)據(jù)計算過程中面臨的挑戰(zhàn),如任務(wù)運行緩慢、數(shù)據(jù)處理速度不理想以及任務(wù)資源啟動困難等問題,構(gòu)建了優(yōu)化力能力體系。在資源方面,針對 Spark 和 Flink 進行了深入優(yōu)化。在性能方面,引入了 SQL 引擎選擇、智能 SQL Hint 和智能 RSS 等技術(shù)。此外,通過 SQL 智能體的構(gòu)建,實現(xiàn)了 SQL 優(yōu)化改寫、語法糾錯和診斷等功能。
(1)數(shù)據(jù)驅(qū)動的資源優(yōu)化
針對 Spark 的資源優(yōu)化,主要構(gòu)建了基于 Spark 歷史運行數(shù)據(jù)的方法,采用白盒和黑盒兩種方式進行調(diào)整。白盒方法通過分析歷史運行過程中資源的實際進程粒度占用情況,擬合出適合作業(yè)正確運行的資源參數(shù)。我們根據(jù)歷史運行曲線自定義計算彈性因子,并每天為作業(yè)推薦資源參數(shù)。而黑盒方法則無需用戶感知,算法基于時間和性能兩個維度自動調(diào)整參數(shù),并每天定時進行迭代。通過前一周期的運行結(jié)果,調(diào)整下一周期的參數(shù),并提交到集群中運行。
最終針對一些應(yīng)用組顯著節(jié)省了超過 50% 的內(nèi)存成本和 30% 的 CPU成本,在資源優(yōu)化方面取得了顯著的成果,降低了資源的使用。
(2)SQL 引擎選擇,讓 SQL 計算更加高效
在 SQL 計算引擎選擇方面,根據(jù) SQL 計算邏輯的復(fù)雜度判斷其是 IO 密集型還是 CPU 密集型,并將不同的 SQL 分發(fā)到不同的計算引擎上以提高性能。同時從歷史運行的 SQL 中提取特征,利用 XGBoost 模型進行訓(xùn)練,以優(yōu)化底層的建模過程。
最終通過特征化和模型訓(xùn)練,引擎 failover 規(guī)避率有了顯著提升,進一步降低了資源浪費。
(3)SQL 算子粒度優(yōu)化,反哺計算引擎
除了資源優(yōu)化和 SQL 引擎選擇外,還關(guān)注算子粒度的優(yōu)化。從歷史運行數(shù)據(jù)中挖掘包含算子粒度信息的數(shù)據(jù)記錄,經(jīng)過規(guī)劃處理后形成 SQL 算子粒度的數(shù)據(jù)體系。這有助于支持 SQL 的 CBO 代價模型優(yōu)化。例如,如果提前知道計算過程的數(shù)據(jù)量,可以自動添加 map join 等提示以提升效率。此外,對于每天定時調(diào)度的數(shù)據(jù)計算任務(wù),由于 SQL 邏輯和數(shù)據(jù)量相似,可以通過歷史數(shù)據(jù)進行預(yù)測和優(yōu)化。
最終通過算子粒度的數(shù)據(jù)挖掘,將運行過程中的數(shù)據(jù)量大小和數(shù)據(jù)記錄數(shù)喂給 SQL 代價模型,實現(xiàn)了自動 map join 的功能,顯著提高了 SQL 計算的性能。在 TPC-DS 測試集中,自動 map join 的占比達(dá)到了 57%,顯著提升了 CPU 和內(nèi)存的使用效率。
5. SQL 智能體
由于日常機器計算類型中 SQL 任務(wù)占比很高,且標(biāo)準(zhǔn)化程度較高,天穹結(jié)合大語言模型對于 SQL 的理解力,以優(yōu)化 SQL 性能提升作業(yè)效率為目標(biāo),進行了 SQL 智能體的構(gòu)建。
騰訊內(nèi)部基于混元大語言模型,設(shè)計了多輪對話、問診模式的 SQL 智能體,涵蓋了 prompt 知識庫、function call 等環(huán)節(jié)。
下面介紹一下 SQL 智能體的構(gòu)建過程。首先,通過現(xiàn)網(wǎng)收集 SQL 優(yōu)化和錯誤 SQL,以及 SQL 工單語料庫,在此基礎(chǔ)上建立 SQL 指令集,基于基座模型進行指令微調(diào),并結(jié)合 prompt 強化用戶意圖。
最終通過 SQL 智能體的構(gòu)建,從多方面實現(xiàn)了 SQL 的優(yōu)化改寫和診斷,顯著提升了 SQL 性能。
(1)正確性解析和轉(zhuǎn)換
它能自動將硬查詢中的 SQL 翻譯為為 inner join,并實時對比優(yōu)化前后的 SQL。
SQL 智能體在優(yōu)化改寫方面也取得了顯著的成果。通過底層的 OLAP 引擎測試發(fā)現(xiàn),性能提升了 17.19%。這表明 SQL 智能體能夠有效地優(yōu)化 SQL 計算,提高系統(tǒng)性能。
(2)SQL 長度優(yōu)化
大模型能夠理解長 SQL 內(nèi)容,自動去除不必要的如 order by 的邏輯片段,提高計算效率。
(3)SQL 邏輯簡化
此外,SQL 智能體還能夠簡化 SQL 邏輯,借助臨時表等技術(shù),使得 SQL 計算邏輯更加簡潔和高效。
三、未來規(guī)劃和展望
在未來的規(guī)劃中,我們將繼續(xù)優(yōu)化數(shù)據(jù)存儲和研發(fā)能力,不斷豐富和提升大數(shù)據(jù)自治的能力。最終,我們計劃打造一個湖倉智能自治的解決方案,支撐大數(shù)據(jù)平臺的智能化應(yīng)用,推動大數(shù)據(jù)自治向更高層次發(fā)展。