Iceberg在袋鼠云的探索及实践

news2025/2/2 12:46:41

“数据湖”、“湖仓一体”及“流批一体”等概念,是近年来大数据领域热度最高的词汇,在各大互联网公司掀起了一波波的热潮,各家公司纷纷推出了自己的技术方案,其中作为全链路数字化技术与服务提供商的袋鼠云,在探索数据湖架构的早期,就调研并选用了Iceberg作为基础框架,在落地过程中深度使用了Iceberg并进行了部分改造,在这个过程中,我们积累出了一些经验和探索实践,希望通过本篇文章与大家分享,也欢迎大家一起共同讨论。

一、为什么选择Iceberg

Iceberg作为Apache基金会下的一个顶级项目,是业界公认的开源数据湖实现方案之一,考虑到任何概念的提出本质上是源于底层软硬件技术或架构上取得了新的突破,我们首先站在技术演进的角度对Iceberg的出现契机和应用场景进行分析。

01 大数据存储技术现状

2006年Hadoop框架横空出世,改变了企业对数据的存储、处理和分析的认知,加速了大数据的发展,形成了完善的生态圈。工程师们将庞杂的历史数据存在分布式文件系统HDFS中,通过Hive、Spark等进行加速计算处理。至今为止,HDFS已然成为广泛应用的大数据基础组件。

在这个大数据技术发展过程中,也面临着一些问题。在Hive中,将表绑定为HDFS上的一个目录,通过HiveMetaStore记录其绑定的存储位置,计算引擎查询数据时请求主节点获取文件并读取,这天然缺少事务保证:某个用户写入的文件其他用户立即可见,没有隔离性;即便先写入到隐藏文件中,待事务提交后再全部改名可见,因为一批文件的改名不是原子操作,这只能保证分区级别的原子性。随着对象存储的广泛应用,通过主节点去获取全部文件有比较大的性能损耗,因为对象存储的“List”性能较差。

经过以上分析,我们发现Hive中这种设计的缺陷在于缺乏对表数据文件的管理维护:对于表中不同时刻包含的数据文件,都要即时访问HDFS主节点获取,这样子就造成了比较大的资源浪费。

而数据湖却能很好的解决这一问题,数据湖是一个集中各种形式和来源数据的存储区域,存储内容虽然种类繁多却管理有序,对数据文件的组织维护能够高效地帮助我们对接各类底层存储和上层计算。

02 数据湖技术选型——Iceberg

我们知道问题的关键在于“对表数据文件的管理维护”,基于此就可以开展技术选型了。在2020年末,技术团队做了众多技术方案的调研,包括包括Delta Lake、Hudi、Iceberg,我们最终选用了Iceberg。

而选择Iceberg的原因,正是基于袋鼠云的技术栈的具体情况做了充足考虑:袋鼠云中的离线计算、实时计算、智能标签等应用,在计算层需要依托Spark、Flink、Trino等多种引擎为客户解决不同的业务诉求,在底层则可能需要对接客户自建云、公有云等混合存储。这就要求所选择的技术方案必须能满足对接多种类型的需求。

Iceberg具备接口开放、易于拓展的优点,十分符合我们的选型要求。在存储层HDFS上增加一个中间层Iceberg以跟踪数据文件,不必改变其他层的架构设计,就可以享受到Iceberg对数据文件管理带来的极速体验与美妙特性。下图展示了袋鼠云基于Iceberg框架的数据湖架构设计:

file

基于前述关键点,我们介绍下Iceberg的设计,参考下图所示:

file

Iceberg在数据文件的基础上增加了文件清单和文件快照等索引,通过这些索引我们就能跟踪到每张表在当前时刻有哪些数据文件,这就解决了前文提到的Hive中的设计缺陷:某个用户写入的临时文件不会被其他用户读取到,因为这些文件没有被快照记录;每个事务修改跟踪的数据文件时,需要向锁服务进行申请,成功获取到锁许可之后可以更新快照内容,一次快照修改可以增加多个文件,这样就保证原子性;预先记录好目录下的每个数据文件可以避免对HDFS主节点的多次访问,对云存储友好。

