GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

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

2020 年 4 月 22 日

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

随着大数据存储和处理需求越来越多样化,如何构建一个统一的数据湖存储,并在其上进行多种形式的数据分析,成了企业构建大数据生态的一个重要方向。如何快速、一致、原子性地在数据湖存储上构建起 Data Pipeline,成了亟待解决的问题。为此,Uber 开源了 Apache Hudi,Databricks 提出了 Delta Lake,而 Netflix 则发起了 Apache Iceberg 项目,一时间这种具备 ACID 能力的表格式中间件成为了大数据、数据湖领域炙手可热的方向。


虽然现阶段国内仍然缺乏数据湖概念上的优秀商业方案,但在基础软件开源化的趋势下,国内企业在数据湖技术点上的探索与跟进并不比国外企业落后太多。腾讯在 2018 年加入大数据存储开源项目 Apache Ozone,后又于 2019 年开始投入研发 Apache Iceberg;阿里巴巴也正联合 Apache Iceberg 社区积极推动 Flink 实时数据湖技术方案的落地。那么,Iceberg 和其他两个开源项目有何不同?为什么阿里和腾讯都在积极投入 Iceberg 的开源生态?Iceberg 有什么独到之处?近期 InfoQ 采访了腾讯数据平台部数据湖内核技术负责人、资深大数据工程师邵赛赛,他与我们分享了腾讯选择 Iceberg 前后的一些思考和采用 Iceberg 之后所做的优化工作,本文基于采访整理而成。邵赛赛还将在 QCon 全球软件开发大会(北京站)2020 带来主题为《Iceberg - 新一代的数据湖表格式》的演讲分享,感兴趣的读者可以关注。


计算引擎之下、存储之上的新技术

数据库大牛、图灵奖获得者 Michael Stonebraker 曾在 MapReduce 诞生之初撰写过一篇文章,题为“MapReduce: A major step backwards”,Michael Stonebraker 在文章中直截了当地指出:MapReduce 忽视了数据库领域积累超过 40 年的技术经验。虽然大数据技术的出现和迭代降低了用户处理海量数据的门槛,但另一方面,与数据库这样高度优化的技术相比,大数据技术的抽象和实现还是太原始和初级。因此大数据技术在后续十几年的发展中,一直以数据库为目标,将更多数据库的成熟技术和理念借鉴到大数据中。


当前,大数据分析领域已经相当成熟,如何借鉴更多数据库的成熟技术和理念来提升大数据的能力呢?Apache Iceberg、Hudi 和 Delta Lake 这三个定位类似的开源项目正是从数据库方法论中汲取了灵感,将事务能力带到了大数据领域,并抽象成统一的中间格式供不同引擎适配对接。


如何定义这类新技术?


简单地说,这类新技术是介于上层计算引擎和底层存储格式之间的一个中间层,我们可以把它定义成一种“数据组织格式”,Iceberg 将其称之为“表格式”也是表达类似的含义。它与底层的存储格式(比如 ORC、Parquet 之类的列式存储格式)最大的区别是,它并不定义数据存储方式,而是定义了数据、元数据的组织方式,向上提供统一的“表”的语义。它构建在数据存储格式之上,其底层的数据存储仍然使用 Parquet、ORC 等进行存储。



Apache Iceberg、Hudi 和 Delta Lake 诞生于不同公司,需要解决的问题存在差异,因此三者在设计初衷上稍有不同。


其中,Iceberg 的设计初衷更倾向于定义一个标准、开放且通用的数据组织格式,同时屏蔽底层数据存储格式上的差异,向上提供统一的操作 API,使得不同的引擎可以通过其提供的 API 接入;Hudi 的设计初衷更像是为了解决流式数据的快速落地,并能够通过 upsert 语义进行延迟数据修正;Delta Lake 作为 Databricks 开源的项目,更侧重于在 Spark 层面上解决 Parquet、ORC 等存储格式的固有问题,并带来更多的能力提升。


虽然这三个项目在设计初衷上稍有不同,但实现的思路和提供的能力却非常相似,他们都提供了 ACID 的能力,都基于乐观锁实现了冲突解决和提供线性一致性,同时相应地提供了 time travel 的功能。


