随着每天万亿级别的业务数据流向数据湖,数据湖的弊端也逐渐凸显出来,例如:
在旧架构中,数据湖组件选择的是Hudi,查询层使用Hive on Spark进行查询,所有业务方的查询上层封装了Metabase,在Metabase平台上编写Hive SQL,即可通过Spark引擎执行计算,获取数据湖中的计算结果。
这个架构的缺点很明显:
白山云大数据团队在寻找新的架构方案时,主要关注以下几个方面:
基于以上需求,大数据团队选择了多个数据湖相关的查询组件,对性能、资源、稳定性等方面进行测试比对,最终选择了StarRocks作为数据湖的查询引擎。
在确定了技术选型后,接下来就要考虑如何平滑地将架构落地:
StarRocks 数据湖专用集群建设
白山云大数据团队有多个数据湖Hudi集群,并且数据湖Hudi组件使用HDFS作为底层存储。StarRocks 如果要连接数据湖,则需要将core-site.xml等配置文件放到conf目录,并且对文件名有强依赖,因此不能做到一个StarRocks集群连接多个HDFS集群。
所以在StarRocks建设时,大数据团队针对每一个Hudi集群都建设了一个单独的StarRocks集群作为查询引擎。在节点选择上,由于Hudi专用的StarRocks集群不存储数据,因此不挂载硬盘。为了提高资源利用率,并减少一些数据传输时网络IO的消耗,大数据团队选择了和HDFS的Data Node节点混合部署。
新旧架构并行运行
在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中 | 支持存算分离动态扩缩容 |
滚动裁撤旧架构资源
在新旧架构长达数周的并行运行后,新架构的性能、稳定性、资源消耗等方面优势已经体现出来了,此时开始滚动裁撤旧架构的资源,让业务方只能使用StarRocks这一种查询引擎查询Hudi集群。
新数据入湖
在StarRocks作为数据湖的查询引擎得到大范围推广后,下一步的操作就是进一步将湖仓一体的架构体现,将其他StarRocks集群中对延迟要求低或者数据体量大的表写入数据湖。
对于业务方,通过StarRocks进行数据查询的整个流程无需改变,依旧使用MySQL协议查询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的极速查询能力赋能到更多数据库中。