B 站基于 StarRocks 构建大数据元仓

作者:bilibili 大数据高级开发工程师 杨洋

B站大数据元仓是一款用来观测大数据引擎运行情况、推动大作业治理的系统诊断产品。经过调研和性能测试,大数据元仓最终以 StarRocks 为技术底座,从实际的应用效果来看,大部分查询都能在几百毫秒内返回结果。 B站大数据元仓是一款用来观测大数据引擎运行情况、推动大作业治理的系统诊断产品。经过调研和性能测试,大数据元仓最终以 StarRocks 为技术底座,从实际的应用效果来看,大部分查询都能在几百毫秒内返回结果。

随着B站业务的高速发展,数据量已达到 EB+ 级,为了适应数据服务需求,B站大数据平台引入了 Presto、Spark、ClickHouse 等多种大数据引擎。

在大数据引擎运行过程中,由于缺乏一些运行时的切面数据,我们难以实时观测引擎的运行情况,另外,由于缺乏作业维度的统计信息,我们也难以推动用户对大作业进行治理。为了满足这些需求,B站构建了大数据元仓系统。

大数据元仓涉及的大数据组件包括 Yarn、Presto、Spark 等,以 Presto 元仓为例,系统主要从集群、队列、query 等三个维度进行分析。 其中集群维度可以细分为包括 CPU、内存、扫描数据量等在内的节点资源汇总信息和包括各种 query 状态统计的集群 query 汇总信息;队列维度主要包括队列的资源、水位信息;query 维度则是对集群 query 汇总信息的一个补充,可以获取更详细的信息,比如可以具体了解导致查询失败的异常情况。

alt

技术选型

需求特点

目前,我们的内部监控架构基于 Prometheus 搭建,Prometheus 存储数据量有限,通常仅为一两个月的数据,不适合存储长时间的历史数据。此外,Prometheus 是基于度量的系统,更多地用于展示趋势性数据,例如集群的 CPU 和内存情况等,但对于像元仓这样需要下钻到具体明细数据的需求,Prometheus 则难以满足。

alt

基于以上问题,我们打算设计一个新的架构来构建大数据元仓。我们的大数据元仓应该满足以下特点:

实时观测:能够实时观测到集群的指标数据,并在多维分析场景中实现秒级或亚秒级的查询返回。

复杂逻辑计算:支持复杂的逻辑计算,不需要将数据落库后打成大宽表的形式。有较高的灵活性,以便后期满足不同的需求,并在现有逻辑的基础上进行处理和分析。

存储及回放:能够存储半年甚至更久的数据,并支持数据的回放。

数据湖 or 数仓

基于以上需求,我们对当前比较热门的数据湖、数仓组件进行了调研。其中,数据湖组件主要包括 Iceberg、Hudi 和 Delta Lake,数仓组件则重点调研了 ClickHouse 和 StarRocks。

最终,由于以下原因,我们选择了数仓技术作为大数据元仓的技术底座: 传统的数据湖技术在实时性方面普遍存在不足,Hudi、Iceberg 虽然可以达到分钟级的实时性,但要实现秒级的实时性可能仍然存在一些困难;

数据湖的远程 I/O 成本可能会较高,而数仓技术更多地采用本地 I/O,可以更有效地减少远程 I/O 的开销。

在数仓技术中,有一些成熟的加速手段,例如通过物化视图和索引等方式来提高查询性能。相对于数据湖技术,数仓技术在这方面更加成熟。

组件选型

在数据湖与数仓之间作出选择后,关于采用 StarRocks 还是 ClickHouse,我们从6个维度进行了比较。

标准 SQL:StarRocks 支持标准 SQL,并兼容 MySQL 协议,这对于应用程序迁移来说是一个优点。而 ClickHouse 在标准 SQL 方面并不完全支持;

性能:StarRocks 的读写性能都较好,而 ClickHouse 在单机性能方面可能更强大;

StarRocks 可以很便利地通过多机多核的方式提高并发能力,而 ClickHouse 的并发能力相对较弱,默认的 QPS 大约为100;

JOIN 能力:StarRocks 的支持较好,可以建立星型或者雪花模型应对维度数据的变更,而 ClickHouse 的 JOIN 能力相对较弱,通常需要将数据处理成宽表进行查询;

