论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
数据湖选型指南|Hudi vs Iceberg 数据更新能力深度对比 ...
数据湖选型指南|Hudi vs Iceberg 数据更新能力深度对比
惊落一身雪
金牌会员
|
2023-3-17 23:41:49
|
显示全部楼层
|
阅读模式
楼主
主题
650
|
帖子
650
|
积分
1950
数据湖
作为新一代大数据基础设施,近年来持续火热,许多前线的同学都在讨论数据湖应该怎么建,许多企业也都在构建或者计划构建自己的数据湖。基于此,自然引发了许多关于
数据湖选型
的讨论和探究。但是经过搜索之后我们发现,网上现存的很多内容都是基于较早之前的开源信息做出的结论,在企业调研初期容易造成不准确的印象和理解。
因此带着这样的问题,我们计划推出数据湖选型系列文章,基于最新的开源信息,从
升级数据湖架构
的几个重要纬度帮助大家进行深度对比。希望能抛砖引玉,引起大家一些思考和共鸣,欢迎同学们一起探讨。
实践过程中我们发现,在计划升级数据湖架构的客户中,
支持数据的事务更新
通常是大家的第一基础诉求。因此,该系列的第一篇内容我们将从需求的诞生背景,以及不同数据湖架构在数据事务上的能力对比,两个方面帮助大家在数据湖选型之路上做出更好的决定。
需求背景
在传统的 Hive 离线数仓架构下,数据更新的成本是非常大的,更新一条数据需要重写整个分区甚至整张表。因此在真实业务场景中,出于开发成本、数据风险等方面的考虑,大家都不会在 Hive 数仓中更新数据。
不过随着 Hive 3.0 的推出,Hive 表在事务能力上也向前迈了一大步,官方在推出 3.0 时也重点宣传了它的事务能力。不过在实际应用中仍然存在非常大的限制,真实投产的用户寥寥无几。(仅支持ORC事务内表,这意味着像Spark这类计算引擎,无法直接在Hive事务表上进行ETL/ELT开发,包括像CDH、袋鼠云公司都在Spark兼容上做过投入,但是效果不佳,远达不到生产级的应用预期)
因此,在数据湖选型过程中,
高效的并发更新能力
就显得尤为重要。它能够改变我们在 Hive 数仓中遇到的数据更新成本高的问题,支持对海量的离线数据做更新删除。
数据更新实现的选型
目前市面上核心的数据湖开源产品大致有这么几个:Apache Iceberg、Apache Hudi和 Delta。
本文将为大家重点介绍 Hudi 和 Iceberg 在数据更新实现方面的表现。
Hudi 的数据更新实现
Hudi(Hadoop Update Delete Incremental),从这个名称可以看出,它的诞生就是为了解决 Hadoop 体系内数据更新和增量查询的问题。要想弄明白 Hudi 是如何在 HDFS 这类文件系统上实现快速 update 操作的,我们需要先了解 Hudi 的几个特性:
· Hudi 表的文件组织形式:在每个分区(Partition)内,数据文件被切分组织成一个个文件组(FileGroup),每个文件组都已 FileID 进行唯一标识。
· Hudi 表是有主键设计的,每条数据都已主键进行唯一标识。
· Hudi 表是有
索引设计
的。
结合上面的三个特性可以得出,Hudi 表的索引可以帮助我们快速地定位到某一条数据存在于某个分区的某个文件组中,然后对其进行 Update 操作,即重写这部分文件组。
Iceberg 的数据更新实现
Iceberg 的官方定位是「
面向海量数据分析场景的高效存储格式
」。所以它没有像 Hudi 一样模拟业务数据库的设计模式(主键+索引)来实现数据更新,而是设计了更强大的文件组织形式来实现数据的 update 操作,详见下图:
• Snapshot:用户的每次 commit 会产生一个新的 snapshot
• Manifest List:维护当前 snapshot 中所有的 manifest
• Manifest:维护当前 Manifest 下所有的 data files 和 delete files
• Data File:存储数据的文件
• Delete File:存储「删除的数据」的文件
在上面的文件组织基础上,我们可以看出,Iceberg 实现 update 的大致逻辑是:
· 先将要删除的数据写入 Delete File;
· 然后将「Data File」 JOIN 「Delete File」进行数据比对,实现数据更新。
当然,实现这两步有很多技术细节:比如利用 Sequence Number 保障事务顺序;Delete File 根据删除时的文件状态判断是走 position delete 还是 equality delete 逻辑;引入 equality_ids 概念模拟主键等。
如何选择
单纯从数据更新能力这个角度来看:
· Hudi 凭借文件组+索引+主键的设计模式,能够有效
减少数据文件的冗余更新
,提高数据更新效率。
· Iceberg 通过文件组织设计也能达到数据更新效果,但是每一次的 commit 都会产生新的文件,如果写入/更新频繁,小文件问题会比较严重。(虽然官方也配套提供了小文件治理能力,但是这部分的资源消耗、治理难度相对 Hudi 来说会比较大)
如何实践应用
当我们确定了数据湖选型后,如何在生产环境中进行实践应用就成为了下一个问题。
这里就需要提前了解表类型这个概念,同一种
数据湖表格式
也有不同的类型区别,分别适用不同的场景:
• COW(Copy On Write):写时复制表。在数据写入/更新时,立即重写原有数据文件,生成一份新的数据文件。
• MOR(Merge On Read):读时合并表。在数据写入/更新时,不修改原有文件,写入新的日志/文件,在之后数据被读取到的时候,重写数据文件。
基于这两种表类型的特性差异,我们给出如下建议:
· 如果你的湖表写入/更新不频繁,主要用于支撑数据查询/分析场景,那建议使用 COW 表。
· 如果你的湖表写入/更新频繁(甚至是用于实时开发场景的写入),那建议使用 MOR 表。
总结
没有最好的技术架构,只有最适合当前业务的技术架构。
关于数据湖的选型当然也不能简单从数据更新能力这一单一纬度做出判断。后续我们将继续推出不同数据湖架构在 Schema 管理、查询加速、批流一体等更多纬度的对比内容。欢迎大家和我们一起探讨交流。
同时,袋鼠云也有自己的
数据湖仓一体化构建平台 EasyLake
,提供面向湖仓一体的数据湖管理分析服务,基于统一的元数据抽象构建一致性的数据访问,提供海量数据的存储管理和实时分析处理能力。
《数据治理行业实践白皮书》下载地址:
https://fs80.cn/380a4b
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=szbky
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:
https://github.com/DTStack
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
惊落一身雪
金牌会员
这个人很懒什么都没写!
楼主热帖
处理接口幂等性的两种常见方案 ...
图文结合带你搞懂InnoDB MVCC
一个故事看懂CPU的SIMD技术
看完这个,还不会DVMA,请你吃瓜 ...
【.NET源码解读】深入剖析中间件的设计 ...
聊一聊 TLS/SSL
大数据-数据仓库-实时数仓架构分析 ...
近万条中药各家经方验方秘方ACCESS\EXC ...
腾讯叶聪:朋友圈爆款背后的计算机视觉 ...
第6章 分支语句和逻辑运算符 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表