写点什么

白山云基于 StarRocks 数据库构建湖仓一体数仓实践

  • 2024-01-05
    北京
  • 本文字数:2784 字

    阅读完需:约 9 分钟

大小:1.40M时长:08:07
白山云基于StarRocks数据库构建湖仓一体数仓实践

随着每天万亿级别的业务数据流向数据湖,数据湖的弊端也逐渐凸显出来,例如:

 

  • 数据入湖时效性差:数据湖主要依赖于离线批量计算,通常不支持实时数据更新,因此无法保证数据的强一致性,造成数据不及时、不准确;

  • 查询性能差:在传统架构下,数据湖的查询速度较差,小时粒度的数据查询往往需要数分钟才能得到响应,在多个业务方同时执行数据湖查询任务时,查询响应慢的劣势更加明显;

  • 查询体验差:数据存储在多个地方,在进行联邦分析时需要将数据从数据湖中搬迁到数据仓库平台,这会增加分析链路的长度,同时导致数据的冗余存储。在进行常规查询时,需要熟练查询多种数据库,学习成本极高;

  • 场景融合不足:数据湖单一组件,无法满足目前的海量数据处理诉求,例如在批处理和流处理等场景下的融合能力有限。

技术选型思考

 

在旧架构中,数据湖组件选择的是 Hudi,查询层使用 Hive on Spark 进行查询,所有业务方的查询上层封装了 Metabase,在 Metabase 平台上编写 Hive SQL,即可通过 Spark 引擎执行计算,获取数据湖中的计算结果。

 

这个架构的缺点很明显:

 

  • 数据湖和数据仓库是分开的两个东西,没有办法关联查询;

  • 业务方需要同时掌握 SparkSQL 和 MySQL 两种能力,学习成本高;

  • SparkSQL 查询效率慢,稳定性差,资源占用高;

  • Spark 引擎在跑 Hive SQL 时,会偶发触发 BUG 导致查询失败,需要手工重试才能得到结果,用户体验较差。

 

白山云大数据团队在寻找新的架构方案时,主要关注以下几个方面:

 

  • 在数据查询方面,查询效率、查询体验要显著高于传统的 Spark 引擎;

  • 在资源利用上,查询数据使用的 CPU 和内存要远低于传统的 Spark 引擎;

  • 可拓展性高,支持动态扩缩容;

  • 在学习成本上,传统的 Hive SQL 相较 MySQL 语句有较高门槛,如果能兼容 MySQL 协议来检索数据湖的查询,可以极大降低数据湖的查询门槛。

 

基于以上需求,大数据团队选择了多个数据湖相关的查询组件,对性能、资源、稳定性等方面进行测试比对,最终选择了 StarRocks 作为数据湖的查询引擎。 

如何实现架构落地

 

在确定了技术选型后,接下来就要考虑如何平滑地将架构落地:

 

  1. StarRocks 数据湖专用集群建设


白山云大数据团队有多个数据湖 Hudi 集群,并且数据湖 Hudi 组件使用 HDFS 作为底层存储。StarRocks 如果要连接数据湖,则需要将 core-site.xml 等配置文件放到 conf 目录,并且对文件名有强依赖,因此不能做到一个 StarRocks 集群连接多个 HDFS 集群。

 

所以在 StarRocks 建设时,大数据团队针对每一个 Hudi 集群都建设了一个单独的 StarRocks 集群作为查询引擎。在节点选择上,由于 Hudi 专用的 StarRocks 集群不存储数据,因此不挂载硬盘。为了提高资源利用率,并减少一些数据传输时网络 IO 的消耗,大数据团队选择了和 HDFS 的 Data Node 节点混合部署。

 

  1. 新旧架构并行运行

 

在 StarRocks 集群建设完成后,大数据团队基于以下考虑,选择了新旧架构并行运行的方案,来保障整个架构的平缓更替:

 

  • 由于新旧架构并行,可以使用相同的查询语句分别在新旧架构中运行,从而精准得到新旧架构的性能和资源消耗对比;

  • 有了充足的时间推广新架构,在内部开展新架构的使用培训,并在运行过程中让业务方充分感受到新架构的高性能优势,自主切换到新架构中;

  • 并行运行期间,如果新架构发生了预期之外的问题导致故障,可以快速回退到旧架构中,保证了线上服务不受影响。

 

此时的架构如下:

 

 

