大数据学习笔记2:现代数据湖之Iceberg

本文首发于泊浮目的简书https://www.jianshu.com/u/204...
版本日期备注
1.02021.6.20文章首发

最近Iceberg有点小火,在这里也是根据自己看到的资料做个笔记输出一下。

数据湖的定义就不说了,不了解的小伙伴可以看我之前做的笔记大数据学习笔记1:数仓、数据湖、数据中台

1. 数据湖发展现状

  • 从广义上来说数据湖系统主要包括数据湖村处和数据湖分析
  • 现有数据湖技术主要由云厂商推动,包括基于对象存储的数据湖存储及在其之上的分析套件

    • 基于对象存储(S3,WASB)的数据湖存储技术,如Azure ADLS,AWS Lake Formation等
    • 以及运行在其上的分析工具,如AWS EMR,Azure HDinsight,RStudio等等

2. 业界趋势

  • 构建统一、高效的数据存储以满足不同数据处理场景的需求已成为趋势

    • ETL作业和OLAP分析——高性能的结构化存储,分布式能力
    • 机器学习训练和推理——海量的非结构存储,容器挂载能力
  • 通用数仓(Hive、Spark)在向数据湖分析泛化,而数仓则向高性能架构演进

3. 现代数据湖的能力要求

  • 支持流批计算
  • Data Mutation
  • 支持事务
  • 计算引擎抽象
  • 存储引擎抽象
  • 数据质量
  • 元数据支持扩展

4.常见现代数据湖技术

  • Iceberg
  • Apache Hudi
  • Delta Lake

总的来说,这些数据湖都提供了这样的一些能力:

  1. 构建于存储格式之上的数据组织方式
  2. 提供ACID能力,提供一定的事务特性和并发能力
  3. 提供行级别的数据修改能力
  4. 确保schema的准确性,提供一定的schema修改能力

一些具体的对比可以看这张图:

5. Iceberg

我们先看看Iceberg的官网是如何介绍它的:

Apache Iceberg is an open table format for huge analytic datasets. Iceberg adds tables to Trino and Spark that use a high-performance format that works just like a SQL table.

我的理解是,Iceberg以表的形式来组织底层数据,并对上面提供了高性能的表级别计算能力。

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

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

目前已知在用的Iceberg的大厂:

  • 国外:Netflix、Apple、Linkined、Adobe、Dremio
  • 国内:腾讯、网易、阿里云

5.1 Iceberg的优势

  • 写入:支持事务,写入即可见;并提供upset/merge into的能力
  • 读取:支持以流的方式读取增量数据:Flink Table Source以及Spark Struct streaming都支持;不惧怕Schema的变更
  • 计算:通过抽象不绑定任何引擎。提供原生的Java Native API,生态上来说,目前支持Spark、Flink、Presto、Hive
  • 存储:对底层存储进行了抽象,不绑定于任何底层存储;支持隐藏分区和分区进化,方便业务进行数据分区策略;支持Parquet,ORC,Avro等格式来兼容行存储和列存储

5.2 特性

5.2.1 快照设计方式

  • 实现基于快照的跟踪方式

    • 记录表的结构,分区信息,参数等
    • 跟踪老的快照以确保能够最终回收
  • 表的元数据是不可修改的,并始终向前迭代
  • 当前的快照可以回退

5.2.2 元数据组织

  • 写操作必须:

    • 记录当前元数据的版本-Base Version
    • 创建新的元数据以及mainfest文件
    • 原子性地将base version替换为新的版本
  • 原子性替换保证了线性的历史
  • 原子性的替换需要依靠以下操作来保证

    • 元数据管理器所提供的能力
    • HDFS或是本地文件系统所提供的原子化的rename能力
  • 冲突解决——乐观锁

    • 假定当前没有其他的写操作
    • 遇到冲突则基于当前最新的元数据进行重试