但是因为设计初衷的不同,三个项目当前的能力象限各有不同,Iceberg 在其格式定义和核心能力上最为完善,但是上游引擎的适配上稍显不足;Hudi 基于 Spark 打造了完整的流式数据落地方案,但是其核心抽象较弱,与 Spark 耦合较紧;Delta Lake 同样高度依赖于 Spark 生态圈,与其他引擎的适配尚需时日。不过邵赛赛认为,这三个项目现有的差异会随着社区的推动和改进以及时间的累积慢慢磨平,最终可能会变得更趋于相同。


Apache Iceberg 在腾讯的采用情况

腾讯在 Iceberg 还未进入 Apache 孵化器时就已经开始关注,随着这几个技术的开源以及进入孵化器,这一领域开始逐渐升温,从 2019 年下半年开始,腾讯正式在该技术上进行探索和投入。


为什么选择 Iceberg?

谈及引入 Iceberg 的原因,邵赛赛表示,当时团队在构建大数据生态的过程中遇到了几个痛点,而 Iceberg 恰好能解决这几个痛点:


  1. T+0 的数据落地和处理。传统的数据处理流程从数据入库到数据处理通常需要一个较长的环节、涉及许多复杂的逻辑来保证数据的一致性,由于架构的复杂性使得整个流水线具有明显的延迟。Iceberg 的 ACID 能力可以简化整个流水线的设计,降低整个流水线的延迟。

  2. 降低数据修正的成本。传统 Hive/Spark 在修正数据时需要将数据读取出来,修改后再写入,有极大的修正成本。Iceberg 所具有的修改、删除能力能够有效地降低开销,提升效率。


至于为何最终选择采用 Iceberg,而不是其他两个开源项目,技术方面的考量主要有以下几点:


  • Iceberg 的架构和实现并未绑定于某一特定引擎,它实现了通用的数据组织格式,利用此格式可以方便地与不同引擎(如 Flink、Hive、Spark)对接,这对于腾讯内部落地是非常重要的,因为上下游数据管道的衔接往往涉及到不同的计算引擎;

  • 良好的架构和开放的格式。相比于 Hudi、Delta Lake,Iceberg 的架构实现更为优雅,同时对于数据格式、类型系统有完备的定义和可进化的设计;

  • 面向对象存储的优化。Iceberg 在数据组织方式上充分考虑了对象存储的特性,避免耗时的 listing 和 rename 操作,使其在基于对象存储的数据湖架构适配上更有优势。


除去技术上的考量,邵赛赛和团队也对代码质量、社区等方面做了详细的评估:


  • 整体的代码质量以及未来的进化能力。整体架构代码上的抽象和优势,以及这些优势对于未来进行演化的能力是团队非常关注的。一门技术需要能够在架构上持续演化,而不会具体实现上需要大量的不兼容重构才能支持。

  • 社区的潜力以及腾讯能够在社区发挥的价值。社区的活跃度是另一个考量,更重要的是在这个社区中腾讯能做些什么,能发挥什么样的价值。如果社区相对封闭或已经足够成熟,那么腾讯再加入后能发挥的价值就没有那么大了,在选择技术时这也是团队的一个重要考量点。

  • 技术的中立性和开放性。社区能够以开放的态度去推动技术的演化,而不是有所保留地向社区贡献,同时社区各方相对中立而没有一个相对的强势方来完全控制社区的演进。


优化和改进

从正式投入研发到现在,腾讯在开源版本的基础上对 Iceberg 进行了一些优化和改进,主要包括:


  1. 实现了行级的删除和更新操作,极大地节省了数据修正和删除所带来的开销;

  2. 对 Spark 3.0 的 DataSource V2 进行了适配,使用 Spark 3.0 的 SQL 和 DataFrame 可以无缝对接 Iceberg 进行操作;

  3. 增加了对 Flink 的支持,可以对接 Flink 以 Iceberg 的格式进行数据落地。


这些改进点提高了 Iceberg 在落地上的可用性,也为它在腾讯内部落地提供了更为吸引人的特性。同时腾讯也在积极拥抱社区,大部分的内部改进都已推往社区,一些内部定制化的需求也会以更为通用的方式贡献回社区。


