打造高效实时数仓,从Hive到OceanBase的经验分享

本文作者:Coolmoon1202,大数据高级工程师,专注于高性能软件架构设计

我们的业务主要围绕出行领域,鉴于初期采用的数据仓库方案面临高延迟、低效率等挑战,我们踏上了探索新数仓解决方案的征途。本文分享了我们在方案筛选与实施过程中的经验总结,期望能为您提供有价值的参考与启示。

旧方案:(Hive + Spark)的三个挑战

线上业务环境主要以数据统计与查询分析为主,数据来源主要有两部分:一部分是通过前端应用采集,采集到的实时流数据先存储在消息队列中,使用Spark Streaming任务每10分钟定期同步Kafka数据到Hive数据仓库。这部分数据规模较大,最大的表数据量在百亿级。

另一部分是通过政务数据共享交换平台获取,汇聚后存储在前置库RDS中,通过Spark任务定期全量同步到Hive数据仓库。这部分数据规模较小,最大的表数据量在千万级。当各种源端数据汇总在 Hive 环境之后,使用 Spark 读取数据并在大数据集群进行分析计算。

使用这样的业务方案(Spark + Hive方案)存在三个挑战。

1.实时业务的挑战:数据定时导入Hive数据仓库,无法做到实时更新,数据时延10分钟以上; 

2.复杂度的挑战:数据定期从RDS全量导入Hive时,导入速度较慢,导入一次千万的表需要3分钟上;

3.成本效率的挑战:使用Spark读取Hive进行数据分析统计时,一次上亿数据的统计需要3分钟以上;使用Spark进行数据定期导入与分析统计,消耗大数据集群CPU,内存资源较高,同一时间任务太多时需要排队执行。

为解决上述挑战,我们尝试用轻量级的实时数仓解决方案。由于此前对国产原生分布式数据库 OceanBase 有所耳闻,该数据库具备HTAP特性且满足实时数仓所要求的海量数据实时写入、实时更新、实时分析的特性。当我们得知其在2021年6月已经正式开源,就决定对 OceanBase 社区版3.1.1版本进行性能测试,测试详情见《OceanBase 社区版V3.1.1压力测试情况》(仅供参考)。

测试的结论是:在当前测试环境下,按照TPC-C标准进行测试,最高可达355,739 TpmC,最快可以在24.05秒完成整个TPC-H的测试SQL执行,说明OceanBase开源版V3.1.1在OLTP与OLAP场景下都有不俗的表现,并可通过横向扩展满足大部分海量数据高并发业务场景的性能需求。

除 OceanBase 数据看库外,我们也对TiDB、PloarDB-X进行了性能测试与综合评估,OceanBase 社区版在TPC-H性能测试下和内部真实业务压力下的表现最佳。经过内部评估,OceanBase 满足目前业务需求且 OceanBase 开源社区提供了良好的技术服务与支持,最终决定尝试使用 OceanBase 社区版作为实时数仓业务的解决方案。

新方案:(OceanBase+Flink)的部署与成效

经过一段时间的方案选型与测试评估后,我们最终决定使用 OceanBase 社区版3.1.3版本替换原来的Hive数据仓库,OceanBase 集群架构选择3-3-3。

  • 硬件配置:ECS 9 台,32核128G内存,每台ECS挂载两块硬盘,一块500G SSD硬盘,用于保存数据库redo日志,另一块4T SSD硬盘,用于保存数据库数据。
  • 资源分配:OBServer的memory_limit为102G,system_memory为30G,OBProxy内存为4G。OceanBase 集群部署成功后,修改sys租户资源为4核4G,新建业务租户分配资源26核64G,primary_zone设置为RANDOM,让业务租户表分区的Leader随机分配到这9台ECS中。

最初计划使用OCP部署 OceanBase 集群,但由于安装OCP需要依赖 OceanBase数据库,所以最终决定使用OBD进行部署,不过后期可以通过 OCP 来接管 OBD 部署的集群,这个过程也很方便。下图为 OceanBase 集群部署拓扑图。

使用新方案(OceanBase+Flink方案)后,成效显著,主要表现为以下三个方面。

第一,端到端数据链路时延从分钟级缩短到 3秒内。数据同步从Hive+Spark模式迁移到 OceanBase+Flink模式后,数据查询与分析业务也从Hive+Spark模式迁移到 OceanBase SQL模式。业务迁移后,数据从前端应用产生到从OceanBase查询出来,端到端链路时延降低到3秒以内,而之前由于数据是从Kafka定期同步到Hive,再用Spark从Hive查询出来,至少需要10分钟的时间。

第二,硬件成本收益明显。RDS数据同步由Spark定期全量同步到Hive改成了使用Flink CDC实时增量同步到 OceanBase 后,增量模式的流任务对资源占用由抖动变得平滑,通过Flink session模式,减少了增量数据同步流任务资源空占,从而大幅度降低了大数据集群的资源占用,所需大数据集群资源从140核280G降低到23核46G,硬件成本下降84%。

