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

news2024/11/30 18:29:01

作者: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.coloradmin.cn/o/1290543.html

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

相关文章

准确!!!在 CentOS 8 上配置 PostgreSQL 14 的主从复制

在 CentOS 8 上配置 PostgreSQL 14 的主从复制,并设置 WAL 归档到特定路径 /home/postgres/archive 的步骤如下: 主服务器配置(主机) 配置 PostgreSQL: 编辑 postgresql.conf 文件: vim /data/postgres/p…

AIGC之Image2Video(一)| Animate Anyone:从静态图像生成动态视频,可将任意图像角色动画化

近日,阿里发布了Animate Anyone,只需一张人物照片,结合骨骼动画,就能生成人体动画视频。 项目地址:https://humanaigc.github.io/animate-anyone/ 论文地址:https://arxiv.org/pdf/2311.17117.pdf Github…

632. 最小区间

632. 最小区间 class Solution {public int[] smallestRange(List<List<Integer>> nums) {int size nums.size();Map<Integer, List<Integer>> indices new HashMap<Integer, List<Integer>>();int xMin Integer.MAX_VALUE, xMax Inte…

Docker+jenkins+gitlab实现持续集成

1.安装环境 服务器ip虚拟机版本192.168.5.132centos7.6192.168.5.152centos7.6 2. 安装docker 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息&#xff0c;要确保centos7能上外网 yum-config-manager --add-repo http:…

HarmonyOS4.0从零开始的开发教程06常用基础组件

HarmonyOS&#xff08;四&#xff09;常用基础组件 1 组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声明式开发范式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界…

华为配置风暴控制示例

组网需求 如下图所示&#xff0c;SwitchA作为二层网络到三层路由器的衔接点&#xff0c;需要防止二层网络转发的广播、未知组播或未知单播报文产生广播风 配置思路 用如下的思路配置风暴控制。 通过在GE0/0/1接口视图下配置风暴控制功能&#xff0c;实现防止二层网络转发的…

华为设备使用python配置netconf 功能

实验目的&#xff1a; 公司有一台CE12800的设备&#xff0c;管理地址位172.16.1.2&#xff0c;现在需要编写自动化脚本&#xff0c;通过SSH登陆到设备上配置netconf协议的用户名&#xff0c;密码以及netconf服务&#xff0c;并且通过netconf协议将设备的loopback0接口IP地址配…

Redis应用-缓存

目录 什么是缓存 使用redis作为缓存 缓存的更新策略 通用的淘汰策略 redis内置的淘汰策略 缓存预热 缓存穿透 缓存雪崩 缓存击穿 什么是缓存 缓存(cache)是计算机中一个经典的概念,在很多的场景中都会涉及到. 核心思路就是把一些常用的数据放到触手可及(访问速度更快…

docker安装及配置mysql

docker 安装mysql 下载镜像文件 下载mysql5.7版本 sudo docker pull mysql:5.7检查是否下载成功 sudo docker images2.创建实例并启动 切换到root下避免每次使用sudo 密码&#xff1a;vagrant docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/my…

ChatGPT能帮助--掌握各种AI绘图工具,随意生成各类型性图像

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

专业130+总分400+云南大学通信847专业基础综考研经验(原专业课827)

今年专业130总分400云南大学通信上岸&#xff0c;整体考研感觉还是比较满意&#xff0c;期间也付出了很多心血&#xff0c;走过弯路&#xff0c;下面分享一下这一年考研得失&#xff0c;希望大家可以从中有所借鉴。 先说明我在考研报名前更换成云南大学的理由&#xff1a;&…

HarmonyOS4.0从零开始的开发教程03初识ArkTS开发语言(中)

HarmonyOS&#xff08;二&#xff09;初识ArkTS开发语言&#xff08;中&#xff09;之TypeScript入门 浅析ArkTS的起源和演进 1 引言 Mozilla创造了JS&#xff0c;Microsoft创建了TS&#xff0c;Huawei进一步推出了ArkTS。 从最初的基础的逻辑交互能力&#xff0c;到具备类…

使用NimoShake将数据从AWS DynamoDB迁移至阿里云MongoDB

本文介绍从AWS DynamoDB到阿里云MongoDB的迁移框架。 它概述了以下步骤&#xff1a; 在阿里云上配置云数据库MongoDB版并应用公网终端节点在 AWS EC2 上安装 Nimoshake将AWS EC2访问阿里云MongoDB版列入白名单配置 Nimoshake 并开始迁移过程验证目标数据库上的增量数据 1. 创…

阿里云上传文件出现的问题解决(跨域设置)

跨域设置引起的问题 起因&#xff1a;开通对象存储服务后&#xff0c;上传文件限制在5M 大小&#xff0c;无法上传大文件。 1.查看报错信息 2.分析阿里云服务端响应内容 <?xml version"1.0" encoding"UTF-8"?> <Error><Code>Invali…

计算机图形图像技术(图像锐化处理与图像解析)

一、实验原理&#xff1a; 1、拓展Sobel算子锐化 void Sobel(Array src, Array dst, int ddepth, int dx, int dy, int ksize); ①参数&#xff1a;src为输入图像&#xff1b;dst为输出图像&#xff0c;大小和通道数与源图像一致&#xff0c;必要时重建&#xff1b;ddepth为目…

【动手学深度学习】(十一)卷积层

文章目录 一、从全连接到卷积 一、从全连接到卷积 分类猫和狗的图片 使用一个相机采集图片&#xff08;12M像素&#xff09;RGB图片有36M元素使用100大小的单隐层MLP&#xff0c;模型有3.6B元素 远多于世界上所有猫和狗总数&#xff08;900M狗&#xff0c;600M猫&#xff09;…

KD-Tree

游戏中常对物体进行空间划分&#xff0c;对于均匀分布的划分一般用四叉树(八叉树)&#xff0c;动态不均匀的分布可以采用kd-tree 构建kd-tree 构建思路&#xff1a; 1.对节点进行各维度的方差分析&#xff0c;选取方差最大(即离散程度最高)的维度进行排序。取中值节点作为分…

ThreadX开源助力Microsoft扩大应用范围:对比亚马逊AWS的策略差异

全球超过120亿台设备正在运行ThreadX&#xff0c;这是一款专为资源受限环境设计的实时操作系统。该操作系统在微控制器和小型处理器上表现出色&#xff0c;以极高的可靠性和精确的时间控制处理任务而闻名。 ThreadX曾是英特尔芯片管理引擎的引擎&#xff0c;并且是控制Raspber…

运行第一个php及html程序

运行第一个php程序 打开vscode&#xff0c;打开文件夹&#xff0c;找到wampserver的安装目录中的www文件夹新建文件。 html文件直接复制路径到浏览器即可运行 php文件复制路径到浏览器后更改www及之前的路径为localhost

Linux系统调试课:I2C tools调试工具

文章目录 一、如何使用I2C tools测试I2C外设1、I2C tools概述: 2、下载I2C tools源码:3、编译I2C tools源码: 4、i2cdetect 5、i2cget 6、i2cdump