运维:StarRocks 不依赖第三方组件,如果出现资源不足的情况,可以很容易地对 FE 和 BE 进行横向扩展。而 ClickHouse 依赖于第三方组件,如 Zookeeper 来构建集群,运维成本更高;

StarRocks 社区在国内活跃度相对较高,在我们对 StarRocks 进行调研和测试时,如果遇到问题,社区往往能够快速给出建议和回复; 根据以上分析,我们更倾向于选择 StarRocks 作为大数据元仓技术的底座。

性能测试

为了进一步了解 StarRocks 在性能方面的表现,我们对 StarRocks 内外表与内部 Presto 集群的性能进行了比较,使用了 TPCH 数据集,并随机选择了一些 SQL 进行性能测试。

alt

图中橙色线表示 StarRocks 外表的查询,灰色线表示 Presto 的查询。可以看出,相对于 Presto,StarRocks 具有更强大的查询性能,外表查询时间相缩短了大约70%至80%。如果采用内表查询,查询时间则会进一步缩短。

alt

除了查询性能,我们还关注计算引擎的资源消耗,因此还比较了 StarRocks 和 Presto 的查询资源消耗。

这里特别说明一下,考虑到我们的元仓场景更倾向于使用内表进行查询,因此采用内表进行了资源、内存和 CPU 方面的比较。总体而言,相对于 Presto,StarRocks 的资源消耗更小。

架构方案

在元仓架构方面,我们最终确定 StarRocks 作为元仓的技术底座,提供存储和查询能力。此外,还构建了一个采集模块,主要功能是收集各个集群的指标,并将其推送到 Kafka。为了实现这一功能,我们在内部实现了一个代理(agent),该代理封装了从采集器(collector)将数据推送到 Kafka 的逻辑。

alt

StarRocks 有两种方式从 Kafka 导入数据:Routine Load 和 Flink。其中,Routine Load 是 StarRocks 自带的一种导入作业方式,可以消费 Kafka 数据并将其写入 StarRocks。

采用 Routine Load 方式比较简单,用户只需要创建一个 Routine Load 作业,并指定列和 Kafka 主题以及一些分区信息即可进行数据消费和写入 StarRocks。在线上环境中,对于新业务来说,Routine Load 是比较容易推广的,因为我们可以与用户规范数据格式,使其以规范的格式写入 Kafka。

对于存量数据,用户可能已经在 Kafka 端采集了一些度量指标,此时让用户按照之前定义的规范重新将数据写入 Kafka 可能并不合适。对于一些特殊的业务逻辑,Routine Load 可能无法满足需求,这时就需要用到 Flink 来处理。

相比 Routine Load,Flink 通过编码的方式更加灵活,特别适用于处理复杂的多表关联查询。然而,由于 Flink 即使是对于简单的表也需要进行编码,这对于一些不常开发代码的用户来说可能会增加上手成本。因此,在内部我们会将 Routine Load 与 Flink 结合使用。

应用效果

alt

根据最终的应用情况,StarRocks 整体的性能表现非常好,在99分位延迟方面表现出色,大部分查询都能在几百毫秒内返回结果。

从元仓的角度来看,大数据元仓(以 Presto 元仓为例)带来的一个效果是对 CPU 使用情况的监控和分析。通过监控 Presto worker 的 CPU 指标,如可用处理器数量和 CPU 负载等,可以根据用户选择的时间范围(如3000分钟)和粒度(分钟、小时或天),对 CPU 使用情况进行分组和聚合,以获取整体 CPU 使用情况的统计数据。这样可以帮助用户了解 CPU 的利用率情况。

alt

上图展示了B站内部 Presto 集群作业的概况。有时用户会反馈 Presto 作业运行较慢或失败较多。在遇到这些问题时,我们可以通过这张图进行量化分析,以确定是否存在排队查询或失败等情况。

图中,排队查询量、正在执行的作业成功量以及失败的作业数量等数据主要来源于 Presto Coordinator 的查询信息。通过这些信息,我们可以更加清楚地了解 Presto 作业的排队情况、执行成功率以及失败数量,以便更好地监控和管理 Presto 集群的性能和稳定性。

未来规划

目前我们已经在内部完成了 StarRocks 的初步落地,将其应用于公司的元仓场景,并构建了一个大数据元仓系统,为用户提供实时的资源观测能力。此外,还通过诊断系统推动用户治理异常作业。

