又稳又快!基于ByteHouse ELT构建高性能离/在线一体化数仓

news/2024/11/18 11:45:27/文章来源:https://www.cnblogs.com/bytedata/p/18552242
近期,ByteHouse与某数字娱乐公司达成合作,双方聚焦高性能离/在线一体化数仓展开合作。随着自身领域迅速发展的同时,该数字娱乐公司需要更稳定、易用的数据基础服务,但该方面遇到多种挑战,如数据融合与整合、实时数据分析、可扩展性和灵活性、多源数据入仓以及复杂的离线加工任务等。
 
作为一款云原生数据仓库,ByteHouse基于ClickHouse技术路线进行优化和升级,不仅拥有极致的分析性能、良好的扩展能力,而且有丰富的能力支撑ELT作业,支持fault tolerance、任务拆分等。
 
2023年该数字娱乐公司就引入 ByteHouse 构建实时数仓服务,2024年又将离线数仓迁移至 ByteHouse 上,至此完成了统一的离线/实时一体化数仓建设。通过数仓一体化升级,大幅提高数据分析的实时性(天级->分钟级),保证了大数据量级下数据处理的稳定性。
 

背景和挑战

数据流向图
 
如上图所示,在一体化数仓改造前,该数字娱乐公司 的业务数据库在 Oracle 和 TiDB 上,使用 Flink 通过 CDC 方案将数据同步到数据仓库。导入后会经过一系列的离线加工任务,生成供业务读取的表,最终以报表、看板等形式展示到前端。
 
原架构中离线加工任务是由 Hive 和 Spark SQL 完成的,只有最终加工得到的数据才会存储在 ByteHouse 中,由 ByteHouse 提供实时查询能力。该方案有以下弊端:
  1. 架构复杂。用户需要维护多套引擎,无论是底层架构、运维方式、SQL语法还是参数调优,多套引擎都截然不同。这造成了额外的维护成本。
  2. 数据冗余。从 Hive/Spark SQL 到 ByteHouse 的数据同步链路需要额外开发,且数据是冗余存储了多份。无论从计算,还是存储方面,都造成了浪费。
  3. 效率瓶颈。当前资源下,该架构已经达到了每日多源数据融合的瓶颈,很难超过日增10亿这个量级。制约了公司业务的发展。
在这种情况下,客户选择使用 ByteHouse 构建一体化数仓,无论是 Adhoc 的报表查询、还是复杂的离线加工任务,都在一个系统中完成,减少运维、计算、存储方面的成本。
 

技术挑战

该数字娱乐公司 的离线加工场景对 ByteHouse 的能力提出了更高的要求,具体表现在:
  • 数据量大。数据增量每天10亿级别,最大的表10TiB+,数据量1000亿+。
  • 加工链路长。一共200+表,多层加工,任务依赖比较复杂,重试成本高。日常加工任务4-5千个,高峰时每天超过1万。
  • 查询复杂。查询通常涉及大数据量 aggregate、多表 join,容易挤压资源,造成 OOM、超时等报错。
 

解决方案和收益

提升任务并行度,保障业务平稳运行

传统架构中,之所以要分别建设离线数仓和实时数仓,是因为常见的 OLAP 产品不擅长处理大量的复杂查询,很容易把内容打满任务中断,甚至造成宕机。
ByteHouse 具备 BSP 模式,支持将查询切分为不同的 stage,每个 stage 独立运行。在此基础上,stage 内的数据也可以进行切分,并行化不再受节点数量限制,理论上可以无限扩展,从而大幅度降低峰值内存。
 
在实际应用中,通过对关键的大表增加并行度,该数字娱乐公司 的离线任务整体内存峰值降低了40%左右。有效减少了内存溢出的概率,保障任务平稳运行。

 

任务级重试,减少重试成本

离线加工任务的另外一个特点就是链路比较长,并且任务间有依赖关系。如下图所示:
 
如上图所示,task4 依赖 task1、task2 的完成。如果 task1 失败发起重试,会显示为整个链路执行失败。
 
ByteHouse 增加了任务级重试能力,在 ByteHouse 中只有运行失败的 task 需要重试。以10月15日到10月17日为例:
 
总数及发生重试的任务数以***脱敏展示
 
可以看到,任务的成功率在这三天内分别提高了6.6%、4.4%和2.9%,整体成功率为100%。除提高任务执行的成功率外,还能显著减少重试时间,体现为降低整体的离线任务执行时间。
 

大批量并行写入,稳且快

该数字娱乐公司 的业务数据存在频繁更新的特点,使用重叠窗口进行批量 ETL 操作时,会带来大量的数据更新。在这种场景下,ByteHouse 做了大量的优化。
写入优化示意图
 
经过持续优化,将最耗时的数据写入部分单独并行化,并且在写入 part 文件时标记是否需要进行后续的 dedup 作业。在所有数据写入完毕后,由 server 指定一个 worker 进行 dedup 和最后的事务提交(如上图最右)。
 
经过优化,在保持稳定的前提下,用户十亿表的 insert 作业运行时间从48分钟降低到13分钟,提速73%。其他相对较小的表插入效率也提高了26%-44%左右。
 

简化数据链路,提高健壮性

 

ByteHouse 在传统的 MPP 链路基础上增加了对复杂查询的支持,这使得 join 等操作可以有效地得到执行。在数据交换方面,要求所有 stage 之间的依赖必须在查询执行之前以网络连接的形式体现。离线加工场景下,这种方式有着天然的劣势:
 
  • stage 较多、并行度较大时,每一个 task 出现的抖动都会影响整体链路,叠加的抖动增加任务失败的概率;
  • task 同时拉起会进一步对资源进行挤占。
 