第三,SQL 查询时间从分钟级到秒级。将Spark+Hive查询统计任务改成OceanBase 的SQL语句后,开启SQL分布式执行的并行Hint,6000万左右的数据查询统计(select /*+ parallel(36) */ count(1) from health_query_log where datetime >='2022-05-01 00:00:00' and datetime<='2022-06-01 00:00:00'; )在15秒内完成,而之前需要3分钟,因此统计SQL执行时间从3分钟降低至 15秒。

选择 OceanBase 的实践总结

在我们将OceanBase社区版作为实时数仓的使用过程中,总结了OceanBase社区版在该业务下的一些使用实践,供大家参考。

1. 表的创建删除索引速度较快,这样可以根据业务需求按需进行索引创建,从而大幅提高数据检索效率。

2.支持丰富的窗口函数,可以满足较为复杂的查询与统计需求。

3.支持JSON数据类型,可以直接从JSON数据中提取所需数据并创建虚拟列,从而当上游数据结构发生变化后也不需要重跑历史数据,非常好用。

4.在多表 join 情况下,尤其是使用 TableGroup功能后查询速度更快,强烈推荐。

5.OceanBase 社区版兼容 MySQL 5.7 的绝大部分功能和语法,极大地降低了开发人员的学习成本,在RDS数据同步过程中基本上没有遇到兼容性问题,迁移过程顺利。

此外,在实际使用中发现一些当前 OceanBase 社区版不支持或有计划支持的功能,目前已提交社区进行下一步迭代:

1. 暂不支持全文索引,当遇到需要对中文字符串进行模糊查询时,需要对全表进行扫描。比如,需要用家庭住址的部分信息进行模糊查询时,可使用 MySQL 的 FullText索引,然而迁移到 OceanBase 后,则无法利用全文索引来提高查询性能,当前使用 like 模糊匹配临时绕过。经过和社区官方技术团队沟通,OceanBase 计划在后续版本中进行支持。

2. 暂不支持物化视图,对于一些大表(亿级别以上)无法进行数据实时增量统计。比如对大表进行 count + group by操作时,因每次都要进行全量数据的计算,不能利用物化视图的预计算特性来降低每次查询时的数据计算量,导致部分场景计算速度达不到预期的效果。因此,当对海量数据统计实时性要求很高时,不得不寻求其他解决方案。

3. 可能导致该语句执行时,OceanBase 节点内存OOM而引起节点宕机的风险,可以通过改写子查询select count(*) from (select distinct ...)来规避此问题。

最后,感谢 OceanBase 社区技术人员对本次项目的技术支持。在我们进行OceanBase 社区版的部署、测试、迁移、使用及运维的各个阶段中,对我们提出有关 OceanBase 的各方面问题都进行了耐心与及时的解答,针对系统执行较慢的SQL统计语句也给出了优化建议,从而保证了业务实时数仓改造的顺利进行。预祝 OceanBase 社区发展越来越红火。

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

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

相关文章

基本mysql

基础sql语句 关于数据库 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] database_name [CHARACTER SET charset_name] [COLLATE collation_name]; [ ] 代表可选 database_name 是你想要创建的数据库的名称。CHARACTER SET 可选&#xff…

一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention

一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention 目录 一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-BiTCN-BiGRU-Attention霜冰算法…

nlohmann::json中有中文时调用dump转string抛出异常的问题

问题描述 Winodows下C开发想使用一个json库&#xff0c;使用的nlohmann::json&#xff0c;但是遇到json中使用中文时&#xff0c;转成string&#xff0c;会抛出异常。 nlohmann::json contentJson;contentJson["chinese"] "哈哈哈";std::string test con…

K-means 算法的介绍与应用

目录 引言 K-means 算法的基本原理 表格总结&#xff1a;K-means 算法的主要步骤 K-means 算法的 MATLAB 实现 优化方法与改进 K-means 算法的应用领域 表格总结&#xff1a;K-means 算法的主要应用领域 结论 引言 K-means 算法是一种经典的基于距离的聚类算法&#xff…

气膜馆电费高吗?—轻空间

很多人关心气膜馆的电费问题&#xff0c;实际上&#xff0c;气膜馆不仅电费不高&#xff0c;还具有显著的节能优势。气膜建筑在设计上充分考虑了能耗管理&#xff0c;具备以下几大特点&#xff1a; 1. 高效保温隔热&#xff0c;减少能耗 气膜馆采用特殊材料和结构设计&#xf…

力扣100题——贪心算法

概述 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在解决问题时&#xff0c;按照某种标准在每一步都选择当前最优解&#xff08;局部最优解&#xff09;的算法。它期望通过一系列局部最优解的选择&#xff0c;最终能够得到全局最优解。 贪心算法的核心思想 贪心算…

【Colab代码调试】End-to-end reproducible AI pipelines in radiology using the cloud

文章目录 报错MessageError: Error: credential propagation was unsuccessful解决办法原理 找不到GPU解决办法 关于文件结构RTSTRUCT是什么nrrd是什么格式 !gcloud config set project $GCP_PROJECT_ID报错Access Denied: User does not have bigquery.jobs.create permission…

