全部产品
Search
文档中心

开源大数据平台E-MapReduce:Iceberg

更新时间:Aug 14, 2026

Iceberg是一种开放的数据湖表格式。您可以借助Iceberg快速地在HDFS或者阿里云OSS上构建自己的数据湖存储服务,并借助开源大数据生态的Spark、Flink、Hive和Presto等计算引擎来实现数据湖的分析。

核心能力

Apache Iceberg设计初衷是为了解决Hive数仓上云的问题,经过多年迭代已经发展成为云上构建数据湖服务的表格式标准。关于Apache Iceberg的更多介绍,请参见Apache Iceberg官网。

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

  • 基于HDFS或者对象存储构建低成本的轻量级数据湖存储服务。

  • 实现主流开源计算引擎入湖和分析场景的完善对接。

  • 完善的ACID语义。

  • 支持行级数据变更能力。

  • 支持历史版本回溯。

  • 支持高效的数据过滤。

  • 支持Schema变更。

  • 支持分区布局变更。

  • 支持隐式分区(Hidden Partitioning)。

为了便于理解数仓和Iceberg数据湖在系统架构、业务价值和成本方面的差异,选择了业界流行的Clickhouse实时数仓、Hive离线数仓和Iceberg数据湖三种具体的技术架构,为您进行了对比,详细信息如下表。

对比项

子项目

开源Clickhouse实时数仓

开源Hive离线数仓

阿里云Iceberg数据湖

系统架构

架构

计算存储一体

计算存储分离

计算存储分离

多计算引擎支持

不支持

支持

支持

数据存储在对象存储

不支持

支持不完善

支持

数据存储在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数据湖,查询侧即可查询该数据。例如,在日志场景中,启动Iceberg或Spark流作业,实时地将日志数据导入Iceberg表中,然后可以使用Hive、Spark、Iceberg或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,对于机器学习算法的开发者非常友好。