二、Iceberg在袋鼠云中的应用实践

01 行级更新

在Hive中想要对历史数据进行订正,需要用增量数据合并历史数据后替换历史数据,这种方式的代价是比较大的,即便是很少的更新也需要对全表或者整个分区进行扫描。

利用Iceberg这种合并和覆写可以被推迟,如下图所示:

file

在Iceberg中,可以写入一份标记删除的数据文件并再写入更新后的数据文件,这样的好处是订正历史数据时用户在数栈平台的操作等待时间会很短,在查询的时候再对这个标记删除文件中的数据进行更新,准确查找到更新之后的数据。而实际对数据文件内容合并的耗时操作推迟在用户休息的时候,保证了后续操作的性能。

02 查询加速

在HDFS上,数据文件通常采用Parquet、ORC等存储格式,这些存储格式中记录了诸如列最大值/最小值/空值等详细的元数据信息,因此在进行查询的过程中,Iceberg充分利用了存储格式提供的元数据信息进行文件过滤。

用户在数栈平台写入数据时,在文件清单中汇总了每个文件中保存数据每一列的最大值/最小值/空值信息。在查询数据时,对查询条件和汇总信息进行交集判断,对于没有交集的文件就不需要再去读取了,这样就能够极大的减少需要读取的文件数量。

考虑到数据文件的分布是在写入时决定的,在写入数据顺序不规律的情况下,文件中的最大值/最小值范围跨度会很大,这样并集判断过滤的效果就没有那么明显了,这时候在数栈平台上按照一定规则对数据进行重排列,使得具有相似特征的数据落入到同一个数据文件里,这样提取出来的最大值/最小值信息就会在更接近的范围里,查询过滤性能会有更大提升。

03 自动治理

在Iceberg的写入过程中,为了支持快速写入和数据跟踪等功能,其代价是会在每次操作引入不同数量的小文件,这些小文件会随着时间的前进而不断拖延系统的效率,必须要通过合并操作进行删除才能继续保证系统的高效。

Iceberg本身提供了文件合并、快照清理等工具,但这需要用户手动去启动任务才能触发,对于使用者来说是额外心智负担。

file

如上图所示,袋鼠云在产品设计上为用户屏蔽了这种运维上的复杂度,用户只需要对表进行基本参数的设置就可以享受新框架优化后带来的快速和便捷,而更复杂的文件治理任务的启动和资源配置都交由后台程序监控完成。

三、袋鼠云基于Iceberg的改造

除了对Iceberg本身提供的能力进行应用,袋鼠云还根据生产场景的要求对Iceberg做了一定的改造。

01 列更新

在袋鼠云标签引擎中经常有需要根据原子指标生成派生指标的场景,在后台程序中就是为一张大宽表增加新的字段并且填入数据。在过去,我们依赖OverWrite操作在HDFS上重写新的表数据,然而这种操作都需要将全部字段数据进行写入,非常消耗存储和时间的(想象一下一张表有几百个字段,每次都需要重新写入)。

file

基于Iceberg袋鼠云设计了一种优化方案,如上图所示:保留原来的数据文件,列更新时将新的字段数据和表的主键字段数据一起写入到新的数据文件。这样,在写入过程中需要写入的数据量就大大减少了,而在读取过程中,再将新字段和原有的字段做一次合并,这样就能够保证数据的准确性。同时我们还会在查询时只读取包含查询字段的文件以提高查询性能。

当然,在多次添加新字段之后,每次查询中包含的合并操作就多了,性能就会随之下降,这就需要结合前述的文件合并功能,定时进行数据合并,这样更新累计的副作用就可以消除了。

02 批流一体

