全部產品
Search
文件中心

E-MapReduce:Iceberg概述

更新時間:Jul 01, 2024

Iceberg是一種開放的資料湖表格式。您可以藉助Iceberg快速地在HDFS或者阿里雲OSS上構建自己的資料湖儲存服務,並藉助開源巨量資料生態的Spark、Flink、Hive和Presto等計算引擎來實現資料湖的分析。

核心能力

Apache Iceberg設計初衷是為瞭解決Hive數倉上雲的問題,經過多年迭代已經發展成為雲上構建資料湖服務的表格式標準。關於Apache Iceberg的更多介紹,請參見Apache Iceberg官網

目前Iceberg提供以下核心能力:

  • 基於HDFS或者Object Storage Service構建低成本的輕量級資料湖儲存服務。

  • 實現主流開源計算引擎入湖和分析情境的完善對接。

  • 完善的ACID語義。

  • 支援行級資料變更能力。

  • 支援歷史版本回溯。

  • 支援高效的資料過濾。

  • 支援Schema變更。

  • 支援分區布局變更。

  • 支援隱式分區(Hidden Partitioning)。

為了便於理解數倉和Iceberg資料湖在系統架構、業務價值和成本方面的差異,選擇了業界流行的Clickhouse即時數倉、Hive離線數倉和Iceberg資料湖三種具體的技術架構,為您進行了對比,詳細資料如下表。

對比項

子專案

開源Clickhouse即時數倉

開源Hive離線數倉

阿里雲Iceberg資料湖

系統架構

架構

計算儲存一體

計算儲存分離

計算儲存分離

多計算引擎支援

不支援

支援

支援

資料存放區在Object Storage Service

不支援

支援不完善

支援

資料存放區在HDFS

不支援

支援

支援

儲存格式開放性

不開放

開放

開放

業務價值

時效性

秒級

小時級/天級

分鐘級

計算靈活性

事務性

不支援

不完善

支援

表級語義通用性

優秀

行級資料變更

不支援

支援較弱

支援

資料品質

非常高

較高

較高

維護成本

查詢效能

較高

較高

儲存成本

非常高

一般

自助服務

不支援

不支援

支援

資源彈性

一般

一般

優秀

與開源Iceberg對比

從基礎功能、資料變更和計算引擎等方面,對比了阿里雲Iceberg與開源Iceberg,詳細資料如下表。

說明

“√”表示支援,“x”表示暫未支援。

類別

專案

子專案

開源Iceberg

Iceberg商業版(阿里雲)

基礎功能

ACID

歷史版本回溯

Source和Sink整合

Batch

Streaming

高效資料過濾

資料變更

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

本機資料緩衝加速

x

自動合并小檔案

x

說明

以上資訊是在2021年9月份,客觀分析開源Iceberg和商業版Iceberg現狀之後制定的表格。隨著後續版本的不斷迭代升級,對比項狀態可能發生變化。

適用情境

Iceberg作為通用資料湖解決方案中最核心的組件之一,主要適用於以下情境。

情境

描述

即時資料匯入和查詢

資料即時從上遊流入Iceberg資料湖,查詢側即可查詢該資料。例如,在日誌情境中,啟動IcebergSpark流作業,即時地將日誌資料匯入Iceberg表中,然後可以使用Hive、SparkIceberg或Presto進行即時查詢。同時,由於Iceberg支援ACID,保證了資料的流入和查詢的隔離性,不會產生髒資料。

刪除或更新資料

大部分數倉都難以實現較為高效的行級資料刪除或更新,通常需要啟動離線作業把整個表未經處理資料讀取出來,然後變更資料後,寫入到一個原始表。而Iceberg成功把變更的範圍從表層級縮小到了檔案層級,從而可以通過局部變更來完成商務邏輯的資料變更或刪除。

在Iceberg資料湖中,您可以直接通過執行類似命令DELETE FROM test_table WHERE id > 10,來完成表中資料的變更。

資料品質控制

藉助於Iceberg Schema的校正功能,在資料匯入時剔除異常資料,或者對異常資料做進一步處理。

資料Schema變更

資料的Schema並非固定不變,Iceberg支援通過Spark SQL的DDL陳述式完成表結構變更。

Iceberg在變更表結構的時候,歷史資料並不需要全部重新按照新的Schema匯出一份,從而使得Schema變更的速度非常快。同時,由於Iceberg支援ACID,有效地隔離了Schema變更對現有讀取任務的影響,從而使得您可以讀取到結果一致的資料。

即時機器學習

通常在機器學習情境中,需要花費大量的時間處理資料,例如,資料清洗、轉換和提取特徵等,還需要對歷史資料和即時資料進行處理。而Iceberg簡化了工作流程,整個資料處理過程是一條完整的、可靠的即時資料流,其資料的清洗、轉換和特徵化等操作都是流上的節點動作,無需處理歷史資料和即時資料。此外,Iceberg還支援原生的Python SDK,對於機器學習演算法的開發人員非常友好。