全部产品
Search
文档中心

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

更新时间:Feb 04, 2024

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数据湖,查询侧即可查询该数据。例如,在日志场景中,启动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,对于机器学习算法的开发者非常友好。