批流一体在存储上要解决的很重要的问题是:离线数仓依赖HDFS存储,HDFS能够提供大规模的存储,成本低廉,然而其实时性比较差;实时数仓依赖Kafka存储,Kafka能够存储的数据量有限,但是能够提供非常好的实时性。两条技术链路带来了理解和使用上的困难,能否提供统一的存储是批流一体架构落地的关键。

在袋鼠云中,我们提出了一种基于Iceberg的屏蔽能力,构建的针对这两种组件的统一存储方案:底层存储混合使用Iceberg和Kafka,但对使用者只暴露一张完整的数据表,在Iceberg中记录Kafka的切换位点(偏移量),读取时根据当前数据的时间信息选择读取Kafka或者Iceberg数据源。如下图所示:

file

具体步骤有:

1)在创建表时,设置Iceberg存储和Kafka存储相关的元数据信息。

2)写入数据时,向两种存储介质一起写入。在Iceberg每次生成新快照时,将最后一条数据对应的Kafka偏移量写入快照信息里。用户可以选择性开始Kafka事务保证。

3)读取数据时,在最近一段时间内的数据都通过Kafka进行消费,在读取完Kafka的数据后根据偏移量切换到对Iceberg记录的HDFS文件进行访问,读取历史数据。

这样就能符合了袋鼠云用户使用不同处理速度去处理不同阶段数据的需求。

四、写在最后

以上就是袋鼠云基于Iceberg在数据湖的一些探索和实践,目前这种框架已应用于我们的数据湖产品DataLake——提供面向湖仓一体的数据湖管理分析服务。基于统一的元数据抽象构建一致性的数据访问,提供海量数据的存储管理和实时分析处理能力,可以帮助企业快速构建湖仓一体化平台,完成数字化基础建设。

file

未来我们还会对数据湖和湖仓一体架构做更多的探索和应用,敬请期待。

欢迎大家了解或咨询更多有关数据湖产品的信息 想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szcsdn

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.5 Nacos与Eureka的区别有哪些?【接口方式、实例类型、健康检测】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务面试篇 文章目录微服务框架微服务面试篇54 微服务篇54.5 Nacos与Eureka的区别有哪些?【接口方式、实例类型、健康检测】54…

【大数据入门核心技术-Kafka】(七)Kafka扩容broker和数据迁移

目录 一、准备工作 1、安装好Zookeeper集群 2、安装好Kafka集群 二、Kafka扩容broker 三、Kafka数据迁移 1、查看主题列表 2、创建Topic 3、查看Topic详细信息 4、生成需要迁移的json 5、生成迁移计划 6、执行迁移计划 7、查看迁移计划 8、确认topic数据分布 一、…

Shiro框架学习笔记、整合Springboot、redis缓存

本笔记基于B站UP主不良人编程 目录 1.权限的管理 1.1什么是权限管理 1.2什么是身份认证 1.3什么是授权 2.什么是Shiro 3.Shiro的核心架构 3.1 S核心内容 4.shiro中的认证4.1认证 4.2shiro中认证的关键对象 4.3认证流程 4.4认证程序开发流程 4.4认证程序源码 4.5自定…

java ssm羽毛球馆管理和交流平台系统

羽毛球作为每个人爱好的一项体育运动,越来也收到人们的好评和关注。很多羽毛球爱好者通过网站的形式对羽毛球场地情况,羽毛球的爱好者的互相学习进行交流,方便了大众对于羽毛球的交流和沟通,提高羽毛球技术的同时,也让…

颠覆传统返利模式,针对用户复购率低的全新解决方案——消费盲返

如今互联网商业模式遍地开花,谈及商业模式,大家第一想到的肯定是积分消费返利,那么“消费返利”对于大家来说都不陌生,那么本期林工想给大家介绍的是一个怎么听怎么亏,实则已经悄悄爆火的模式——消费盲返,…

DNS寻址过程

文章目录什么是DNS寻址过程图显示什么是DNS DNS是域名系统( Domain Name System)的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。 寻址过程 本地…

【Linux】第三部分 Linux文件系统目录结构

