写点什么

白山云基于 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:4310593

评论

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

生于云,长于云,华为云推动开发者数字化创新

科技热闻

如何开发一个标准的云原生应用?

阿里巴巴云原生

阿里云 微服务 云原生

华为首发微存储新品,破解互联网海量数据高效存储难题

科技热闻

Nacos 多语言体系再添新员:首个 Rust 语言版本正式发布!

阿里巴巴云原生

阿里云 云原生 nacos

Wallys//Qualcomm ipq4018/IPQ4028 Access Point /high power/Wireless Dual band 11AC Wave2 /Indoor industrial wifi5 router

wallysmeng

IPQ4018 IPQ4028

英特尔CEO出席2022世界互联网大会:五大超级技术力量释放数字时代全新可能

科技之家

一个 fault injection 测试的三次演化

QE_LAB

硬件 测试环境

14位资深大咖,11 场技术演讲!龙蜥云原生专场精彩回顾来了

OpenAnolis小助手

开源 技术分享 龙蜥社区 2022云栖大会 云原生专场

用户+案例+认证+框架一键搞定,不愧是阿里最新Spring Security全栈笔记!

Java永远的神

Java 程序员 springsecurity java面试 安全框架

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

啃透这份“高并发编程核心笔记”,跳槽阿里直接涨10K

小小怪下士

Java 编程 程序员 高并发 阿里

相约2023,高通公司宣布参加第六届进博会

科技热闻

一站式工业边缘数据采集处理与设备反控实践

EMQ映云科技

物联网 IoT neuron 11月月更 eKuiper

浅谈Kotlin编程01.初识Kotlin和入门示例

南巷羽

android kotin 11月月更

网站收录量与索引量有什么区别?

源字节1号

软件开发 小程序开发

【LeetCode】最长同值路径Java题解

Albert

算法 LeetCode 11月月更

中软国际发力智联网自主创新 数智赋能千行百业

中软国际AIoT开发者社区

华为开发者大会2022 智联网

Linux—nmap、nc命令 –网络探测工具和安全和端口扫描器

A-刘晨阳

Linux 运维 网络 11月月更

BI智慧工程行业应用方案丨文末获取三重资源包

葡萄城技术团队

【C语言】double 关键字

謓泽

11月月更

深入理解Metrics(三):Histograms

冰心的小屋

Java metrics Histograms

深入理解Metrics(四):Meters

冰心的小屋

Java metrics meters

slurm集群调度策略详解(1)-主调度

慕冰

Slurm 调度系统 主调度

直播预告|AutoML Meetup V1 第四范式 & 百度 & AWS ,共探自动机器学习最佳实践

星策开源社区

人工智能 机器学习 百度 AWS 自动机器学习

Linux下安装Python3.6.8(超级详细)

A-刘晨阳

Linux 运维 Python3 11月月更 pip3

Linux—watch命令详解– 周期性执行命令

A-刘晨阳

Linux 运维 11月月更 周期性监控

【解决方案】国产逆袭?基于国产 MCU 的网红筋膜枪方案分析

元器件秋姐

国产芯片 BLDC方案 BLDC应用 电机控制 元器件电商

断连?消息丟失?不用愁!教你快速在物联网平台上排查问题——设备管理运维类

阿里云AIoT

阿里云 物联网平台 设备上云

前端leetcde算法面试套路之二叉树

js2030code

JavaScript LeetCode

python的基本操作

乔乔

11月月更

完美避开,99%的PCB工程师都踩过的坑!

华秋PCB

工具 PCB PCB设计

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