BSP 模式使用 barrier 将各个 stage 进行隔离,每个 stage 独立运行,stage 之内的 task 也相互独立。即便机器环境发生变化,对查询的影响被限定在 task 级别。且每个 task 运行完毕后会及时释放计算资源,对资源的使用更加充分。
 
在这个基础上,BSP 的这种设计更利于重试的设计。任务失败后,只需要重新拉起时读取它所依赖的任务的 shuffle 数据即可,而无需考虑任务状态。

 

总结

所有以上提到的这些优化,均建立在ByteHouse提供极速分析性能的基础上。在实时数仓的能力上,通过叠加对离线数仓能力的支持,ByteHouse通过将查询切分为独立的阶段、阶段内进行并行度的拓展,对大查询的内存降低、任务的失败降低、写入效率和整体鲁棒性来说,都有明显的效果。这在最终促成了该数字娱乐公司可以使用ByteHouse一个引擎同时完成数据加工和数据分析,减少了组件冗余,节省了人力成本,大大提高了数据实时性、优化了运营效率。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js设置浏览器cookie

https://blog.csdn.net/x550392236/article/details/77651579

猫映射(Arnold变换),猫脸变换介绍与基于例题脚本的爆破

前置信息 http://www.jiamisoft.com/blog/index.php/7249-erzhituxiangjiamisuanfaarnold.html https://mp.weixin.qq.com/s/IbkAlyAPvbgMeNgqfwisTg Arnold变换 Arnold变换是V.J.Arnold在遍历理论的研究中提出的一种变换,原意为catmapping,俗称猫脸变换。Arnold变换直观、简…

伯索云学堂视频课件课程下载工具,如何在电脑端下载伯索云学堂视频课程课件资料PDF,PPT到本地?

一. 安装伯索云课程下载器 1.获取学无止下载器 https://www.xuewuzhi.cn/plaso_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。 注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。 二. 使用说明 1.学无止下载…

一个自托管免费开源的人脸识别系统

大家好,今天给大家分享一个自托管免费开源的人脸识别系统CompreFace。CompreFace 是一个开源的人脸识别系统,由 Exadel 公司开发并维护。它提供了一个基于深度学习的解决方案,用于人脸检测、识别和验证。 CompreFace 的设计旨在简化人脸识别技术的使用,使得开发者无需深入理…

洛谷题单指南-二叉堆与树状数组-P3374 【模板】树状数组 1

原题链接:https://www.luogu.com.cn/problem/P3374 题意解读:树状数组模版:单点修改,区间求值。 解题思路: 树状数组-Binary Index Tree可以动态维护一组数,可以O(logn)的修改一个数,也可以O(logn)的计算一段区间的和。 思考一下朴素做法:如何修改一个数,计算区间和?…

11月16日,工信部人才交流中心 CUUG - PGCP / PGCM认证考试完成!

2024年11月16日,由工业和信息化部人才交流中心 与 北京神脑资讯技术有限公司共同举办的PostgreSQL管理员岗位能力认证考试(PGCP中级/PGCM高级)完成。 中级PG认证专家-PGCP(PostgreSQL Certified Professional):是对PostgreSQL数据库技术能力的一种认可,达到了专家级别,…

manim边做边学--球体

Sphere类用于创建三维球体对象,它提供了丰富的参数和方法来定制球体的外观和行为。 球体在制作三维动画时,具有广泛的应用场景。 比如:展示几何概念:通过创建不同大小、颜色和透明度的球体,可以直观地展示几何中的体积、表面积等概念 物理模拟:在模拟物理现象(如重力、碰…

闵可夫斯基和

闵可夫斯基和 前言 部分图片来自 https://www.luogu.com.cn/article/mhp0aeub。 定义 对于两个向量集合 \(A,B\),它们的闵可夫斯基和为 \(\{ a+b | a \in A, b \in B\}\)。 求解 在 OI 中,我们一般研究凸包的闵可夫斯基和。 如图是两个凸包的闵可夫斯基和。本文来自博客园,作…

UNIAPP设置消息推送(v1.0),自定义铃声功能

目前项目需要开发一个物联网APP进行设备绑定、警情查看、统计分析、设备操作、自定义报警铃声等相关功能 采用的uniapp进行开发,功能其实都很简单就是调用SDK进行设备关联、数据的增删改查,逻辑清晰明了,没想到问题出在了消息推送这块, 消息推送-因为是uniapp进行开发所以采…

仓储和运输如何协同?项目管理在物流行业的应用

物流运输是现代经济的核心,覆盖了供应链的多个环节,从订单接收到仓储管理,再到运输配送,每一步都关系到效率和成本。然而,物流行业的复杂性也带来了管理难题,例如多部门协作不畅、运输计划不可控、资源分配不合理等。面对这些挑战,项目管理工具正逐步成为提升物流运输效…

6、oracle网络(监听)

oracle包含 1、软件 2、数据库 3、实例 4、监听(listener) 监听的特点 可以独立启动,就是说,数据库没有启动,监听可以启动;数据库启动,监听也可以不启动;数据库启动,监听也启动 监听和数据库是独立分开的数据库的整个网络结构图解: 1、数据库有数据库的名字:dbname;…

inline-block元素下移问题的分析及解决

不知道大家有没有遇到过这种蛋疼的情况,当你排列了三个 display 属性为inline-block的 div 时。我们在其中一个div中输入文字,就会出现如下这种现象,设置文字 div 的布局变化了。问题定位 为什么会出现这种情况呢?我们打开控制台查看一下元素布局,如下图我们能看到第二个 …