未来,会在如下一些方向开展工作:

由于 StarRocks 在大数据元仓场景中表现非常出色,我们希望将其接入更多的业务场景,例如 BI 和 DQC 等。

解决权限、UDF 等问题,比如接入 Hive UDF,使 StarRocks 与其它引擎对齐。

目前的架构主要是以仓为中心,未来我们计划将半年或者更长时间的数据回流到数据湖中,从而实现湖仓一体化的架构。

开启 StarRocks 的一些加速功能,例如物化视图索引,以提升现有元仓查询的速度。

我们希望能够接入更多的组件,例如将 HDFS、Kyuubi 的大数据元信息纳入元仓体系中。

诊断系统方面,目前主要以 Spark 诊断为主。未来,我们希望能够支持更多类型的作业诊断,如 Presto 和 Flink 作业的智能诊断。此外,我们还希望将诊断系统与公司内部其他平台打通,为用户提供更专业的诊断建议。

本文由 mdnice 多平台发布

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

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

相关文章

【VS Code】Visual Studio Code 你必须安装的 Plugins - 持续更新

文章目录 GitLens — Git supercharged【真香】EditorConfig for VS Code【真香】Remote - SSH【真香】MySQL【真香】 Talk is cheap, show me the code. GitLens — Git supercharged【真香】 插件地址: https://marketplace.visualstudio.com/items?itemNameeam…

5G - NR物理层解决方案支持6G非地面网络中的高移动性

文章目录 非地面网络场景链路仿真参数实验仿真结果 非地面网络场景 链路仿真参数 实验仿真结果 Figure 5 && Figure 6:不同信噪比下的BER和吞吐量 变量 SISO 2x2MIMO 2x4MIMO 2x8MIMOReyleigh衰落、Rician衰落、多径TDL-A(NLOS) 、TDL-E(LOS)(a)QPSK (b)16…

cache教程 3.HTTP服务器

上一节我们实现了单机版的缓存服务,但是我们的目标是分布式缓存。那么,我们就需要把缓存服务部署到多态机器节点上,对外提供访问接口。客户端就可以通过这些接口去实现缓存的增删改查。 分布式缓存需要实现节点间通信,而通信方法…

【ArcGIS Pro微课1000例】0049:根据坐标快速定位(创建点位)的常见方法

文章目录 一、转到XY1. 闪烁位置2. 平移3. 标记位置二、定位1. 坐标定位2. 添加到图形3. 添加至要素类三、添加XY坐标四、创建点要素一、转到XY 举例:经纬度坐标:113.2583286东, 23.1492340北 。 1. 闪烁位置 输入坐标,点击闪烁位置工具,即可在对应的位置出现一个绿色闪烁…

Bash脚本处理ogg、flac格式到mp3格式的批量转换

现在下载的许多音乐文件是flac和ogg格式的,QQ音乐上下载的就是这样的,这些文件尺寸比较大,在某些场合使用不便,比如在车机上播放还是mp3格式合适,音质这些在车机上播放足够了,要求不高。比如本人就喜欢下载…

西南科技大学C++程序设计实验十(函数模板与类模板)

一、实验目的 1. 掌握函数模板与类模板; 2. 掌握数组类、链表类等线性群体数据类型定义与使用; 二、实验任务 1. 分析完善以下程序,理解模板类的使用: (1)补充类模板声明语句。 (2)创建不同类型的类对象,使用时明确其数据类型? _template<typename T>__…

最简单的基于 FFmpeg 的音频解码器

最简单的基于 FFmpeg 的音频解码器 最简单的基于 FFmpeg 的音频解码器正文参考工程文件下载 参考雷霄骅博士的文章&#xff0c;链接&#xff1a;最简单的基于FFMPEGSDL的音频播放器&#xff1a;拆分-解码器和播放器 最简单的基于 FFmpeg 的音频解码器 正文 FFmpeg 音频解码器…

『 MySQL数据库 』聚合统计

文章目录 前言 &#x1f951;&#x1f95d; 聚合函数&#x1f353; COUNT( ) 查询数据数量&#x1f353; SUM( ) 查询数据总和&#x1f353; AVG( ) 查询数据平均值&#x1f353; MAX( ) 查询数据最大值&#x1f353; MIN( ) 查询数据最小值 &#x1f95d; 数据分组GROUP BY子句…

