5分钟入门数据湖IceBerg

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 随着大数据存储和处理需求的多样化,如何构建一个统一的数据湖存储,并在其上进行多种形式的数据分析成了企业构建大数据生态的一个重要方向。Netflix 发起的 Apache Iceberg 项目具备 ACID 能力的表格式成为了大数据、数据湖领域炙手可热的方向。关注公众号:857Hub

一、Iceberg产生背景

随着大数据存储和处理需求的多样化,如何构建一个统一的数据湖存储,并在其上进行多种形式的数据分析成了企业构建大数据生态的一个重要方向。Netflix 发起的 Apache Iceberg 项目具备 ACID 能力的表格式成为了大数据、数据湖领域炙手可热的方向。


Apache Iceberg 是由 Netflix 开发开源,并于 2018年11月16日进入 Apache 孵化器。Netflix的数据湖原先是借助Hive来构建,但发现Hive在设计上的诸多缺陷之后,开始转为自研Iceberg。使用hive面临的问题如下:

  • 海量分区操作耗时。
  • 元数据分属MySQL和HDFS管理,写入操作本身的原子性难以保证;
  • Hive Metastore没有文件级别的统计信息,这使得filter只能下推到partition级别,对上层分析性能损耗。
  • Hive对底层文件系统的复杂语义依赖,使得数据湖难以构建在成本更低的S3上。

总体来说,Netflix设计Iceberg的核心诉求可以归纳为如下:

1.png

二、Iceberg简介

2.1 Iceberg是什么

Apache Iceberg 是一种用于跟踪超大规模表的新格式,是专门为对象存储(如S3)而设计的。具备如下能力:

  • 构建于存储格式之上的数据组织方式
  • 提供 ACID 能力,提供一定的事务特性和并发能力
  • 提供行级别的数据修改能力
  • 确保 Schema 的准确性,提供一定的 Schema 扩展能力

2.2 Iceberg功能特性

  • 模式演化:支持添加,删除,更新或重命名,并且没有副作用
  • 隐藏分区:可以防止导致错误提示或非常慢查询的用户错误
  • 分区布局演变:可以随着数据量或查询模式的变化而更新表的布局
  • 快照控制:可实现使用完全相同的表快照的可重复查询,或者使用户轻松检查更改
  • 版本回滚:使用户可以通过将表重置为良好状态来快速纠正问题
  • 快速扫描数据:无需使用分布式SQL引擎即可读取表或查找文件
  • 数据修剪优化:使用表元数据使用分区和列级统计信息修剪数据文件
  • 兼容性好:可以存储在任意的云存储系统和HDFS中
  • 支持事务:序列化隔离,表更改是原子性的,读者永远不会看到部分更改或未提交的更改
  • 高并发:高并发写入器使用乐观并发,即使写入冲突,也会重试以确保兼容更新成功

2.3支持计算引擎/sql引擎

2.3.1 Flink

Apache Iceberg同时支持Apache Flink的DataStream API和Table API,以将记录写入Iceberg表。目前,集成了iceberg和apache flink 1.11.x。支持的功能如下所示:

2.png

2.3.2 Spark

iceberg使用Apache Spark的DataSourceV2 API实现数据源和目录实现。Spark DSv2是一个不断发展的API,在Spark版本中提供了不同级别的支持:

3.png

2.3.3 Trino

Trino是一个基于内存的MPP计算引擎,通过并行+内存的计算方式,可以大大提高计算速度,再加上一些优化(例如剪枝、谓词下推等),就可以达到大数据量计算任务下的秒级响应。通过在trino中配置iceberg connector可以操作iceberg表。

三、Iceberg基本原理

3.1 Iceberg基本概念

4.png

如图所示是iceberg的表结构,其中相关概念如下所述:

  • VersionMetadata

存储当前版本的元数据信息(所有snapshot信息)。

  • Snapshot(Manifest list)

快照文件,也成为清单列表文件,是以avro 格式进行存储,以 snap- 开头的。每次更新都会产生一个清单列表文件,代表一张表在某个时刻的状态。Snap*.avro里面存储的是清单文件的列表,每个清单文件占据一行。每行中存储了清单文件的路径、清单文件里面存储数据文件的分区范围、增加了几个数据文件、删除了几个数据文件等信息。这些信息可以用来在查询时提供过滤。

  • Manifest

清单文件其实是元数据文件,其里面列出了组成某个快照(snapshot)的数据文件列表。每行都是每个数据文件的详细描述,包括数据文件的状态、文件路径、分区信息、列级别的统计信息(比如每列的最大最小值、空值数等)、文件的大小以及文件里面数据的行数等信息。其中列级别的统计信息在 Scan 的时候可以为算子下推提供数据,以便可以过滤掉不必要的文件。

清单文件是以 avro 格式进行存储的,所以是以 .avro 后缀结尾的,比如 d5ba704c-1453-4f18-9077-6944baa1b3f2-m0.avro

每次更新会产生一个或多个清单文件。

  • Datafile

数据文件(data files)是 Apache Iceberg 表真实存储数据的文件,一般是在表的数据存储目录的 data 目录下。如果我们的文件格式选择的是 parquet,那么文件是以 .parquet 结尾,

比如 00000-0-0eca9076-9c03-4077-baa9-e68769e15c58-00001.parquet 就是一个数据文件。