【Linux】第三部分 Linux文件系统目录结构 文章目录【Linux】第三部分 Linux文件系统目录结构3. Linux文件系统目录结构总结3. Linux文件系统目录结构 可以右键打开终端 目录意义bin该目录存放的是经常使用到的命令,例如上图所示:cd , ls 等…

《计算机程序构造与解释》读书笔记(3)

文章目录1. 写在最前面2. 设计的取舍3. 赋值和局部状态3.1 局部状态变量3.2 引进赋值带来的利益3.3 引进赋值的代价3.3.1 同一和变化3.3.2 命令式程序设计的缺陷4. 求值的环境模型4.1 求值规则4.2 简单过程的应用4.3 将框架看做局部状态的展台4.4 内部定义5. 用变动数据做模拟5…

Mycat(13):全局表和普通表的配置和测试

1 全局表概述 一个真实的业务系统中,往往存在大量的类似字典表的表格,它们与业务表之间可能有关系,这种关系,可以理解为“标签”,而不应理解为通常的“主从关系”,这些表基本上很少变动,可以根…

Spring Security认证和授权

Spring Security认证和授权 一、Spring Security的认识 Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity来做安全框架。小…

Windows C语言 UDP通信demo

目录编译环境快速入门编译指令服务端code客户端code参考文章以及遇到的问题编译环境 我的demo是通过此文章从C更改成的C,编译环境使用的是Mingw,如下图所示 快速入门 拷贝代码编译互传消息 编译指令 客户端:gcc .\udpclient.c -lwsock3…

《剑指offer》– 链表中倒数第k个节点、反转链表、合并两个排序的链表

一、链表中倒数时第k个节点: 1、题目: 输入一个链表,输出该链表中倒数第k个结点。 2、解题思路:单链表具有单向移动的特性。 (1)第一种:先遍历链表,算出链表节点数count&#xf…

计算机毕设Python+Vue学生用品采购系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

我国风电行业发展现状:并网装机容量持续增长 产业集中化趋势明显

根据观研报告网发布的《2022年中国风电行业分析报告-行业全景评估与投资规划分析》显示,风电是一种清洁、绿色的可再生能源。风力发电是能源领域中技术最成熟、最具规模开发条件和商业化发展前景的发电方式之一。发展风力发电对于解决能源危机、减轻环境污染、调整能…

【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day13

大家好,我是陶然同学,软件工程大三明年实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。 不敢苟同,相信大…

【1760. 袋子里最少数目的球】

来源:力扣(LeetCode) 描述: 给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。 你可以进行如下操作至多 maxOperations 次: 选择任意一个袋子&#…

开发板到货记录一波

今天在终于拿到了期待已久的开发板RK3568,来,亮个相吧!!! 开发板资源还是相当丰富的,对于学习安卓&Linux都是非常友好的,开发板默认安装的是安卓11系统,由于经费问题目前还没有…

小米发明“永动机”:走路即可为智能设备充电

蓝牙耳机、智能智能手表、智能手环、智能眼镜、智能手机……随着科技的进步,越来越多的移动与可穿戴智能设备开始走进我们的生活,智能设备在给人们生活带来便利的同时,也带来了一些困惑,越来越多诸如手环、TWS耳机等智能穿戴设备&…

火热的元宇宙,成为未来趋势

近年来,中国在算力上突飞猛进,有望成为世界顶尖,再加数据和算法上的优势,中国就很有可能在元宇宙方面率先开发出原创性的技术,从而实现从“0”到“1”的突破。 元宇宙办公 在未来的元宇宙畅想中,人们不仅…

java Lambda表达式的标准格式及其前提带有(代码演示)

观看本文 首先 你要对Lambda的概念有个基本了解 对此 您可以先查看我的文章 java Lambda概念 通过实现线程简单体验一下Lambda表达式 跟着上一篇文章做 你的代码会是这样 new Thread( () ->{System.out.println("执行线程"); } ).start();而其中Lambda 表达式 则…