目前团队正在积极尝试将 Iceberg 融入到腾讯的大数据生态中,其中最主要的挑战在于如何与腾讯现有系统以及自研系统适配,以及如何在一个成熟的大数据体系中寻找落地点并带来明显的收益。邵赛赛具体提到了以下几点:


  1. Iceberg 的上下游配套能力的建设相对缺乏,需要较多的配套能力的建设,比如 Spark、Hive、Flink 等不同引擎的适配;

  2. 其次是 Iceberg 核心能力成熟度的验证,它是否能够支撑起腾讯大数据量级的考验,其所宣称的能力是否真正达到了企业级可用,都需要进一步验证和加强;

  3. 最后,腾讯内部大数据经过多年发展,已经形成了一整套完整的数据接入分析方案,Iceberg 如何能够在内部落地,优化现有的方案非常重要。


Iceberg 的不足和未来

Iceberg 诞生的时间不长,虽然拥有高度抽象和非常优雅的设计,但功能上仍有不足,尤其在围绕生态系统的建立和周边能力的打造上还有很多工作需要做。邵赛赛认为,当前 Iceberg 最重要的缺失点是和上层引擎的对接。现在 Iceberg 和 Spark 的对接是最为完善的,但是由于 DataSource V2 API 仍在不断地改进中,对于一些语义的下推仍然缺失,因此能力上和内置的存储格式相比仍有欠缺(比如 bucket join 的支持)。而对于 Hive、Flink 的支持尚在开发中。因为 Iceberg 是一个统一的数据组织格式,想要全面使用的话必须使所有的上层引擎能够对接适配,因此这一块环节的补足是当前最为重要的。


其次,Iceberg 缺少行级更新、删除能力。腾讯内部已经为 Iceberg 增加了行级更新、删除的能力,但在 Iceberg 社区尚未有这样的能力,这些能力所需的格式定义仍在设计中。行级更新、删除能力是现有数据组织格式的最大卖点,因此该功能的补强对于 Iceberg 的推广和落地十分重要。


在腾讯内部,后续对于 Iceberg 的规划主要还是以适配不同的引擎以及优化核心能力为主,同时会围绕 Iceberg 和上下游的引擎提供端到端的面向终端用户的数据管道能力。


目前相比于 Hudi、Delta Lake,Iceberg 在国内的关注度较少,这主要是由于其主要开发团队在技术推广和运营上面的工作偏少,而且 Iceberg 的开发者多为海外开发者,但是现在已经有越来越多大公司加入到了 Iceberg 的贡献中,包括 Netflix、Apple、Adobe、Expedia 等国外大厂,也包括腾讯、阿里、网易等国内公司。邵赛赛非常看好 Iceberg 未来在国内发展的前景,在他看来,一个好的技术架构可能暂时不引人瞩目,但最终还是会得到更多人的认可。随着国内推广的增多,以及国内开发者在这个项目上的投入、运营,未来在国内 Iceberg 前景可期。


延伸阅读:


为什么我选择Apache Iceberg


深度对比delta、iceberg和hudi三大开源数据湖方案


嘉宾介绍:


邵赛赛,腾讯数据平台部数据湖内核技术负责人,资深大数据工程师,Apache Spark PMC member & committer, Apache Livy PMC member,曾就职于 Hortonworks,Intel 。


QCon北京2020的分享中,邵赛赛老师将详细介绍 Iceberg 的设计初衷、优点和能力,让你对表格式这一领域有充分的了解,点击了解详情。


本文由 InfoQ 粤港澳大湾区内容中心采访报道,我们重点关注大湾区 AI、金融科技、智能硬件、物联网、5G 等前沿技术动态及相关产业、公司报道,寻求报道请联系邮箱:natalie.cai@geekbang.com 。


2020 年 4 月 22 日 11:009854
用户头像
蔡芳芳 InfoQ高级编辑

发布了 573 篇内容, 共 274.7 次阅读, 收获喜欢 1801 次。

关注

评论 10 条评论

发布
用户头像
Iceberg的确设计得更优雅,但是怎么才能和数据砖头争夺ETL/ML用户群的投入和坚持,毕竟大家只想更容易的ETL。