3.2 Iceberg快照设计

核心思想:在时间轴上跟踪表的所有变化

  • 快照(snapshot)表示表数据文件的一个完整集合
  • 每次更新操作会生成一个新的快照。

5.png

快照隔离

  • 读操作仅适用于当前已生成的快照
  • 写操作会生成新的隔离快照,并在写完成后原子性提交

3.3 Iceberg元数据

6.png

Iceberg提供了表级别的抽象接口,自己在文件中维护表的元数据信息(而非通过HMS维护)。上图中,在HMS元数据存储的是iceberg表的入口信息。即iceberg表的当前版本的元数据入口路径信息。在实际应用中,如下图所示,表order的元数据信息存放在HMS上,存放的信息内容metadata_location= hdfs://node1:9000/user/hive/warehouse/orders/metadata/00009-7aa28ddf-34fe-496b-8888-3b806a8edb7a.metadata.json 是order表当前快照元信息入口。previous_metadata_location是上一个快照信息的入口。

7.png

四、附录

【参考链接】

[1]https://iceberg.apache.org  iceberg官网

[2]http://iceberg.apache.org/releases iceberg版本发布

[3]https://github.com/apache/iceberg iceberg github

[4]http://iceberg.apache.org/spec/ iceberg表格式说明文档

[5][一篇文章掌握 delta、iceberg 和 hudi 三大开源数据湖方案](https://mp.weixin.qq.com/s?__biz=MzA5MTc0NTMwNQ==&mid=2650719887&idx=2&sn=c08c01990810a01bbfe7e94e70a53f4b&chksm=887ddbf9bf0a52efda132cb787313051a52b5b33dc4ef63f54b395fd24bf125a844942f97972&scene=21" \l "wechat_redirect)

[6]大数据架构变革进行时:为什么腾讯看好 Apache Iceberg?

[7] Flink + Iceberg 全场景实时数仓的建设实践_huzechen的博客-CSDN博客


相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
SQL Oracle 关系型数据库
Flink CDC 系列 - 同步 MySQL 分库分表,构建 Iceberg 实时数据湖
本篇教程将展示如何使用 Flink CDC 构建实时数据湖,并处理分库分表合并同步的场景。
Flink CDC 系列 - 同步 MySQL 分库分表,构建 Iceberg 实时数据湖
|
10月前
|
分布式计算 Kubernetes 流计算
Iceberg+Amoro+CloudEon体验云原生数据湖
通过使用CloudEon、Iceberg、Flink、Spark和Amoro,您可以轻松地在Kubernetes上构建一个强大的大数据基础环境。
380 0
|
2月前
|
SQL 分布式计算 HIVE
最强指南!数据湖Apache Hudi、Iceberg、Delta环境搭建
最强指南!数据湖Apache Hudi、Iceberg、Delta环境搭建
158 0
|
10月前
|
消息中间件 存储 分布式计算
SmartNews 基于 Flink 的 Iceberg 实时数据湖实践
SmartNews 数据平台架构师 Apache Iceberg Contributor 戢清雨,在 Flink Forward Asia 2022 实时湖仓专场的分享。
1372 0
SmartNews 基于 Flink 的 Iceberg 实时数据湖实践
|
存储 SQL 分布式计算
数据湖的选型(delta iceberg hudi)以及比对
数据湖的选型(delta iceberg hudi)以及比对
590 0
|
SQL 存储 设计模式
数据湖选型指南|Hudi vs Iceberg 数据更新能力深度对比
数据湖作为新一代大数据基础设施,近年来持续火热。在计划升级数据湖架构的客户中,支持数据的事务更新通常是大家的第一基础诉求。本文我们就为大家详细解析不同数据湖架构在数据事务上的能力对比,帮助大家在数据湖选型之路上做出更好的决定。这是「数据湖选型」系列的第一期,后续还将陆续推出,希望大家和我们共同探讨~
1506 0
数据湖选型指南|Hudi vs Iceberg 数据更新能力深度对比
|
SQL 机器学习/深度学习 存储
在 CDP中使用Iceberg 为数据湖仓增压
我们很高兴地宣布在CDP 中全面推出 Apache Iceberg。Iceberg 是 100% 开放的表格格式,由Apache Software Foundation开发,帮助用户避免供应商锁定。今天的一般可用性公告涵盖了在 Cloudera 数据平台 (CDP) 中的关键数据服务中运行的 Iceberg,包括Cloudera 数据仓库 ( CDW )、Cloudera 数据工程 ( CDE ) 和 Cloudera 机器学习 ( CML ))。这些工具使分析师和数据科学家能够通过他们选择的工具和分析引擎轻松地就相同的数据进行协作。
在 CDP中使用Iceberg 为数据湖仓增压
|
存储 SQL 缓存
Flink + Iceberg + 对象存储,构建数据湖方案
上海站 Flink Meetup 分享内容,如何基于Flink、对象存储、Iceberg 来构建数据湖生态。
Flink + Iceberg + 对象存储,构建数据湖方案
|
存储 SQL 数据采集
|
SQL 存储 分布式计算
Flink 如何实时分析 Iceberg 数据湖的 CDC 数据
数据湖的架构中,CDC 数据实时读写的方案和原理
Flink 如何实时分析 Iceberg 数据湖的 CDC 数据