Iceberg
Iceberg是一種開放的數(shù)據(jù)湖表格式。您可以借助Iceberg快速地在HDFS或者阿里云OSS上構(gòu)建自己的數(shù)據(jù)湖存儲服務(wù),并借助開源大數(shù)據(jù)生態(tài)的Spark、Flink、Hive和Presto等計算引擎來實現(xiàn)數(shù)據(jù)湖的分析。
核心能力
Apache Iceberg設(shè)計初衷是為了解決Hive數(shù)倉上云的問題,經(jīng)過多年迭代已經(jīng)發(fā)展成為云上構(gòu)建數(shù)據(jù)湖服務(wù)的表格式標(biāo)準(zhǔn)。關(guān)于Apache Iceberg的更多介紹,請參見Apache Iceberg官網(wǎng)。
目前Iceberg提供以下核心能力:
基于HDFS或者對象存儲構(gòu)建低成本的輕量級數(shù)據(jù)湖存儲服務(wù)。
實現(xiàn)主流開源計算引擎入湖和分析場景的完善對接。
完善的ACID語義。
支持行級數(shù)據(jù)變更能力。
支持歷史版本回溯。
支持高效的數(shù)據(jù)過濾。
支持Schema變更。
支持分區(qū)布局變更。
支持隱式分區(qū)(Hidden Partitioning)。
為了便于理解數(shù)倉和Iceberg數(shù)據(jù)湖在系統(tǒng)架構(gòu)、業(yè)務(wù)價值和成本方面的差異,選擇了業(yè)界流行的Clickhouse實時數(shù)倉、Hive離線數(shù)倉和Iceberg數(shù)據(jù)湖三種具體的技術(shù)架構(gòu),為您進(jìn)行了對比,詳細(xì)信息如下表。
對比項 | 子項目 | 開源Clickhouse實時數(shù)倉 | 開源Hive離線數(shù)倉 | 阿里云Iceberg數(shù)據(jù)湖 |
系統(tǒng)架構(gòu) | 架構(gòu) | 計算存儲一體 | 計算存儲分離 | 計算存儲分離 |
多計算引擎支持 | 不支持 | 支持 | 支持 | |
數(shù)據(jù)存儲在對象存儲 | 不支持 | 支持不完善 | 支持 | |
數(shù)據(jù)存儲在HDFS | 不支持 | 支持 | 支持 | |
存儲格式開放性 | 不開放 | 開放 | 開放 | |
業(yè)務(wù)價值 | 時效性 | 秒級 | 小時級/天級 | 分鐘級 |
計算靈活性 | 低 | 強(qiáng) | 強(qiáng) | |
事務(wù)性 | 不支持 | 不完善 | 支持 | |
表級語義通用性 | 差 | 差 | 優(yōu)秀 | |
行級數(shù)據(jù)變更 | 不支持 | 支持較弱 | 支持 | |
數(shù)據(jù)質(zhì)量 | 非常高 | 較高 | 較高 | |
維護(hù)成本 | 查詢性能 | 高 | 較高 | 較高 |
存儲成本 | 非常高 | 一般 | 低 | |
自助服務(wù) | 不支持 | 不支持 | 支持 | |
資源彈性 | 一般 | 一般 | 優(yōu)秀 |
與開源Iceberg對比
從基礎(chǔ)功能、數(shù)據(jù)變更和計算引擎等方面,對比了阿里云Iceberg與開源Iceberg,詳細(xì)信息如下表。
“√”表示支持,“x”表示暫未支持。
類別 | 項目 | 子項目 | 開源Iceberg | Iceberg商業(yè)版(阿里云) |
基礎(chǔ)功能 | ACID | 無 | √ | √ |
歷史版本回溯 | 無 | √ | √ | |
Source和Sink集成 | Batch | √ | √ | |
Streaming | √ | √ | ||
高效數(shù)據(jù)過濾 | 無 | √ | √ | |
數(shù)據(jù)變更 | Schema Evolution | 無 | √ | √ |
Partition Evolution | 無 | √ | √ | |
CopyOnWrite更新 | 無 | √ | √ | |
MergeOnRead更新 | Read | √ | √ | |
Write | √ | √ | ||
Compaction | x | x | ||
計算引擎 | Apache Spark | 讀取 | √ | √ |
寫入 | √ | √ | ||
Apache Hive | 讀取 | √ | √ | |
寫入 | √ | √ | ||
Apache Flink | 讀取 | √ | √ | |
寫入 | √ | √ | ||
PrestoDB或Trino | 讀取 | √ | √ | |
寫入 | √ | √ | ||
編程語言 | Java | 無 | √ | √ |
Python | 無 | √ | √ | |
高級功能 | 原生接入阿里云OSS | 無 | x | √ |
原生接入阿里云DLF | 無 | x | √ | |
本地數(shù)據(jù)緩存加速 | 無 | x | √ | |
自動合并小文件 | 無 | x | √ |
以上信息是在2021年9月份,客觀分析開源Iceberg和商業(yè)版Iceberg現(xiàn)狀之后制定的表格。隨著后續(xù)版本的不斷迭代升級,對比項狀態(tài)可能發(fā)生變化。
適用場景
Iceberg作為通用數(shù)據(jù)湖解決方案中最核心的組件之一,主要適用于以下場景。
場景 | 描述 |
實時數(shù)據(jù)導(dǎo)入和查詢 | 數(shù)據(jù)實時從上游流入Iceberg數(shù)據(jù)湖,查詢側(cè)即可查詢該數(shù)據(jù)。例如,在日志場景中,啟動Iceberg或Spark流作業(yè),實時地將日志數(shù)據(jù)導(dǎo)入Iceberg表中,然后可以使用Hive、Spark、Iceberg或Presto進(jìn)行實時查詢。同時,由于Iceberg支持ACID,保證了數(shù)據(jù)的流入和查詢的隔離性,不會產(chǎn)生臟數(shù)據(jù)。 |
刪除或更新數(shù)據(jù) | 大部分?jǐn)?shù)倉都難以實現(xiàn)較為高效的行級數(shù)據(jù)刪除或更新,通常需要啟動離線作業(yè)把整個表原始數(shù)據(jù)讀取出來,然后變更數(shù)據(jù)后,寫入到一個原始表。而Iceberg成功把變更的范圍從表級別縮小到了文件級別,從而可以通過局部變更來完成業(yè)務(wù)邏輯的數(shù)據(jù)變更或刪除。 在Iceberg數(shù)據(jù)湖中,您可以直接通過執(zhí)行類似命令 |
數(shù)據(jù)質(zhì)量控制 | 借助于Iceberg Schema的校驗功能,在數(shù)據(jù)導(dǎo)入時剔除異常數(shù)據(jù),或者對異常數(shù)據(jù)做進(jìn)一步處理。 |
數(shù)據(jù)Schema變更 | 數(shù)據(jù)的Schema并非固定不變,Iceberg支持通過Spark SQL的DDL語句完成表結(jié)構(gòu)變更。 Iceberg在變更表結(jié)構(gòu)的時候,歷史數(shù)據(jù)并不需要全部重新按照新的Schema導(dǎo)出一份,從而使得Schema變更的速度非常快。同時,由于Iceberg支持ACID,有效地隔離了Schema變更對現(xiàn)有讀取任務(wù)的影響,從而使得您可以讀取到結(jié)果一致的數(shù)據(jù)。 |
實時機(jī)器學(xué)習(xí) | 通常在機(jī)器學(xué)習(xí)場景中,需要花費大量的時間處理數(shù)據(jù),例如,數(shù)據(jù)清洗、轉(zhuǎn)換和提取特征等,還需要對歷史數(shù)據(jù)和實時數(shù)據(jù)進(jìn)行處理。而Iceberg簡化了工作流程,整個數(shù)據(jù)處理過程是一條完整的、可靠的實時流,其數(shù)據(jù)的清洗、轉(zhuǎn)換和特征化等操作都是流上的節(jié)點動作,無需處理歷史數(shù)據(jù)和實時數(shù)據(jù)。此外,Iceberg還支持原生的Python SDK,對于機(jī)器學(xué)習(xí)算法的開發(fā)者非常友好。 |