5.2.2 事务性提交

  • 写操作必须

    • 记录当前元数据的版本-base version
    • 创建新的元数据以及mainfest文件
    • 原子性地将base version替换成新的版本
  • 原子性替换保证了线形的历史
  • 原子性替换需要依靠以下操作来保证

    • 元数据管理器提供的能力
    • HDFS或是本地文件系统所提供的原子化的rename能力
  • 冲突解决-乐观锁

    • 假定当前没有其他的写操作
    • 遇到冲突则基于当前的最新元数据进行重试

5.3场景

5.3.1 CDC数据实时摄入摄出

这里要讨论的是关系型数据库的binlog如何去做分析。在hadoop生态里,对这个场景一般是不怎么友好的。

最常见的方式是写到hive里,标记这是binlog,并声明它的类型(I,U,D),然后再跑个批量任务到存量表里。但hive只能做到小时级别的分区,但iceberg可以做到1分钟内。

5.3.2 近实时场景的流批一体

在lambda架构中,会分为实时链路和离线链路。主要技术栈非常复杂,如果能够接受准实时(30s~1min)的延迟,iceberg是可以胜任的。


泊浮说
作者是个热爱分享交流的人,所以有了这个专栏。你的点赞是我最大的更新动力。

从业6年,创过业带过团队。目前专注于数据应用方向,希望从数据中发现价值,基于数据创造价值。对于研发...

4.8k 声望
1.3k 粉丝
0 条评论
推荐阅读
一名Java开发的Go语言学习笔记(一)
版本日期备注 1.02023.5.15文章首发本文首发于泊浮目的掘金:[链接]0. 概要最近因为业务需要在学Go语言,虽然之前也用过别的语言,但主力语言一直是Java。在这里也想主要想用Java做对比,写几篇笔记。这篇主要是讲...

泊浮目阅读 400

基于 Flink 流计算实现的股票交易实时资产应用
本次赛题思路源自于真实工作场景的一个线上项目,该项目在经过一系列优化后已稳定上线,在该项目开发的过程中数据平台组和技术负责人提供了许多资源和指导意见,而项目的结果也让我意识到了流计算在实际生产中优...

ApacheFlink1阅读 494

封面图
国产 ETL 工具 etl-engine 流批一体数据交换系统 轻量级 跨平台 引擎
产品概述我们不仅仅是数据的搬运工,还是数据搬运过程中加工处理的工厂。我们不仅仅适用关系型数据库中,还适配当下流行的时序数据库、消息中间件、Hadoop生态中,支持多种类型数据库之间的融合查询及流式计算。e...

weigeonlyyou阅读 953

封面图
在毫秒量级上做到“更快”!DataTester 助力飞书提升页面秒开率
对飞书而言,用户体验旅程从打开产品页面的一瞬间就已开始,这里有一个十分重要的指标——页面秒开率,秒开率是指页面在一秒之内打开的比率。为了能够持续吸引用户,一款产品则至少需要在 1000 毫秒以内呈现出交互...

字节跳动数据平台阅读 886

封面图
Flink SQL 的数据脱敏解决方案
Flink SQL 的数据脱敏解决方案,支持面向用户级别的数据脱敏访问控制,即特定用户只能访问到脱敏后的数据。此方案是实时领域Flink的解决思路,类似于离线数仓 Hive 中 Ranger Column Masking 方案。

ApacheFlink1阅读 376

【Hudi】Filnk Sink 端链路源码解读(Insert、Update、Upsert)
数据文件:parquet(列存)和 arvo(行存)格式,COW(Copy On Write)表的话每次写的时候做合并,只存在 parquet,MOR(Merge On Read)则会有 base file(parquet)和增量 log file(arvo),本文里我们主要聊...

Mulavar阅读 776

数字企业办公安全“新范式” | 沙龙精粹(附PPT)
2023年3月,亿格云携手阿里云共同举办的零信任SASE办公安全专场沙龙圆满结束,在线上沙龙中,来自亿格云、数云和阿里云的三位行业专家,结合企业在数字化转型下面临的办公安全挑战和企业实践进行了详细的解读。

阿里云开发者阅读 692

从业6年,创过业带过团队。目前专注于数据应用方向,希望从数据中发现价值,基于数据创造价值。对于研发...

4.8k 声望
1.3k 粉丝
宣传栏