https://medium.com/@eric.sun_39815/rescue-to-distributed-file-system-2dd8abd5d80d
2020 年 06 月 10 日 04:19
回复
用户头像
有点好奇?腾讯不是在规划"OZone - 下一代数据湖存储", 现在又要拥抱Iceberg?why?
2020 年 05 月 28 日 19:50
回复
这两个是不同的项目,OZone是数据湖存储,Iceberg是在它之上的表格式
2020 年 05 月 29 日 00:04
回复
用户头像
其实蛮好奇,为什么不直接对数据库进行修改,而要用中间件的这种方式解决?是因为成本吗?
2020 年 05 月 28 日 14:15
回复
用户头像
收到,有意思,第一次听说 Apache Iceberg
2020 年 05 月 13 日 10:15
回复
用户头像
为什么最后名字写错了?邵赛赛不是蔡芳芳
2020 年 04 月 23 日 09:36
回复
邵赛赛是接受采访的嘉宾,蔡芳芳是记者和写文章的人
2020 年 04 月 23 日 09:50
回复
用户头像
随着国内推广的增多,以及国内开发者在这个项目上的投入、运营,未来在国内 Iceberg 前景可期。
表示怀疑~
2020 年 04 月 22 日 18:23
回复
👌
2020 年 04 月 22 日 18:26
回复
只能且看后续了~
2020 年 04 月 22 日 19:13
回复
没有更多了
发现更多内容

【LeetCode】螺旋矩阵Java题解

HQ数字卡

算法 LeetCode 28天写作 3月日更

数据营销“教父”宋星十年倾心之作,让数据真正赋能企业

博文视点Broadview

啥子叫递归哟!!!(阶乘)

依旧廖凯

28天挑战 3月日更

Python 初学者必看:Python 异常处理集合

华为云开发者社区

Python 异常 代码 程序 错误

万物互联网络在企业中的价值和展望 | 趋势解读

浪潮云

物联网

镁信健康“互联网+医+药+险”模式能否打造出中国版联合健康?

商业资讯

腾讯高级工程师保姆级“Java成长手册”,层层递进,全是精华

Java架构追梦

Java 腾讯 架构师 java面试 面试核心知识点总结

三面拼多多归来,我总结了这些大厂面经及面试题

Java成神之路

Java 程序员 架构 面试 编程语言

一文搞懂PID控制算法

不脱发的程序猿

3月日更 PID 控制算法 智能控制 工业控制

Navicat操作MySQL简易教程

Simon

MySQL navicat

集成融云 IMLib 时,如何实现一套类似于 IMKit 的用户信息管理机制

融云 RongCloud

阿里P7亲自教你!一线互联网大厂中高级Android面试真题收录!讲的明明白白!

欢喜学安卓

android 程序员 面试 移动开发

一分钟了解EFT公链新一代超级DeFi公链——EGG超级公链

币圈那点事

区块链 公链 挖矿

Elasticsearch Segments Merging 磁盘文件合并

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

《精通比特币》学习笔记(第十一章)

棉花糖

区块链 学习笔记 3月日更

TCP拥塞控制四种算法

赖猫

TCP 网络协议

区块链商品溯源系统开发,区块链底层平台搭建方案

WX13823153201

区块链商品溯源系统开发

解析分布式应用框架Ray架构源码

华为云开发者社区

gRPC API 框架 ray 分布式应用框架

学以至用-从“0”到“1”设计千万级交易系统

ninetyhe

高可用 分布式系统 海量数据库的设计与实践 异步削峰

恭喜自己2021金三银四收到的第五个Offer:字节跳动Java研发岗

比伯

Java 编程 架构 面试 程序人生

程序员必修课:阿里性能优化全解终开源!设计+代码+JVM三飞

程序员小毕

程序员 架构 面试 性能优化 JVM

整理 自动备份MYSQL数据库shell脚本

edd

阿里P7亲自讲解!整理几个重要的Android知识,最全Android知识总结

欢喜学安卓

android 程序员 面试 移动开发

1200道算法面试题:Github上霸榜算法宝典,狂揽8W星

互联网架构师小马

Java 数据结构 面试 算法 LeetCode

MySQL详解:索引的介绍和原理分析

周老师

Java 编程 程序员 架构 面试

2021社招阿里、腾讯、蚂蚁金服「4面」Java面试高频题分享

Java成神之路

Java 程序员 架构 面试 编程语言

有状态容器应用,从入门到实践

焱融科技

Kubernetes 云原生 焱融科技 分布式存储 容器存储

基于 SparkMLlib 智能课堂教学评价系统 - 系统实现(四)

大数据技术指南

大数据 spark 智能时代 28天写作 3月日更

翻译:《实用的Python编程》06_01_Iteration_protocol

codists

Python

三步上线自己的在线监考系统

融云 RongCloud

五位一体全方位解析Spring Boot,阿里爆款SpringBoot实战笔记也太香了

Java王路飞

Java 程序员 面试 微服务 springboot

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