在运行过程中,新架构的优点也集中展露:

 

  • 用户无需再学习 SparkSQL 的语法,只需掌握 MySQL 协议即可访问两种数据源;

  • 数据湖和数据仓库的连接更加紧密,通过 StarRocks 湖上物化视图的功能,数据湖的数据可以将聚合结果存入 StarRocks 进行物化加速;

  • 提供了联邦分析能力,由于数据湖和数据仓库都是使用 StarRocks 进行查询,因此可以实现同一条语句将两种数据源的数据混合计算的联邦查询;

  • StarRocks 在查询 Hudi 时不论是性能、稳定性还是资源占用方面都有很大的优化;

  • 一些 StarRocks 数据仓库写入、查询压力较大的表,可以挪到数据湖中存储,然后继续通过 StarRocks 对外提供查询,实现业务方无感知的平滑迁移。

 

我们使用相同的查询语句在不同架构中多次执行,性能对比结果十分明显:在环境内存资源占用上 SparkSQL 是 StarRocks2.8 倍,在环境 CPU 利用上 SparkSQL 是 StarRocks3.78 倍;对于 SQL 内存消耗、SQL CPU 消耗时间上 SparkSQL 也要比 StarRocks 高出许多;对于 SQL 首次执行时间,StarRocks 要比 SparkSQL 快近 3 倍,SQL 再次执行时间 StarRocks 的速度也要比 SparkSQL 快近 6-8 倍。

 

引擎

环境内存

环境CPU

SQL首次执行时间

SQL再次执行时间

SQL内存消耗*时间

SQL CPU消耗*时间

并发问题

稳定性问题

物化视图

存算分离

SparkSQL

720G

242c

90s

42s-77s

32400G*s

10890core*s

单个SQL会拿走所有资源计算,后续SQL排队

如果SQL故障,会将Yarn任务打挂

StarRocks

256G

64c

31s

7s-10s

1742M*s

0.139core*s

支持多个SQL同时运行,无需排队

耽搁故障SQL不会影响服务

支持湖上物化视图,聚合结果自动落到高性能的StarRocks中

支持存算分离动态扩缩容

 

  1. 滚动裁撤旧架构资源

 

在新旧架构长达数周的并行运行后,新架构的性能、稳定性、资源消耗等方面优势已经体现出来了,此时开始滚动裁撤旧架构的资源,让业务方只能使用 StarRocks 这一种查询引擎查询 Hudi 集群。

 

  1. 新数据入湖

 

在 StarRocks 作为数据湖的查询引擎得到大范围推广后,下一步的操作就是进一步将湖仓一体的架构体现,将其他 StarRocks 集群中对延迟要求低或者数据体量大的表写入数据湖。

 

对于业务方,通过 StarRocks 进行数据查询的整个流程无需改变,依旧使用 MySQL 协议查询 StarRocks 数据库。

 

带来的价值

 

  • 资源节约:我们有多个机房和多套 Hudi 集群,在全面使用 StarRocks 替代 SparkSQL 查询 Hudi 集群后,资源消耗节省 70%;

  • 查询性能提升:在无并发场景下,查询效率提升 3-8 倍;在并发执行场景下,查询效率提升 10 倍以上;

  • 学习成本降低:旧架构查询数据湖需要掌握 HiveSQL 语法,新架构只需了解 MySQL 语法;

  • 湖仓一体的深入融合:在旧架构中一些无法满足的业务需求可以得到满足,例如量级无法承接的数据可以转存到数据湖中,通过 StarRocks 集群进行查询;

  • 联邦分析:通过 StarRocks 统一数据查询引擎,可以实现跨数据源的联邦分析场景,例如一半在 Hudi 一半在 StarRocks 中聚合到一起进行联邦分析。

 

未来探索方向

 

