做網(wǎng)站宣傳語企業(yè)網(wǎng)絡(luò)營(yíng)銷策劃書
文章目錄
- 一、前言
- 二、Delta Lake
- 三、Apache Hudi
- 四、Apache Iceberg
- 五、Apache Paimon
- 六、對(duì)比
- 七、筆者觀點(diǎn)
- 八、總結(jié)
- 九、參考資料
一、前言
在上一篇從數(shù)據(jù)倉庫到數(shù)據(jù)湖(上):數(shù)據(jù)湖導(dǎo)論文章中,我們簡(jiǎn)單講述了數(shù)據(jù)湖的起源、使用原因及其本質(zhì)。本篇文章將著重介紹市面上熱門的數(shù)據(jù)湖開源框架,并分享筆者對(duì)當(dāng)前數(shù)據(jù)湖技術(shù)的理解和看法。
截至目前,在數(shù)據(jù)湖領(lǐng)域,Delta Lake、Apache Iceberg 和 Apache Hudi 無疑是三大熱門開源框架。此外,Apache Paimon 最初是 Flink 的子項(xiàng)目,后來獨(dú)立發(fā)展成為一個(gè)獨(dú)立的框架,可以說是后起之秀。
二、Delta Lake
由于 Apache Spark 在商業(yè)化上取得巨大成功,由其背后的商業(yè)公司 Databricks 推出的 Delta Lake 也顯得格外亮眼。Delta Lake 是一個(gè)流批一體的數(shù)據(jù)湖存儲(chǔ)層,支持更新、刪除和合并操作。
主要特點(diǎn):
- 由于出自 Databricks,Delta Lake 與 Spark 的所有數(shù)據(jù)寫入方式完全兼容,包括基于 DataFrame 的批處理、流處理,以及 SQL 的 Insert、Insert Overwrite 等操作(開源版本暫不支持 SQL 寫入,EMR 已做支持)。
- 在數(shù)據(jù)寫入方面,Delta Lake 與 Spark 強(qiáng)綁定;在查詢方面,開源 Delta Lake 目前支持 Spark 和 Presto,但處理 delta log 需要使用 Spark。
核心能力:
三、Apache Hudi
Apache Hudi 是 Uber 公司開源的數(shù)據(jù)湖架構(gòu),用于管理存儲(chǔ)在 HDFS 上的數(shù)據(jù)。其設(shè)計(jì)目標(biāo)如其名所示,即 Hadoop Upserts Deletes and Incrementals。Hudi 提供了“COW vs MOR”兩種數(shù)據(jù)模型,以適應(yīng)不同的業(yè)務(wù)需求。此外,Hudi 還提供了豐富的插件生態(tài),可以方便地與其他大數(shù)據(jù)組件集成。
核心能力:
四、Apache Iceberg
Apache Iceberg 是一種用于跟蹤超大規(guī)模表的新格式,專門為對(duì)象存儲(chǔ)(如 S3)而設(shè)計(jì)。盡管社區(qū)關(guān)注度暫時(shí)不如 Delta Lake,功能也不如 Hudi 豐富,但 Iceberg 是一個(gè)野心勃勃的項(xiàng)目,具有高度抽象和優(yōu)雅的設(shè)計(jì),為成為一個(gè)通用的數(shù)據(jù)湖方案奠定了良好基礎(chǔ)。
Iceberg 為大數(shù)據(jù)帶來了 SQL 表的可靠性和簡(jiǎn)單性,同時(shí)讓 Spark、Trino、Flink、Presto 和 Hive 等引擎能夠同時(shí)安全地使用相同的表。
五、Apache Paimon
Apache Paimon 是一種湖泊格式,可以使用 Flink 和 Spark 構(gòu)建實(shí)時(shí)湖屋架構(gòu),用于流和批處理操作。Paimon 創(chuàng)新地結(jié)合了湖泊格式和 LSM(日志結(jié)構(gòu)合并樹)結(jié)構(gòu),將實(shí)時(shí)流更新引入湖泊架構(gòu)。
核心能力:
- 實(shí)時(shí)更新:
- 主鍵表支持大規(guī)模更新,具有高性能,通常通過 Flink 流實(shí)現(xiàn)。
- 支持定義合并引擎,靈活更新記錄。可重復(fù)保存最后一行,部分更新,或聚合記錄。
- 支持定義變更日志生成器,在合并引擎的更新中產(chǎn)生正確和完整的變更日志,簡(jiǎn)化流分析。
- 大規(guī)模數(shù)據(jù)處理:
- 附加表(無主鍵)提供大規(guī)模批處理和流處理能力,并自動(dòng)進(jìn)行小文件合并。
- 支持通過 z 順序排序進(jìn)行數(shù)據(jù)壓縮,以優(yōu)化文件布局,并使用 minmax 等索引提供快速查詢。
- 數(shù)據(jù)湖功能:
- 可伸縮元數(shù)據(jù):支持存儲(chǔ) Petabyte 級(jí)別的大數(shù)據(jù)集和大量分區(qū)。
- 支持 ACID 事務(wù)、時(shí)間旅行和模式演化。
六、對(duì)比
Delta、Iceberg、Hudi 和 Hive 四者的差異可以用建房子的比喻來說明。由于開源的 Delta 是 Databricks 閉源 Delta 的簡(jiǎn)化版本,主要提供 table format 的技術(shù)標(biāo)準(zhǔn),而閉源版本的 Delta 基于這個(gè)標(biāo)準(zhǔn)實(shí)現(xiàn)了諸多優(yōu)化,因此我們主要用閉源的 Delta 來做對(duì)比。
Delta 的房子基礎(chǔ)相對(duì)結(jié)實(shí),功能樓層也建得比較高,但這個(gè)房子可以說是 Databricks 的,本質(zhì)上是為了更好地壯大 Spark 生態(tài)。在 Delta 上,其他計(jì)算引擎難以替代 Spark 的位置,尤其是在寫入路徑方面。Iceberg 的建筑基礎(chǔ)非常扎實(shí),擴(kuò)展到新的計(jì)算引擎或文件系統(tǒng)都很方便,但目前功能樓層相對(duì)低一點(diǎn),最缺的功能是 upsert 和 compaction。Iceberg 社區(qū)正在優(yōu)先推動(dòng)這兩個(gè)功能的實(shí)現(xiàn)。Hudi 的情況不同,它的建筑基礎(chǔ)設(shè)計(jì)不如 Iceberg 結(jié)實(shí)。例如,要接入 Flink 作為 Sink,需要從底向上重新設(shè)計(jì)房子,把接口抽象出來,并且考慮不影響其他功能。盡管如此,Hudi 的功能樓層還是比較完善的,提供的 upsert 和 compaction 功能直接命中用戶的痛點(diǎn)。Hive 看起來像是一棟豪宅,絕大部分功能都有,但作為數(shù)據(jù)湖有點(diǎn)像靠著豪宅的一堵墻建房子,顯得相對(duì)笨重。此外,正如 Netflix 的分析,細(xì)看這棟豪宅的墻面其實(shí)有一些問題。
七、筆者觀點(diǎn)
雖然上述四款熱門開源框架都宣稱自己是數(shù)據(jù)湖解決方案,但根據(jù)我的了解和使用體驗(yàn),這幾款產(chǎn)品均不能完全滿足數(shù)據(jù)湖所應(yīng)具備的能力。
在前一篇文章中,筆者提到數(shù)據(jù)湖的本質(zhì)是由數(shù)據(jù)存儲(chǔ)架構(gòu)和數(shù)據(jù)處理工具組成的解決方案。然而,這四款開源框架均沿用了傳統(tǒng)數(shù)據(jù)庫建表的思想,對(duì)數(shù)據(jù)有較強(qiáng)的 schema 約束,這與數(shù)據(jù)湖原始定義中的集成各類非結(jié)構(gòu)化數(shù)據(jù)的要求相悖。
通過對(duì)這幾款產(chǎn)品的使用和體驗(yàn),我認(rèn)為目前熱門的數(shù)據(jù)湖技術(shù)均依賴于分布式文件系統(tǒng)的存儲(chǔ)能力。它們的功能介于分布式文件系統(tǒng)與普通數(shù)據(jù)庫之間,繼承了文件系統(tǒng)中數(shù)據(jù)文件和目錄對(duì)用戶直觀可見,以及數(shù)據(jù)庫對(duì)數(shù)據(jù)使用表結(jié)構(gòu)的管理、元數(shù)據(jù)管理和事務(wù)管理的優(yōu)點(diǎn),可以被稱為一種數(shù)據(jù)管理中間件的開源產(chǎn)品。
這些產(chǎn)品的使用并不需要安裝部署任何軟件,也不需要啟動(dòng)額外的服務(wù)和端口,只需增加一個(gè) jar 包,以插件的形式嵌入到計(jì)算引擎中,從而實(shí)現(xiàn)對(duì)分布式文件系統(tǒng)中數(shù)據(jù)的讀寫和各種數(shù)據(jù)管理功能。它們?yōu)橛?jì)算引擎提供了一種數(shù)據(jù)組織和管理方式,但并非真正意義上的數(shù)據(jù)湖。
真正意義上的數(shù)據(jù)湖應(yīng)該具備數(shù)據(jù)抽取 (ETL)、元數(shù)據(jù)管理、數(shù)據(jù)分析三大功能,如下圖所示:
八、總結(jié)
數(shù)據(jù)湖就像其他新興技術(shù)一樣,在剛出現(xiàn)時(shí)往往受到廣泛關(guān)注,成為熱門話題。然而,很多新興技術(shù)詞匯大多是作為一個(gè)泛化的理論概念,但往往具有很大的吸引力,其實(shí)際應(yīng)用還存在諸多挑戰(zhàn)和局限性。
根據(jù)對(duì)當(dāng)前幾款熱門開源框架(如Delta Lake、Apache Iceberg、Apache Hudi、Hive-ACID)的使用體驗(yàn),這些產(chǎn)品均無法完全滿足數(shù)據(jù)湖應(yīng)具備的能力。數(shù)據(jù)湖的本質(zhì)是由數(shù)據(jù)存儲(chǔ)架構(gòu)和數(shù)據(jù)處理工具組成的解決方案,但上述框架在設(shè)計(jì)上仍然沿用了傳統(tǒng)數(shù)據(jù)庫的schema約束,與數(shù)據(jù)湖集成各類非結(jié)構(gòu)化數(shù)據(jù)的初衷相悖。
總體來說,數(shù)據(jù)湖等新興技術(shù)在理論上提供了一個(gè)理想的解決方案,但在實(shí)際應(yīng)用中,仍需不斷發(fā)展和完善,以滿足企業(yè)對(duì)數(shù)據(jù)存儲(chǔ)、管理和分析的需求。這一過程需要時(shí)間和技術(shù)的積累,才能真正實(shí)現(xiàn)理論與實(shí)踐的統(tǒng)一。
九、參考資料
- 從數(shù)據(jù)庫到數(shù)據(jù)倉庫:數(shù)據(jù)倉庫導(dǎo)論
- 從數(shù)據(jù)倉庫到數(shù)據(jù)湖(上):數(shù)據(jù)湖導(dǎo)論
- 深度對(duì)比 Delta、Iceberg 和 Hudi 三大開源數(shù)據(jù)湖方案
- Hidi
- Delta Lake
- Iceberg
- Paimon