譯者 | 陳峻
審校 | 重樓
近年來,開放表格式(Open table formats)和對象存儲(object storage)正在重新定義各個組織構(gòu)建其數(shù)據(jù)系統(tǒng)的方式,并為可擴展、高效、且面向未來的數(shù)據(jù)湖倉(data lakehouse)奠定了基礎(chǔ)。通過利用對象存儲的成本效益等獨特優(yōu)勢,以及 Apache Iceberg、Delta Lake 和 Apache Hudi 等開放表格式的高級元數(shù)據(jù)管理功能,組織正在創(chuàng)建滿足現(xiàn)代化數(shù)據(jù)工作負(fù)載需求的模塊化架構(gòu)。
本指南將從開放表格式和對象存儲在構(gòu)建現(xiàn)代化數(shù)據(jù)湖倉中的作用與演變出發(fā),深入探討各種頂級的表格式的特征比較,進而介紹在針對高級分析和 AI 工作負(fù)載架構(gòu)進行性能優(yōu)化時的注意事項。據(jù)此,你將能夠設(shè)計出可擴展、高效、且能夠適應(yīng)數(shù)據(jù)驅(qū)動時代快速變化需求的數(shù)據(jù)系統(tǒng)。
開放表格式的適用范圍
現(xiàn)代數(shù)據(jù)湖倉架構(gòu)建立在三個關(guān)鍵組件之上,即:以對象存儲為基礎(chǔ)的存儲層、位于中心的開放表格式、以及最終傳遞到可擴容的計算引擎。這種模塊化設(shè)計經(jīng)過優(yōu)化,可以充分利用對象存儲的可擴展性和成本效益,實現(xiàn)無縫的元數(shù)據(jù)管理,以及橫跨不同計算引擎的互操作性。
如下圖所示,此類架構(gòu)轉(zhuǎn)變的核心在于計算和存儲的分解。作為基礎(chǔ),對象存儲提供了對于結(jié)構(gòu)化、半結(jié)構(gòu)化、以及非結(jié)構(gòu)化數(shù)據(jù)的無縫管理;而開放表格式充當(dāng)著元數(shù)據(jù)的抽象層,支持類似數(shù)據(jù)庫的功能,包括:模式(schema)演變、時間旅行、分區(qū)和 ACID(原子性、一致性、隔離性和持久性)事務(wù)等。而Spark、Presto、Trino 和 Dremio 等計算引擎通過與這些表格式的交互,提供了大規(guī)模處理和分析數(shù)據(jù)的靈活性,而不會受制于供應(yīng)商。
數(shù)據(jù)架構(gòu)的演變
如上圖所示,數(shù)據(jù)湖倉的興起可以被理解為數(shù)據(jù)架構(gòu)一種更廣泛的演變。過去,在線事務(wù)處理 (OTLP) 數(shù)據(jù)庫等早期系統(tǒng)優(yōu)先考慮的是事務(wù)的完整性,但缺乏分析功能。之后,在線分析處理(OLAP) 系統(tǒng)的出現(xiàn)引入了數(shù)據(jù)倉庫,優(yōu)化了結(jié)構(gòu)化數(shù)據(jù)的查詢,但是其代價是無法有效地處理半結(jié)構(gòu)化與非結(jié)構(gòu)化的數(shù)據(jù)。數(shù)據(jù)湖的出現(xiàn)解決了此類限制,為各種數(shù)據(jù)類型提供了可擴展的存儲和讀時模式 (Schema-on-Read) 功能。然而,數(shù)據(jù)湖缺乏事務(wù)的保證,這引發(fā)了數(shù)據(jù)湖倉的出現(xiàn)。它能夠將數(shù)據(jù)湖和數(shù)據(jù)倉庫的優(yōu)勢集成到一個統(tǒng)一的架構(gòu)中。
說到數(shù)據(jù)湖倉,它是基于開放表格式和對象存儲構(gòu)建、且完全解耦的。這種分解式架構(gòu)既提供了數(shù)據(jù)庫的事務(wù)一致性,又提供了對象存儲的可擴展性。
為何開放表格式是對象存儲的理想選擇
經(jīng)過專門設(shè)計的數(shù)據(jù)湖倉架構(gòu),旨在充分利用諸如 Amazon Web Services (AWS) S3、Google Cloud Storage 和 Azure Blob Storage等對象存儲系統(tǒng)的可擴展性和成本效益。也就是說,這種集成支持在一個統(tǒng)一的平臺中,無縫地管理各種數(shù)據(jù)類型(如:結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化)。總體而言,對象存儲上的數(shù)據(jù)湖倉架構(gòu)的主要功能包括:
- 統(tǒng)一存儲層:通過利用對象存儲,數(shù)據(jù)湖倉可以其原生的格式存儲大量數(shù)據(jù),而無需在存儲之前進行復(fù)雜的數(shù)據(jù)轉(zhuǎn)換。這種方法不但簡化了數(shù)據(jù)的攝取,而且實現(xiàn)了與各種數(shù)據(jù)源的兼容。
- 可擴展性:對象存儲系統(tǒng)具有原生的可擴展性,使得數(shù)據(jù)湖倉能夠容納不斷增長的數(shù)據(jù)量,而無需對基礎(chǔ)設(shè)施進行重大更改。這種可擴展性使得組織能夠有效地管理不斷增多的數(shù)據(jù)集和不斷變化的分析要求。
- 靈活性:一流的對象存儲可以部署在包括:本地、私有云、公共云、主機托管設(shè)施、數(shù)據(jù)中心、以及邊緣等任何地方。這種靈活性使組織能夠根據(jù)特定的運營和地理需求,定制其數(shù)據(jù)基礎(chǔ)設(shè)施。通過集成上述功能,數(shù)據(jù)湖倉架構(gòu)結(jié)合了數(shù)據(jù)湖和數(shù)據(jù)倉庫的優(yōu)勢,進而提供了一套全面的解決方案。由于所有這些設(shè)計都是建立在可擴展且靈活的對象存儲系統(tǒng)之上,因此也就實現(xiàn)了高效的數(shù)據(jù)存儲、管理和分析。
典型的開放表格式
開放表格式是一種標(biāo)準(zhǔn)化的開源框架,旨在高效管理大規(guī)模的分析性數(shù)據(jù)集。通常,它作為數(shù)據(jù)文件之上的元數(shù)據(jù)層來執(zhí)行,可以促進橫跨各種處理引擎的無縫數(shù)據(jù)管理和訪問。以下是三種典型的開放表格式--Iceberg、Delta Lake 和 Hudi:
Apache Iceberg
Apache Iceberg 是一種高性能的表格式,專為海量數(shù)據(jù)集而設(shè)計。作為現(xiàn)代化分析工作負(fù)載的基石,該架構(gòu)優(yōu)先考慮了高效的讀取操作和可擴展性。其定義功能之一是將元數(shù)據(jù)與普通數(shù)據(jù)分離,從而允許基于快照的高效隔離和規(guī)劃。這種設(shè)計消除了成本高昂的元數(shù)據(jù)操作,并能夠支持橫跨大型數(shù)據(jù)集的并行查詢與規(guī)劃。
Iceberg 生態(tài)系統(tǒng)的最新發(fā)展凸顯了它在整個行業(yè)上的日益普及。其S3 表能夠讓查詢引擎直接訪問存儲在 S3 兼容系統(tǒng)中的表元數(shù)據(jù)和數(shù)據(jù)文件,從而減少了延遲,提高了互操作性,并簡化了數(shù)據(jù)管理。與此同時,Databricks 對 Tabular 的收購?fù)癸@了 Iceberg 在開放式湖倉平臺中的首要作用,并強化了其對于性能和治理的關(guān)注。而Snowflake將 Polaris 開源化的決定,則表明了該行業(yè)對于開放性和互操作性的承諾,也進一步鞏固了 Iceberg 作為領(lǐng)先表格式的地位。
Delta Lake
與 Apache Spark 密切相關(guān)的Delta Lake 最初由 Databricks 開發(fā)。它既能夠與 Spark API 完全兼容,又可與 Spark 的結(jié)構(gòu)化流式處理相集成,實現(xiàn)了批處理和流式處理操作。其中,Delta Lake 的一個關(guān)鍵性功能是:它使用事務(wù)日志來記錄對于數(shù)據(jù)所做的所有更改,從而確保了一致性的視圖和寫入隔離。而且,該設(shè)計支持并發(fā)數(shù)據(jù)操作,能夠適用于高吞吐量的環(huán)境。
Apache Hudi
Apache Hudi 旨在應(yīng)對實時數(shù)據(jù)攝取和分析的挑戰(zhàn),尤其是在那些數(shù)據(jù)需要頻繁更新的環(huán)境中。也就是說,其架構(gòu)既支持用于高效數(shù)據(jù)攝取的寫入優(yōu)化存儲(write-optimized storage,WOS) ,又可用于查詢的讀取優(yōu)化存儲(read-optimized storage,ROS),從而實現(xiàn)了數(shù)據(jù)集的最新視圖。
通過逐步處理數(shù)據(jù)流中的更改,Hudi 實現(xiàn)了大規(guī)模的實時分析。bloom篩選條件和全局索引等功能可以優(yōu)化 I/O 操作,從而提高查詢和寫入的性能。此外,Hudi 還包含了用于集群、壓縮和清理的工具。這些工具有助于維護數(shù)據(jù)表的組織和性能。而且,其處理記錄級更新和刪除的能力,已成為高速數(shù)據(jù)流和嚴(yán)格數(shù)據(jù)管理與合規(guī)場景的實用選擇。
比較開放表格式
Apache Iceberg、Delta Lake 和 Apache Hudi 都為數(shù)據(jù)湖倉化的架構(gòu)帶來了各自獨特的優(yōu)勢。以下是基于它們主要特征的比較:
- ACID 事務(wù):所有三種格式都能符合 ACID 的要求,能夠確??煽康臄?shù)據(jù)操作。其中,Iceberg 采用快照隔離來實現(xiàn)事務(wù)完整性;Delta Lake 利用事務(wù)日志實現(xiàn)一致的視圖和寫入隔離;而Hudi 為高并發(fā)的場景提供了文件級的并發(fā)控制。
- 架構(gòu)演變:每種格式都支持架構(gòu)的更改,并允許添加、刪除或修改數(shù)據(jù)列。Iceberg 提供了靈活的架構(gòu)演變,而無需重寫現(xiàn)有數(shù)據(jù);Delta Lake 在運行時會強制執(zhí)行架構(gòu),以保持?jǐn)?shù)據(jù)的質(zhì)量;而 Hudi 提供了預(yù)提交轉(zhuǎn)換功能,以提高靈活性。
- 分區(qū)演變:Iceberg 支持分區(qū)演變,無需重寫現(xiàn)有數(shù)據(jù),即可無縫更新分區(qū)方案;Delta Lake 允許分區(qū)更改,但可能需要手動干預(yù),才能獲得最佳性能;而 Hudi 提供精細(xì)的集群,作為傳統(tǒng)分區(qū)的替代方案。
- 時間旅行:這三種格式都能提供時間旅行功能,允許用戶查詢歷史數(shù)據(jù)狀態(tài)。顯然,該功能對于審計和調(diào)試來說非常實用。
- 廣泛采用:Iceberg 是數(shù)據(jù)社區(qū)最廣泛被采用的開放表格式。從 Databricks 到 Snowflake 再到 AWS,許多大型平臺都投資了 Iceberg。如果你已經(jīng)是這些生態(tài)系統(tǒng)的一部分或正在考慮加入它們,那么 Iceberg 可能會自然成為你的不二之選。
- 索引:Hudi 通過提供多模式索引功能,包括 Bloom 過濾器和記錄級索引,來提高查詢性能。Delta Lake 和 Iceberg 則依賴于元數(shù)據(jù)的優(yōu)化,并不提供相同級別的索引靈活性。
- 并發(fā)和流式處理:Hudi 專為實時分析而設(shè)計,帶有高級并發(fā)控制和內(nèi)置工具(如 DeltaStreamer),可用于增量數(shù)據(jù)的攝取;Delta Lake 支持通過更改數(shù)據(jù)源,實現(xiàn)流式處理;而 Iceberg 提供了基本的增量讀取功能。雖然上述三種格式都為現(xiàn)代化數(shù)據(jù)架構(gòu)提供了強大的基礎(chǔ),但是由于各自的特點比較明顯,因此具體該如何選擇則取決于特定的工作負(fù)載要求和組織需求。
性能預(yù)期
在數(shù)據(jù)湖倉架構(gòu)中,實現(xiàn)最佳性能對于充分利用開放表格式的功能是至關(guān)重要的。而相關(guān)性能往往取決于存儲層和計算層的效率。其中,
- 存儲層必須能夠提供低延遲和高吞吐量,以滿足大規(guī)模的數(shù)據(jù)分析需求。因此,選用的對象存儲解決方案應(yīng)有助于快速訪問數(shù)據(jù),并支持高速傳輸,而且即便是在高工作負(fù)載下也能確保平穩(wěn)的運行。此外,高效的每秒輸入/輸出操作數(shù) (input/output operations per second,IOPS) 對于處理大量并發(fā)的數(shù)據(jù)請求也非常重要,它能夠實現(xiàn)無瓶頸的響應(yīng)式數(shù)據(jù)交互。
- 計算層性能同樣也會直接影響數(shù)據(jù)處理和查詢的執(zhí)行速度。計算引擎需要通過可擴展性,在不影響性能的情況下,管理不斷增長的數(shù)據(jù)量和用戶查詢。采用優(yōu)化的查詢執(zhí)行計劃和資源管理策略,則可以進一步提高處理效率。此外,計算引擎需要通過與開放表格式的無縫集成,來充分利用 ACID 事務(wù)、架構(gòu)演變和時間旅行等高級功能。
通過正確配置和完全優(yōu)化,開放表格式也能夠?qū)?/span>元數(shù)據(jù)與普通數(shù)據(jù)分開管理,從而實現(xiàn)更快的查詢規(guī)劃和執(zhí)行。同時,數(shù)據(jù)分區(qū)會將數(shù)據(jù)分組成多個子集,通過減少操作期間掃描的數(shù)據(jù)量,來提高查詢性能。而通過對架構(gòu)演變的支持,表格式則能夠適應(yīng)數(shù)據(jù)結(jié)構(gòu)的變化,而無需進行大量的數(shù)據(jù)重寫,實現(xiàn)了在確保靈活性的同時,最大限度地減少了處理的開銷。
可見,通過關(guān)注存儲和計算層的上述性能方面,組織可以確保其數(shù)據(jù)湖倉環(huán)境的高效與可擴展性,并能夠滿足現(xiàn)代化分析和 AI 工作負(fù)載的需求。當(dāng)然,這些考慮因素也會使得開放表格式能夠充分地發(fā)揮其潛力,并提供實時洞察和決策所需的高性能。
開放數(shù)據(jù)湖倉和互操作性
為了提供統(tǒng)一的數(shù)據(jù)管理方法,數(shù)據(jù)湖倉架構(gòu)往往會基于開放表格式來構(gòu)建。不過,實現(xiàn)真正的開放性,光靠采用開放的表格式是不夠的。開放的數(shù)據(jù)湖倉必須集成各種模塊化、以及存儲引擎、目錄和計算引擎等可互操作的開源組件,來實現(xiàn)橫跨不同平臺的無縫操作。
好在開放表格式是一套開放的標(biāo)準(zhǔn),可以根據(jù)其設(shè)計,來支持整個技術(shù)棧的互操作性和開放性。不過,在實際使用中,挑戰(zhàn)仍然存在。例如,需要確保目錄互操作性,以及避免依賴專有服務(wù)進行數(shù)據(jù)表的管理。新近推出的 Apache XTable 等工具,便展示了其在通用兼容性方面的進展,并為“一次性寫入、隨處查詢”的系統(tǒng)提供了新的途徑。需要注意的是,XTable 并不允許用戶以多種開放的表格式寫入,而只允許讀取。
開放表格式的未來
隨著數(shù)據(jù)湖倉的不斷發(fā)展,各種趨勢和進步正在塑造其未來。其中,
- 一個重要增長領(lǐng)域便是將 AI 和機器學(xué)習(xí) (ML) 工作負(fù)載直接集成到湖倉的架構(gòu)中。對于存儲層而言,它可能是與 Hugging Face 和 OpenAI 等關(guān)鍵 AI 平臺直接集成的平臺。而對于計算層,AI 集成可能會導(dǎo)致創(chuàng)建針對 ML 算法優(yōu)化的專用計算引擎,從而提高湖倉生態(tài)系統(tǒng)中訓(xùn)練和推理過程的效率。
- 另一個顯著增長的領(lǐng)域則可能是開源社區(qū)。當(dāng) Databricks、Snowflake 和 AWS 等大型私營公司大行其道時,人們很可能忘記了開放表格式其實是一個真正的開放標(biāo)準(zhǔn)。Iceberg、Hudi 和 Delta Lake 可供任何貢獻(xiàn)者開展協(xié)作,或集成到開源的工具和平臺中。換句話說,它們是充滿活力且不斷發(fā)展的開放式標(biāo)準(zhǔn)數(shù)據(jù)生態(tài)系統(tǒng)的一部分。我們可以預(yù)見到各種開源應(yīng)用、插件、目錄和創(chuàng)新在該領(lǐng)域的持續(xù)激增。
- 最后,隨著企業(yè)為 AI 和其他高級用例構(gòu)建更多大規(guī)模、高性能的數(shù)據(jù)湖倉,開放表格式的采用率也將繼續(xù)上升。一些行業(yè)專業(yè)人士甚至將開放表格式的流行視同于 2000 年代初 Hadoop 的崛起和后續(xù)的霸主地位。
小結(jié)
通過將開放表格式與高性能對象存儲相結(jié)合,架構(gòu)師能夠構(gòu)建出開放、可互操作且能夠滿足 AI、ML 和高級分析需求的數(shù)據(jù)系統(tǒng)。而通過采用上述提到的各項技術(shù),組織可以創(chuàng)建出可擴展且靈活的架構(gòu),從而在數(shù)據(jù)驅(qū)動時代推動業(yè)務(wù)的創(chuàng)新和提效。
譯者介紹
陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經(jīng)驗,善于對內(nèi)外部資源與風(fēng)險實施管控,專注傳播網(wǎng)絡(luò)與信息安全知識與經(jīng)驗。
原標(biāo)題:The Architect’s Guide to Open Table Formats and Object Storage,作者:Brenna Buuck