在湖仓一体方案稳定运行后,大数据团队将针对 StarRocks 数据库进行以下探索:

 

  • 统一 StarRocks 集群:前面提到了目前受限于配置文件问题,一个 StarRocks 集群只能连接一个 Hudi 集群。和 StarRocks 社区沟通后了解到,未来 StarRocks 中 Catalog 的配置不再局限于物理机的配置文件,而是在 Catalog 的创建语句中动态传入,一旦这个方案上线,就可以实现一个 StarRocks 集群连接多个 HDFS/Hudi 集群,甚至可以实现跨 Hudi 集群的联邦查询。

 

  • 存算分离探索:StarRocks 3.0 正式发布了存算分离 CN(Compute Node)节点,未来我们在湖仓一体的 StarRocks 集群中计划正式引入 CN 节点,在执行大查询时,快速扩容多个 CN 节点加速查询,在没有查询时将 CN 节点释放,减少资源占用。

 

  • 湖上物化视图探索:StarRocks 支持湖上物化视图功能,针对数据湖的数据可以做到原始数据存储在数据湖中,同时聚合结果存储在 StarRocks 中。当查询条件满足物化结果,可以直接将查询改写到物化视图中,实现极速查询。

 

  • 更多数据源探索:StarRocks 的 Catalog 模块除了 Hudi 等数据湖组件外,在 3.1 版本正式接入了 ES 数据库。白山云大数据团队计划构建 ES 专用的 StarRocks 集群,来将 StarRocks 的极速查询能力赋能到更多数据库中。

 

2024-01-05 14:4310579

评论

发布
暂无评论
发现更多内容

视频创作者必备应用!三步帮你解决前置内容条件,打造专属大片!

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 AI应用 飞桨星河社区

【FAQ】HarmonyOS SDK 闭源开放能力 —Asset Store Kit

HarmonyOS SDK

HarmonyOS

IT外包服务:企业数据资产化加速利器

Ogcloud

IT外包 IT外包公司 IT外包服务 IT外包企业

什么是智慧厕所?如何打造智慧厕所?

光明源智慧厕所

智慧厕所 智慧公厕

NineData云原生智能数据管理平台新功能发布|2024年3月版

NineData

NineData 研发流程 数据库DevOps 企业级数据库 敏感数据管理

Penpad Season 2 质押突破350ETH,参与可获Scroll生态空投

西柚子

面试官:Session和JWT有什么区别?

王磊

Java 面试题

度安讲 | 首期「数据安全与隐私保护合规」技术沙龙顺利召开

百度安全

我后悔了,智慧公厕来了

光明源智慧厕所

智慧厕所 智慧公厕

行云绽放签约湾区协同创新计划,共创数字新篇章

行云管家

云计算 数字化 湾区

探寻开发好的体育赛事直播系统源码:谁会成为购买者?

软件开发-梦幻运营部

深入探索:主流低代码开发平台的应用场景及开发流程

优秀

低代码开发平台 低代码平台 低代码平台应用场景

OpenMLDB vs Redis 内存占用量测试报告

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

【论文速读】| MASTERKEY:大语言模型聊天机器人的自动化越狱

云起无垠

2024-04-03:用go语言,在一个小城市里,有 m 个房子排成一排, 你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n ), 有的房子去年夏天已经涂过颜色了,所以这些房子不可以被重新

福大大架构师每日一题

福大大架构师每日一题

一定要避坑:关于微信H5分享,温馨提示你不要再踩坑了!!!

Immerse

Vue 分享 H5

Linux中的conntrack命令深入解析

GousterCloud

Linux 运维

Flink 流批一体在模型特征场景的使用

Apache Flink

大数据 flink 流批一体

🔥🔥🔥最好用的SDK版本管理器(version-manager)

Geek_5bcc45

Java Go node.js Py Version

让 AI 帮你写代码,开发提效神器来了

阿里云云效

阿里云 AI 云原生

4款免费可用的数据集成平台亮点

RestCloud

ETL 数据集成平台

新兴势力展露头角? ERC-1111 协议能否开启下一个热潮

NFT Research

NFT NFT\

美股上市辅导合伙人苏凌丘调研万达影业 欲打造VR眼镜沉浸式影院平台

科技热闻

适合新锐机构的教务管理系统——“校猩猩”正式上线

科技热闻

ChatGPT全方位解析:如何培养 AI 智能对话技能?

测试人

软件测试

嘉为蓝鲸DevOps研发效能管理平台V6.0重磅发布!

嘉为蓝鲸

DevOps 研发管理 研发效能 价值流

你真的会写侧边栏收起动画吗?

前夕

CSS css3 前端

当设计遇见技术—低代码开发平台设计探索

inBuilder低代码平台

设计 交互式设计

IT外包行业未来发展趋势

Ogcloud

IT外包 IT外包公司 IT外包服务 IT外包企业 IT驻场外包

Postman 请求参数传递技巧:详解 Query、Path 和 Body 的用法

Liam

Java 后端 Postman 开发工具 API

白山云基于StarRocks数据库构建湖仓一体数仓实践_大数据_白山云科技-大数据团队_InfoQ精选文章