C# 比较对象新思路,利用反射技术打造更灵活的比较工具

前言 嘿&#xff0c;大家好&#xff01;如果你之前看过我分享的文章《C# 7个方法比较两个对象是否相等》&#xff0c;你可能会意识到对象比较在实际业务中经常出现的场景。今天&#xff0c;我想继续与大家分享一个在实际项目中遇到的问题。 有一次&#xff0c;我接手了一个别…

个人健康信息系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;健康分析师管理&#xff0c;健康手册管理&#xff0c;健康饮食管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;健康手册&#xff0c;健康饮食&…

从Apple Intelligence到IoT Intelligence,端侧生成式AI时代加速到来

9月10日凌晨1点&#xff0c;苹果新品发布会如期举行&#xff0c;全新iPhone16系列成为苹果生态中真正意义上的第一款原生AI手机&#xff0c;在第二代3nm工艺A18和A18 Pro芯片的加持下&#xff0c;iPhone16系列能够容纳并快速运行以Apple Intelligence为中心的生成式AI功能在手机…

Python 基本库用法:数学建模

文章目录 前言数据预处理——sklearn.preprocessing数据标准化数据归一化另一种数据预处理数据二值化异常值处理 numpy 相关用法跳过 nan 值的方法——nansum和nanmean展开多维数组&#xff08;变成类似list列表的形状&#xff09;重复一个数组——np.tile 分组聚集——pandas.…

从“游戏科学”到玄机科技:《黑神话:悟空》的视角打开动漫宇宙

近日&#xff0c;中国游戏界迎来了一场前所未有的盛事——由游戏科学公司开发的《黑神话&#xff1a;悟空》正式上线&#xff0c;并迅速成为全球玩家热议的焦点。在居高不下的讨论热度中&#xff0c;有人说他的成功在于对《西游记》为背景进行改编&#xff0c;对原著进行了分析…

数据分析与挖掘课程相关资源

这是在gitee上整的关于这门课的一个开源项目。 https://gitee.com/rainpet/python-data-analysis-and-mining-demo 头歌平台。 常见问题&#xff1a; 1、如何确认conda的版本&#xff0c;执行如下命令&#xff1a; conda list anaconda$2、实验室登陆后&#xff0c;无法上网&a…

基于Java+SpringBoot+Vue+MySQL的智能菜谱推荐管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的智能菜谱推荐管理系统【附源码文档】、…

“汉语新解” Prompt新高度,火爆的李继刚

“汉语新解” prompt 是由李继刚设计的一个用于启发人工智能模型进行创意性文本生成的指令模板。这个 prompt 的设计初衷是为了让AI能够以一种独特的方式解析和重新诠释常见的中文词汇&#xff0c;从而产生出具有深刻洞察力和幽默感的文本内容&#xff0c;仿佛是由鲁迅或林语堂…

装杯 之 Linux 指令1

hello&#xff0c;欢迎来到linux世界&#xff0c;在害没有学习linux时&#xff0c;看到别人操作&#xff0c;网课&#xff0c;真高级&#xff0c;感觉好厉害&#xff0c;就是说白了&#xff0c;看起来牛逼。ok&#xff0c;接下来&#xff0c;请大佬们进入linux之旅。 1.ls指令…

mfc140u.dll错误是什么情况?如何将mfc140u.dll丢失的解决方法详细分析

mfc140u.dll是 Microsoft Foundation Class (MFC) 库的一部分&#xff0c;通常与 Visual Studio 2015 及其后续版本相关联。如果系统中缺少 mfc140u.dll&#xff0c;可能会导致依赖该库的应用程序无法启动&#xff0c;并显示错误消息&#xff0c;如“程序无法启动&#xff0c;因…

分类预测|基于麻雀优化支持向量机的Adaboost集成的数据分类预测Matlab程序SSA-SVM-Adaboost

分类预测|基于麻雀优化支持向量机的Adaboost集成的数据分类预测Matlab程序SSA-SVM-Adaboost 文章目录 一、基本原理SSA-SVM-Adaboost 分类预测原理和流程总结 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 SSA-SVM-Adaboost 分类预测原理和流程 1. 麻雀优化算…

开源FormCreate低代码表单组件的配置项和事件的详解

在使用开源FormCreate低代码表单时&#xff0c;您可以通过各种 props 来定制表单的行为和外观。这些参数允许您控制表单的生成规则、配置选项、双向数据绑定等&#xff0c;为复杂的表单场景提供了强大的支持。 源码地址: Github | Gitee FormCreate组件Props 以下是常用的 pr…

由于安装nvm 引发的vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

&#x1f388;亲爱的读者朋友们&#xff1a; 如果你觉得这篇文章对你有所帮助&#xff0c;恳请你为我点个赞&#x1f44d;。你的每一个赞都是对我辛勤创作的认可&#xff0c;是我继续前行的动力源泉。 同时&#xff0c;也欢迎你关注我的 CSDN 博客。在这里&#xff0c;我会持续…