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

本文首发于泊浮目的简书https://www.jianshu.com/u/204b8aaab8ba

版本 日期 备注
1.0 2021.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能力,提供一定的*事务特性和并发能力8
  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是可以胜任的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容