阿里面試:Hudi,Iceberg,Paimon之間的差異有哪些?該如何選擇?
在大數(shù)據(jù)處理領(lǐng)域,傳統(tǒng)的數(shù)據(jù)倉庫和數(shù)據(jù)湖解決方案在處理實時數(shù)據(jù)和大規(guī)模數(shù)據(jù)時面臨諸多挑戰(zhàn),如數(shù)據(jù)一致性、高性能查詢、實時更新等。隨著實時數(shù)據(jù)分析需求的不斷增加,業(yè)界迫切需要一種能夠高效處理大規(guī)模流式數(shù)據(jù)的存儲系統(tǒng)。Apache Hudi、Apache Iceberg和Apache Paimon這三種湖格式應(yīng)運而生,它們?yōu)榻鉀Q這些問題提供了有效的途徑。本文將詳細介紹這三種湖格式的發(fā)展歷程、架構(gòu)、特性,并對它們共有的特點進行對比分析。

1. 發(fā)展歷程
(1) Hudi的發(fā)展歷程
Hudi最初由Uber開發(fā),是數(shù)據(jù)湖的文件組織層,對Parquet等格式文件進行管理,提供數(shù)據(jù)湖能力,支持多種計算引擎,提供IUD接口,在HDFS/OBS的數(shù)據(jù)集上提供了插入、更新和增量拉取的流原語。它的誕生源于對傳統(tǒng)數(shù)據(jù)湖存在問題的改進,如不支持事務(wù)、數(shù)據(jù)更新效率低、無法及時應(yīng)對業(yè)務(wù)表變化、歷史快照表數(shù)據(jù)冗余、小批量增量數(shù)據(jù)處理成本高等。華為FunsionInsight MRS集成Apache Hudi組件,希望通過Hudi組件來改善傳統(tǒng)數(shù)據(jù)湖存在的問題。Hudi最早于2019年1月17日開源,從社區(qū)活躍度來看,有超越Hudi的趨勢。
(2) Iceberg的發(fā)展歷程
Apache Iceberg最初由Netflix開發(fā),于2018年11月6日開源,旨在解決傳統(tǒng)數(shù)據(jù)湖在大規(guī)模數(shù)據(jù)管理中遇到的挑戰(zhàn)。它是一種用于龐大分析數(shù)據(jù)集的表格式,定義了數(shù)據(jù)文件、元數(shù)據(jù)和快照的組織方式,提供了統(tǒng)一的表語義。它能夠讓Spark、Flink、Presto、Hive等計算引擎可以一致地對存儲在DFS上的Hudi表進行查詢。
(3) Paimon的發(fā)展歷程
Paimon最初名為Flink Table Store,是在Apache Flink社區(qū)內(nèi)部于2022年1月啟動的一個項目。目標是希望開發(fā)一個高性能的流式數(shù)據(jù)湖存儲系統(tǒng),支持高吞吐、低延遲的數(shù)據(jù)攝入、流式訂閱以及實時查詢能力。并且與2024年4月16號畢業(yè)成為Apache的頂級項目。
2. 詳細信息介紹
(1) Hudi
① 數(shù)據(jù)存儲結(jié)構(gòu)
Hudi將數(shù)據(jù)存儲在基于HDFS或OBS的數(shù)據(jù)集上,支持插入、更新和增量拉取的流原語。它支持兩種表存儲模式:Copy On Write(COW)和Merge On Read(MOR)。在COW模式下,Hudi將新數(shù)據(jù)寫入新的文件版本,而舊文件則被標記為無效;在MOR模式下,Hudi將數(shù)據(jù)更新記錄在日志文件中,查詢時合并日志文件和基礎(chǔ)文件。
② 功能特性
- 增量數(shù)據(jù)處理:Hudi支持增量更新(Upserts),能夠快速處理新數(shù)據(jù)和更新現(xiàn)有數(shù)據(jù),避免了昂貴且低效的批量負載。例如,在RDBMS攝取場景中,Hudi通過Upserts提供了更快的負載,而非昂貴且低效的批量負載。
- 近實時分析:Hudi通過將數(shù)據(jù)的更新時間縮短至幾分鐘,提供了一種高效的替代方案,并且還可以對存儲在DFS上多個更大的表進行實時分析。此外,Hudi沒有外部依賴項,因此可以在不增加運營成本的情況下,對更實時的數(shù)據(jù)進行更快的分析。
- 增量處理管道:Hudi可以很好地解決傳統(tǒng)Hadoop數(shù)據(jù)處理中存在的問題,例如數(shù)據(jù)延遲到達的情況。它從流處理框架如Spark Streaming、發(fā)布/訂閱系統(tǒng)如Kafka或數(shù)據(jù)庫復(fù)制技術(shù)如Oracle XStream中引入了類似概念,實現(xiàn)增量處理。
- DFS上數(shù)據(jù)分發(fā):Hudi可以通過Spark Pipeline將Hadoop的數(shù)據(jù)導(dǎo)入到ElasticSearch供Uber應(yīng)用程序使用,避免了相同數(shù)據(jù)在DFS(用于離線分析計算結(jié)果)和Kafka(用于分發(fā))上的冗余存儲。
(2) Iceberg
① 數(shù)據(jù)存儲結(jié)構(gòu)
Iceberg的數(shù)據(jù)存儲結(jié)構(gòu)由metadata file、manifest file和data file組成。查詢時,首先查找Metadata元數(shù)據(jù)進而過濾找到對應(yīng)的SnapShot對應(yīng)的manifest files,再找到對應(yīng)的數(shù)據(jù)文件。它支持Parquet、avro、orc數(shù)據(jù)格式。
② 功能特性
- 支持多種計算引擎:Iceberg可以與Spark、Flink、Presto、Hive等多計算引擎集成,為不同的計算需求提供了便利。
- 事務(wù)性支持:Iceberg支持ACID事務(wù),保證了數(shù)據(jù)的一致性和可靠性。
- 行級數(shù)據(jù)變更:支持行級數(shù)據(jù)變更,能夠直接對表中的數(shù)據(jù)進行更新和刪除操作。
- 數(shù)據(jù)質(zhì)量控制:借助于Iceberg Schema的校驗功能,在數(shù)據(jù)導(dǎo)入時剔除異常數(shù)據(jù),或者對異常數(shù)據(jù)做進一步處理。
- 數(shù)據(jù)Schema變更:支持通過Spark SQL的DDL語句完成表結(jié)構(gòu)變更,歷史數(shù)據(jù)不需要全部重新按照新的Schema導(dǎo)出,使得表結(jié)構(gòu)變更的速度非常快。同時,由于Iceberg支持ACID,有效地隔離了Schema變更對現(xiàn)有讀取任務(wù)的影響,從而使得可以讀取到結(jié)果一致的數(shù)據(jù)。
(3) Paimon
① 數(shù)據(jù)存儲結(jié)構(gòu)
Paimon支持多種數(shù)據(jù)存儲結(jié)構(gòu),如列式存儲和LSM(Log - Structured Merge)樹結(jié)構(gòu)。列式存儲適合大規(guī)模數(shù)據(jù)的壓縮和查詢優(yōu)化,而LSM樹結(jié)構(gòu)支持高效的寫入操作和合并機制,確保數(shù)據(jù)的高吞吐和低延遲。
② 功能特性
- 實時數(shù)據(jù)分析與查詢:在金融行業(yè)可用于實時風(fēng)險分析、欺詐檢測等場景;在電子商務(wù)領(lǐng)域可用于實時推薦系統(tǒng);在物聯(lián)網(wǎng)場景中可實現(xiàn)設(shè)備監(jiān)控、故障預(yù)警等功能。
- 流批一體處理:支持流處理和批處理的無縫切換,同一份存儲既可以用于流處理,也可以用于批處理。
- 低成本高效存儲:通過其高效的存儲格式和壓縮策略,顯著降低存儲成本,適合大量數(shù)據(jù)的持久化存儲。
3. 共有的特點對比



Hudi、Iceberg和Paimon都是優(yōu)秀的數(shù)據(jù)湖解決方案,它們都具有批流一體、支持Upsert、TimeTravel等特性,并且在文件組織上采用了更高效的LSM結(jié)構(gòu)。然而,它們也各自具有獨特的優(yōu)勢和適用場景。Hudi在實時更新和增量處理方面表現(xiàn)出色,適合需要頻繁更新和增量處理的場景;Iceberg則在查詢性能和擴展性方面具有優(yōu)勢,適合大規(guī)模的數(shù)據(jù)分析和處理;Paimon在實時性和流處理方面具有顯著優(yōu)勢,適合需要高吞吐、低延遲的數(shù)據(jù)攝入和流式訂閱場景。在選擇時,需要根據(jù)具體的業(yè)務(wù)需求和場景來綜合考慮。

































