湖倉(cāng)才是數(shù)據(jù)智能的未來?那你必須了解下國(guó)產(chǎn)唯一開源湖倉(cāng)了
國(guó)產(chǎn)唯一的開源數(shù)據(jù)湖存儲(chǔ)框架 LakeSoul 近期發(fā)布了 2.0 升級(jí)版本,讓數(shù)據(jù)智能觸手可及。
湖倉(cāng)一體作為新一代大數(shù)據(jù)技術(shù)架構(gòu),將逐漸取代單一數(shù)據(jù)湖和數(shù)倉(cāng)架構(gòu),成為大數(shù)據(jù)架構(gòu)的演進(jìn)方向。當(dāng)前已有 DeltaLake、Iceberg、Hudi 等國(guó)外開源的數(shù)據(jù)湖存儲(chǔ)框架。LakeSoul 是數(shù)元靈科技研發(fā)的,國(guó)產(chǎn)唯一的開源數(shù)據(jù)湖存儲(chǔ)框架,并于近期發(fā)布了 2.0 升級(jí)版本。本文將結(jié)合大數(shù)據(jù)架構(gòu)的演變歷史及業(yè)務(wù)需求,深度剖析國(guó)產(chǎn)唯一開源湖倉(cāng)一體框架 LakeSoul 帶來的現(xiàn)代化數(shù)據(jù)架構(gòu)和關(guān)鍵業(yè)務(wù)價(jià)值。
數(shù)據(jù)架構(gòu)的演進(jìn)
從傳統(tǒng)數(shù)據(jù)庫(kù)到數(shù)倉(cāng)再到數(shù)據(jù)湖,數(shù)據(jù)架構(gòu)一直伴隨著業(yè)務(wù)需求的驅(qū)動(dòng)不斷迭代,使數(shù)據(jù)應(yīng)用場(chǎng)景向復(fù)雜化、多元化轉(zhuǎn)變,從最初的交易場(chǎng)景,到分析場(chǎng)景,再到混合場(chǎng)景、復(fù)雜分析場(chǎng)景,最后到如今的實(shí)時(shí)混合場(chǎng)景,大數(shù)據(jù)架構(gòu)也在不斷演進(jìn):
在數(shù)據(jù)架構(gòu)演進(jìn)中,不同的架構(gòu)方案也存在著缺陷:
1. 傳統(tǒng)數(shù)倉(cāng)。傳統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)作為一個(gè)中心化的數(shù)據(jù)源,仍然沿用了數(shù)據(jù)庫(kù)的架構(gòu),即計(jì)算存儲(chǔ)耦合在一起,不方便擴(kuò)展,成本較高。并且中心數(shù)據(jù)倉(cāng)庫(kù)通常需要專門團(tuán)隊(duì)來開發(fā)維護(hù),面對(duì)紛繁的業(yè)務(wù)需求往往存在響應(yīng)不及時(shí)等問題。2.Hadoop 數(shù)倉(cāng)。目前有大量的企業(yè)使用 Hadoop + Hive 的方式搭建數(shù)據(jù)倉(cāng)庫(kù)。然而由于 Hive 無(wú)法支持實(shí)時(shí)、流式的場(chǎng)景,需要通過 Lambda 架構(gòu)維護(hù)實(shí)時(shí)、批量?jī)商讛?shù)據(jù)處理邏輯,帶來重復(fù)開發(fā)、數(shù)據(jù)口徑不一致、架構(gòu)復(fù)雜等問題。3. 數(shù)據(jù)湖。數(shù)據(jù)湖使用云上的對(duì)象存儲(chǔ),能夠解決存儲(chǔ)擴(kuò)展性問題。然而數(shù)據(jù)湖原先是為存儲(chǔ)任意類型的數(shù)據(jù)所設(shè)計(jì),缺乏對(duì)元數(shù)據(jù)的組織管理,容易形成數(shù)據(jù)沼澤,難以發(fā)揮數(shù)據(jù)的價(jià)值。4. 湖倉(cāng)一體。湖倉(cāng)一體作為新一代架構(gòu),仍然需要解決 Hadoop/Lambda 架構(gòu)的固有缺陷,即實(shí)時(shí)、批量無(wú)法統(tǒng)一。甚至由于對(duì)象存儲(chǔ)的一些問題,實(shí)時(shí)計(jì)算的存儲(chǔ)變得更加困難,性能也難以滿足新興的業(yè)務(wù)需求;各類 SQL、AI 的計(jì)算框架與對(duì)象存儲(chǔ)的適配也不完善。
數(shù)元靈科技認(rèn)為,解決以上各類問題,首先需要有一套完善的湖倉(cāng)存儲(chǔ),在云上提供數(shù)據(jù)高并發(fā)、高吞吐讀寫的能力和完整的數(shù)倉(cāng)管理能力,并且將這樣的存儲(chǔ)能力以通用的方式提供給多種計(jì)算引擎訪問;這也是數(shù)元靈科技研發(fā) LakeSoul 的初衷。
LakeSoul :構(gòu)建現(xiàn)代化數(shù)據(jù)智能架構(gòu)
LakeSoul 是北京數(shù)元靈科技自主研發(fā)的湖倉(cāng)一體存儲(chǔ)框架,也是目前國(guó)內(nèi)唯一的開源湖倉(cāng)平臺(tái)。LakeSoul 開源項(xiàng)目地址:https://github.com/meta-soul/LakeSoul
作為現(xiàn)代化的數(shù)據(jù)智能架構(gòu)的底層支撐,LakeSoul 具有以下幾個(gè)核心能力:
1. 流批一體的存儲(chǔ)
LakeSoul 在存儲(chǔ)層面,統(tǒng)一支持實(shí)時(shí)和批量?jī)煞N方式對(duì)湖倉(cāng)中的數(shù)據(jù)進(jìn)行更新寫入和讀取,不再需要分別開發(fā)兩套不同的數(shù)據(jù)鏈路。這一方面大幅降低了開發(fā)成本,也消除了兩套鏈路帶來的數(shù)據(jù)口徑不一致等問題,并且使用者不再需要維護(hù)多個(gè)存儲(chǔ)系統(tǒng),能夠節(jié)省大量資源成本。
2. 在數(shù)據(jù)湖上構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)
通過 LakeSoul 在數(shù)據(jù)湖上構(gòu)建數(shù)據(jù)倉(cāng)庫(kù),能夠充分利用云原生架構(gòu)下對(duì)計(jì)算資源和存儲(chǔ)資源的彈性能力。LakeSoul 針對(duì)對(duì)象存儲(chǔ)做了專門的性能優(yōu)化,在數(shù)據(jù)湖上構(gòu)建出完整的實(shí)時(shí)數(shù)倉(cāng)功能,支持?jǐn)?shù)據(jù)的實(shí)時(shí)更新寫入。湖倉(cāng)一體化的方式大幅簡(jiǎn)化基礎(chǔ)設(shè)施的使用門檻,并極大提升資源利用效率和性能。
3. 支持多種數(shù)據(jù)計(jì)算引擎
數(shù)據(jù)的價(jià)值釋放有多種方式,包括如報(bào)表分析和算法模型落地等。LakeSoul 在統(tǒng)一的湖倉(cāng)存儲(chǔ)層之上,支持多種計(jì)算引擎,提供涵蓋數(shù)據(jù)實(shí)時(shí)導(dǎo)入、數(shù)據(jù)分析、BI 報(bào)表、AI 模型訓(xùn)練等多種計(jì)算模式。使用一套湖倉(cāng)存儲(chǔ)即可完成全鏈路的實(shí)時(shí)數(shù)據(jù)智能業(yè)務(wù)搭建,開箱即用。開發(fā)者能夠?qū)WI(yè)務(wù)數(shù)據(jù)的處理邏輯,構(gòu)建以數(shù)據(jù)為中心的開發(fā)范式。
LakeSoul 通過統(tǒng)一的實(shí)時(shí)、批量存儲(chǔ)的核心能力,構(gòu)建了流批一體、湖倉(cāng)一體、分析智能一體的現(xiàn)代湖倉(cāng)數(shù)據(jù)智能架構(gòu)。
基于 LakeSoul 的湖倉(cāng)智能架構(gòu)如下圖所示:
LakeSoul 的核心技術(shù)特性解讀
1. 高可擴(kuò)展的 Catalog 元數(shù)據(jù)服務(wù)
隨著數(shù)據(jù)量的快速增長(zhǎng),數(shù)據(jù)倉(cāng)庫(kù)需要能夠處理快速增加的分區(qū)和文件。LakeSoul 使用 PostgreSQL 數(shù)據(jù)庫(kù)來存儲(chǔ) Catalog 信息,提升元數(shù)據(jù)可擴(kuò)展性和事務(wù)并發(fā)能力。
LakeSoul 通過精心組織元數(shù)據(jù)層表的主鍵和索引,對(duì)一個(gè)葉子級(jí)別分區(qū)只需要做一次主鍵操作就可以獲得這個(gè)分區(qū)的所有信息,以及讀寫當(dāng)前版本的 snapshot 等。一個(gè)分區(qū)的 snapshot 中包含了全量寫入和增量更新的文件完整路徑和提交類型。通過對(duì) snapshot 中文件提交進(jìn)行順序的遍歷,就可以構(gòu)建出該分區(qū)讀取計(jì)劃。這樣一方面分區(qū)信息訪問很高效,另一方面也避免了對(duì)文件目錄的遍歷,對(duì)于 S3、OSS 這樣的對(duì)象存儲(chǔ)系統(tǒng)是比較重要的優(yōu)化手段。LakeSoul 的分區(qū)管理機(jī)制示意:
2. 支持并發(fā)寫和 ACID 事務(wù)
LakeSoul 通過元數(shù)據(jù)服務(wù)實(shí)現(xiàn)了并發(fā)控制,在同一分區(qū)支持多個(gè)作業(yè)并發(fā)更新,通過智能區(qū)分寫入類型來控制合并或回退機(jī)制。具體來說,當(dāng)計(jì)算引擎產(chǎn)出要提交的各個(gè)分區(qū)的文件后,會(huì)首先提交分區(qū)文件更新的信息,例如全量更新或增量更新,然后通過元數(shù)據(jù)事務(wù)操作來更新讀者可見的版本。在檢測(cè)到并發(fā)更新發(fā)生的場(chǎng)景,LakeSoul 會(huì)自動(dòng)區(qū)分寫入類型判斷是否屬于有沖突情形,并決定是自動(dòng)解決沖突還是需要回退數(shù)據(jù)計(jì)算。沖突檢測(cè)的具體規(guī)則如下表所示(X 表示這種沖突不能自動(dòng)解決,會(huì)通過拋異常的方式交給業(yè)務(wù)層處理):
3. 支持增量寫入和 Upsert 更新
LakeSoul 提供了增量追加和行列級(jí)別 Upsert 的功能,支持 Merge on Read 模式,提升數(shù)據(jù)攝入的靈活性和性能。LakeSoul 實(shí)現(xiàn)了高效的 Merge on Read,在表具有主鍵的情況下,LakeSoul 支持了更為高效的 Upsert 機(jī)制。在每個(gè)主鍵哈希分桶內(nèi),LakeSoul 將文件根據(jù)主鍵進(jìn)行排序。執(zhí)行多次 Upsert 后,就獲得了多個(gè)有序的文件。對(duì)于讀取作業(yè),只需要將這些有序文件進(jìn)行歸并,即可完成 Merge on Read。Upsert 的示意如下:
通過這樣的方式,寫入時(shí)不需要讀取并合并數(shù)據(jù),提供了很高的寫入性能。而經(jīng)過優(yōu)化的 Merge Reader 保證了讀性能不受損失。
4. 實(shí)時(shí)數(shù)倉(cāng)功能
LakeSoul 支持流式和批量的寫入,行列級(jí)別更新,通過 SQL 即可完成絕大部分更新操作,使用體驗(yàn)更接近于數(shù)據(jù)庫(kù)。同時(shí),LakeSoul 支持 MVCC 多版本控制,并提供了快照讀(Time Travel)和版本回滾的功能。在 2.0 版本更新中,還支持了 Flink CDC 實(shí)時(shí)寫入,通過將 CDC 更新流轉(zhuǎn)化為 LakeSoul 的 Upsert 操作,能夠?qū)崿F(xiàn)高效的實(shí)時(shí)入湖。通過對(duì)接 Flink Table API,同樣能夠通過幾行 SQL 完成在線數(shù)據(jù)庫(kù)的 CDC 入湖。
5. 開放生態(tài)
LakeSoul 使用 Parquet 作為文件存儲(chǔ)格式,支持云上對(duì)象存儲(chǔ),并提供抽象統(tǒng)一的存儲(chǔ)訪問層,能夠很方便的對(duì)接各類計(jì)算引擎。目前能夠支持 Spark、Flink,并支持將表分區(qū)自動(dòng)導(dǎo)入到 Hive Meta 中。近期 LakeSoul 還將支持對(duì)接 Presto 等 MPP 計(jì)算引擎,從而更加完整地支持 ETL、OLAP、AI 模型訓(xùn)練等各類數(shù)據(jù)智能計(jì)算業(yè)務(wù)。
LakeSoul 的業(yè)務(wù)價(jià)值
LakeSoul 現(xiàn)代湖倉(cāng)數(shù)據(jù)智能架構(gòu)能夠帶來如下幾個(gè)核心業(yè)務(wù)價(jià)值:
- 大幅簡(jiǎn)化數(shù)據(jù)智能架構(gòu),降低運(yùn)維成本
- 計(jì)算成本降低,不需要多套存儲(chǔ)
- 不依賴 Kafka 或 Flink 等有狀態(tài)服務(wù)
- 避免資源潮汐效應(yīng)
- 簡(jiǎn)化開發(fā)流程,降低人力成本
- 使用 SQL、Python 即可快速開發(fā)數(shù)據(jù)智能業(yè)務(wù)
- 現(xiàn)有數(shù)倉(cāng)邏輯可以快速遷移,改造難度低
- 數(shù)據(jù)可靠,狀態(tài)可見透明,提升數(shù)據(jù)使用效率
- 每層計(jì)算結(jié)果實(shí)時(shí)可見、可查詢,數(shù)據(jù)可復(fù)用
- 上游補(bǔ)數(shù)、修復(fù)簡(jiǎn)單快捷,避免單點(diǎn)故障
- 避免數(shù)據(jù)孤島、數(shù)據(jù)冗余、數(shù)據(jù)沼澤
- 全鏈路 T+0 實(shí)時(shí)計(jì)算
- 計(jì)算延遲大幅降低,天級(jí)降低到分鐘級(jí)
- 業(yè)務(wù)效果快速反饋
LakeSoul 應(yīng)用場(chǎng)景舉例
1. 實(shí)時(shí)數(shù)據(jù)快速導(dǎo)入湖倉(cāng)
使用 LakeSoul 提供的 Flink CDC Sink 功能,可以將在線數(shù)據(jù)庫(kù)的變更實(shí)時(shí)同步到 LakeSoul 湖倉(cāng),不再需要 T+1 導(dǎo)入作業(yè),從數(shù)據(jù)源頭實(shí)現(xiàn)實(shí)時(shí)化。并且得益于 Flink CDC,也不再需要額外部署 Kafka 等組件。實(shí)時(shí)數(shù)據(jù)入湖的架構(gòu)流程:
可以看到 LakeSoul 實(shí)時(shí)入湖只需要一條流式的鏈路即可完成入湖,不需要額外的批處理流程,既簡(jiǎn)化開發(fā)工作量,消除數(shù)據(jù)口徑不一致,也簡(jiǎn)化了部署架構(gòu),顯著降低了運(yùn)維成本。
2. 實(shí)時(shí)分析報(bào)表
LakeSoul 的流批一體更新的特性,使得報(bào)表開發(fā)者不需要使用復(fù)雜的計(jì)算引擎接口來開發(fā)流式計(jì)算的作業(yè),通過 SQL 即可完成實(shí)時(shí)的數(shù)據(jù)提取和轉(zhuǎn)換和開發(fā),無(wú)論是 ETL 還是數(shù)據(jù)分析的流程都更加簡(jiǎn)單:
通過 LakeSoul 能夠快速上線實(shí)時(shí) BI 報(bào)表,隨時(shí)高效支撐商業(yè)決策。
3. AI 應(yīng)用落地
在互聯(lián)網(wǎng)搜廣推業(yè)務(wù)中,需要不斷積累用戶的實(shí)時(shí)反饋,并結(jié)合歷史數(shù)據(jù)進(jìn)行模型訓(xùn)練,自然是流批一體發(fā)揮巨大價(jià)值的重要場(chǎng)景。通過 LakeSoul 可以很好地支持實(shí)時(shí)搜廣推的 Online Learning 范式,構(gòu)建實(shí)時(shí)的機(jī)器學(xué)習(xí)樣本庫(kù),無(wú)縫對(duì)接 AI 模型的實(shí)時(shí)訓(xùn)練和在線推理,實(shí)現(xiàn)數(shù)據(jù)智能化的應(yīng)用。
結(jié)語(yǔ)
LakeSoul 作為當(dāng)前國(guó)產(chǎn)唯一的開源湖倉(cāng)一體框架,近期發(fā)布了 2.0 版本,增加了 Flink CDC、快照回滾、Hive 對(duì)接等業(yè)務(wù)生態(tài)功能,進(jìn)一步增強(qiáng)和豐富了在實(shí)際生產(chǎn)環(huán)境中的業(yè)務(wù)落地能力。LakeSoul 帶來現(xiàn)代化的湖倉(cāng)數(shù)據(jù)智能架構(gòu),能夠大幅降低數(shù)據(jù)智能應(yīng)用的開發(fā)運(yùn)維門檻,讓數(shù)據(jù)智能成為觸手可及的技術(shù),充分釋放數(shù)據(jù)的業(yè)務(wù)價(jià)值紅利。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。