Rellax.js,一款超酷的 JavaScript 滚动效果库

嗨&#xff0c;大家好&#xff0c;欢迎来到猿镇&#xff0c;我是镇长&#xff0c;lee。 又到了和大家见面的时间&#xff0c;今天和大家分享一款轻松实现视差滚动效果的 JavaScript 库——Rellax.js。无需大量的配置&#xff0c;即可为你的网站增色不少。 什么是Rellax.js&am…

LabVIEW发开发电状态监测系统

LabVIEW发开发电状态监测系统 对发电设备的持续监测对于确保可靠的电力供应至消费者极为重要。它不仅能够及时提醒操作员注意发电设备的潜在损坏&#xff0c;还能减少由于设备故障造成的停机时间。为了达到这一目标&#xff0c;开发了一款基于LabVIEW的软件&#xff0c;专门用…

TypeScript基本语法

想在自己电脑上快速演示下方代码&#xff1f;点击ts官方演练场&#xff1a;https://www.typescriptlang.org/play 变量声明&#xff1a;TypeScript 在 Javascript的基础上加入了静态类型检查功能&#xff0c;因此每一个变量都有固定的数据类型。 //string: 字符串&#xff0c;…

使用Rust 构建C 组件

协议解析&#xff0c;这不就很快了&#xff0c;而且原生的标准库红黑树和avl 树支持&#xff0c;异步tokio 这些库&#xff0c;编写应用组件就很快了 rust 标准库不支持 unix 的消息队列&#xff0c;但是支持 shm 和 uds&#xff0c;后者从多方面考虑都比&#xff0c;消息队列更…

ChatGPT OpenAI API请求限制 尝试解决

1. OpenAI API请求限制 Retrying langchain.chat_models.openai.ChatOpenAI.completion_with_retry.._completion_with_retry in 4.0 seconds as it raised RateLimitError: Rate limit reached for gpt-3.5-turbo-16k in organization org-U7I2eKpAo6xA7RUa2Nq307ae on reques…

Hive SQL间隔连续问题

问题引入 下面是某游戏公司记录的用户每日登录数据, 计算每个用户最大的连续登录天数&#xff0c;定义连续登录时可以间隔一天。举例&#xff1a;如果一个用户在 1,3,5,6,9 登录了游戏&#xff0c;则视为连续 6 天登录。 id dt1001 2021-12-121002 2021-12-12…

Pandas中的Series(第1讲)

Pandas中的Series(第1讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

MobaXterm成功连接到开发环境后,过一段时间会自动断开。

问题现象 MobaXterm成功连接到开发环境后&#xff0c;过一段时间会自动断开。 原因 配置MobaXterm工具时&#xff0c;没有勾选“SSH keepalive”或专业版MobaXterm工具的“Stop server after”时间设置太短。

Redis 环境搭建

文章目录 第1关&#xff1a;Redis 环境搭建 第1关&#xff1a;Redis 环境搭建 编程要求 根据上述相关知识&#xff0c;在右侧命令行中完成 Redis 集群的部署与安装。 安装完成后&#xff0c;使用 echo “cluster nodes”|redis-cli -p 7001 -c >/root/test.txt 将结果保存。…

四:爬虫-Cookie与Session实战

四&#xff1a;Cookie与Session实战 ​ 在浏览网站的过程中&#xff0c;我们经常会遇到需要登录的情况&#xff0c;有些页面只有登录之后才可以访问。在登录之后可以连续访问很多次网站&#xff0c;但是有时候过一段时间就需要重新登录。还有一些网站&#xff0c;在打开浏览器…

STM32 USB串口通信实例

✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进&#xff0c; 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 &#x1f34e;获取更多嵌入式资料可点击链接进群领取&#xff0c;谢谢支持&#xff01;…

Spring Cloud Gateway 网关的基础使用

1. 什么是网关&#xff1f;网关有什么用&#xff1f; 在微服务架构中&#xff0c;网关就是一个提供统一访问地址的组件&#xff0c;它解决了内部微服务与外部的交互问题。网关主要负责流量的路由和转发&#xff0c;将外部请求引到对应的微服务实例上。同时提供身份认证、授权、…