大数据StarRocks(八):资源隔离实战

在这里插入图片描述

前言

自 2.2 版本起,StarRocks 支持资源组管理,集群可以通过设置资源组(Resource Group)的方式限制查询对资源的消耗,实现多租户之间的资源隔离与合理利用。在 2.3 版本中,StarRocks 支持限制大查询,集群可以进一步控制大查询对资源的消耗,避免少数的大查询耗尽系统资源,进而影响系统稳定性。StarRocks 2.5 版本支持通过资源组对导入计算进行资源隔离,从而间接控制导入任务对集群资源的消耗。
通过资源隔离功能,您可以将 BE 节点的计算资源划分成若干个资源组,并且为每个资源组关联一个或多个分类器(Classifier)。根据在分类器中设置的条件,系统将匹配查询任务的对应信息。当您发起查询任务时,分类器会根据查询任务的相关信息进行匹配。其中匹配度最高的分类器才会生效,系统则会根据生效的分类器所属的资源组为查询任务分配资源。

资源隔离功能支持计划
image.png

基本概念

资源组

通过将 BE 节点划分为若干个资源组 (resource group),系统在执行相应资源组的查询任务时,会按照为该资源组划分的资源配额(CPU 及内存)分配查询资源。

资源组设置以下资源限制

cpu_core_limit

该资源组在当前 BE 节点可使用的 CPU 核数软上限,实际使用的 CPU 核数会根据节点资源空闲程度按比例弹性伸缩。
取值为正整数。取值范围为 (1, avg_be_cpu_cores]。
** avg_be_cpu_cores 表示所有 BE 的 CPU 核数的平均值。**
image.png
说明:
案例一
在 64 核的 BE 节点中设置三个资源组 rg1、rg2、rg3,**cpu_core_limit **分别设置为 8、24、32。
当在该 BE 节点满载时资源组 rg1、rg2、rg3 能分配到的 CPU 核数分别为
BE 节点总 CPU 核数 ×(8/64)= 48
BE 节点总 CPU 核数 ×(24/64)= 144
BE 节点总 CPU 核数 ×(32/64)= 192

如果当前 BE 节点资源非满载,rg1、rg2 有负载,rg3 无负载,则 rg1、rg2 分配到的 CPU 核数分别为
BE 节点总 CPU 核数 ×(8/32)= 96
BE 节点总 CPU 核数 ×(24/32)= 288

案例二、
在 64 核的 BE 节点中设置三个资源组 rg1、rg2、rg3,**cpu_core_limit **分别设置为 24、48、56。
当在该 BE 节点满载时资源组 rg1、rg2、rg3 能分配到的 CPU 核数分别为
BE 节点总 CPU 核数 ×(24/128)= 72
BE 节点总 CPU 核数 ×(48/128)= 144
BE 节点总 CPU 核数 ×(56/128)= 168

如果当前 BE 节点资源非满载,rg1、rg2 有负载,rg3 无负载,则 rg1、rg2 分配到的 CPU 核数分别为
BE 节点总 CPU 核数 ×(24/72)= 128
BE 节点总 CPU 核数 ×(48/72)= 256

cpu_core_limit 不能大于BE 的 CPU 核数的平均值,理论上来说超出平均值设置无效,相当于无限制

mem_limit

该资源组在当前 BE 节点可使用于查询的内存(query_pool)占总内存的百分比(%)。取值范围为 (0,1)
image.png

concurrency_limit

资源组中并发查询数的上限,用以防止并发查询提交过多而导致的过载。只有大于 0 时才生效,默认值为 0。

大查询限制进一步对资源组进行如下的配置

big_query_cpu_second_limit:
  • 大查询任务可以使用 CPU 的时间上限,其中的并行任务将累加 CPU 使用时间。单位为秒。只有大于 0 时才生效,默认值为 0。
big_query_scan_rows_limit
  • 大查询任务可以扫描的行数上限。只有大于 0 时才生效,默认值为 0。
big_query_mem_limit
  • 大查询任务可以使用的内存上限。单位为 Byte。只有大于 0 时才生效,默认值为 0。

当资源组中运行的查询超过以上大查询限制时,查询将会终止,并返回错误。您也可以在 FE 节点 fe.audit.log 的 ErrorCode 列中查看错误信息。

big_query_mem_limit 和 mem_limit对查询限制的影响

BE节点内存
image.png

下面展示将big_query_mem_limit和mem_limit设置不同值对查询的影响

  • big_query_mem_limit > mem_limit

image.png
设置mem_limit=693M,big_query_mem_limit=8G
image.png
执行查询时,包内存超限,瓶颈在mem_limit
image.png

  • big_query_mem_limit < mem_limit

image.png
设置mem_limit=8G,big_query_mem_limit=693M
image.png
执行查询时,包内存超限,瓶颈在big_query_mem_limit
image.png

  • big_query_mem_limit = mem_limit

image.png
设置mem_limit=10G,big_query_mem_limit=10240M
image.png
执行查询成功

以上实战足以证明mem_limit是基础的内存限制,而big_query_mem_limit是对查询内存进行进一步限制,若big_query_mem_limit和mem_limit相等,big_query_mem_limit设置限制相当于无效;因此big_query_mem_limit小于mem_limit时,对大内存查询进一步限制才有意义。

设置big_query_scan_rows_limit大小对查询的影响

在这里插入图片描述

设置big_query_scan_rows_limit=1000
image.png
执行查询时报错误,实际需要扫描12152行的数据,但扫描行数限制1000,所以查询报错。

分类器

可以为每个资源组关联一个或多个分类器。系统将会根据所有分类器中设置的条件,为每个查询任务选择一个匹配度最高的分类器,并根据生效的分类器所属的资源组为该查询任务分配资源。
分类器可以包含以下条件:

  • user:用户名。
  • role:用户所属的 Role。
  • query_type: 查询类型,目前仅支持 SELECT。
  • source_ip:发起查询的 IP 地址,类型为 CIDR。
  • db:查询所访问的 Database,可以为 , 分割的字符串。

系统在为查询任务匹配分类器时,查询任务的信息与分类器的条件完全相同,才能视为匹配。如果存在多个分类器的条件与查询任务完全匹配,则需要计算不同分类器的匹配度。其中只有匹配度最高的分类器才会生效。

匹配度的计算方式如下

  • 如果 user 一致,则该分类器匹配度增加 1。
  • 如果 role 一致,则该分类器匹配度增加 1。
  • 如果 query_type 一致,则该分类器匹配度增加 1 + 1/分类器的 query_type 数量。
  • 如果 source_ip 一致,则该分类器匹配度增加 1 + (32 - cidr_prefix)/64。
  • 如果查询的 db 匹配,则匹配度加 10。

例如
多个与查询任务匹配的分类器中,分类器的条件数量越多,则其匹配度越高。

-- 因为分类器 B 的条件数量比 A 多,所以 B 的匹配度比 A 高。
classifier A (user='Alice')
classifier B (user='Alice', source_ip = '192.168.1.0/24')

如果分类器的条件数量相等,则分类器的条件描述越精确,其匹配度越高。

因为分类器 B 限定的 `source_ip` 地址范围更小,所以 B 的匹配度比 A 高。
classifier A (user='Alice', source_ip = '192.168.1.0/16')
classifier B (user='Alice', source_ip = '192.168.1.0/24')

隔离计算资源

开启资源组

通过设置相应会话变量开启 Pipeline 引擎以及资源组功能。

SET enable_pipeline_engine = true;
SET enable_resource_group = true;

说明:如果需要设置全局变量,需要运行 SET GLOBAL enable_resource_group = true;。

创建资源组和分类器

创建资源组,关联分类器,并分配资源。

CREATE RESOURCE GROUP group_name 
TO (user='string', role='string', query_type in ('select'), source_ip='cidr'
) -- 创建分类器,多个分类器间用英文逗号(,)分隔。
WITH ("cpu_core_limit" = "INT","mem_limit" = "m%","concurrency_limit" = "INT","type" = "str" -- 资源组的类型,取值为 normal 或 short_query。
);

示例:

CREATE RESOURCE GROUP rg1
TO (user='rg1_user1', role='rg1_role1', query_type in ('select'), source_ip='192.168.x.x/24'),(user='rg1_user2', query_type in ('select'), source_ip='192.168.x.x/24'),(user='rg1_user3', source_ip='192.168.x.x/24'),(user='rg1_user4'),(db='db1')
WITH ('cpu_core_limit' = '10','mem_limit' = '20%','big_query_cpu_second_limit' = '100','big_query_scan_rows_limit' = '100000','big_query_mem_limit' = '1073741824'
);

查看资源组和分类器

查询所有的资源组和分类器

SHOW RESOURCE GROUPS ALL;

查询和当前用户匹配的资源组和分类器

SHOW RESOURCE GROUPS;

查询指定的资源组和分类器

SHOW RESOURCE GROUP group_name;

实操记录

'root'@(none) 06:05:20>SHOW RESOURCE GROUPS;
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+-----------------------------------------------+
| name | id        | cpu_core_limit | mem_limit | big_query_cpu_second_limit | big_query_scan_rows_limit | big_query_mem_limit | concurrency_limit | type   | classifiers                                   |
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+-----------------------------------------------+
| rg2  | 129398467 | 10             | 12.0%     | 300                        | 50000000                  | 536870912           | 2000000           | NORMAL | (id=129398469, weight=10.0, db='test') |
| rg1  | 129398471 | 10             | 15.0%     | 300                        | 50000000                  | 8589934592          | 2000000           | NORMAL | (id=129398473, weight=10.0, db='test') |
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+-----------------------------------------------+
2 rows in set (0.00 sec)'root'@(none) 06:05:43>SHOW RESOURCE GROUPS ALL;
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+----------------------------------------------------------------------------------------------------+
| name | id        | cpu_core_limit | mem_limit | big_query_cpu_second_limit | big_query_scan_rows_limit | big_query_mem_limit | concurrency_limit | type   | classifiers                                                                                        |
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+----------------------------------------------------------------------------------------------------+
| rg1  | 129398471 | 10             | 15.0%     | 300                        | 50000000                  | 8589934592          | 2000000           | NORMAL | (id=129398472, weight=3.459375, user=test_rw, query_type in (SELECT), source_ip=192.168.10.12/24)   |
| rg1  | 129398471 | 10             | 15.0%     | 300                        | 50000000                  | 8589934592          | 2000000           | NORMAL | (id=129398473, weight=10.0, db='test')                                                      |
| rg2  | 129398467 | 10             | 12.0%     | 300                        | 50000000                  | 536870912           | 2000000           | NORMAL | (id=129398468, weight=3.459375, user=bigdatat_rw, query_type in (SELECT), source_ip=192.168.10.13/24) |
| rg2  | 129398467 | 10             | 12.0%     | 300                        | 50000000                  | 536870912           | 2000000           | NORMAL | (id=129398469, weight=10.0, db='test')                                                      |
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+----------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)'root'@(none) 06:06:18>SHOW RESOURCE GROUP rg1;
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+--------------------------------------------------------------------------------------------------+
| name | id        | cpu_core_limit | mem_limit | big_query_cpu_second_limit | big_query_scan_rows_limit | big_query_mem_limit | concurrency_limit | type   | classifiers                                                                                      |
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+--------------------------------------------------------------------------------------------------+
| rg1  | 129398471 | 10             | 15.0%     | 300                        | 50000000                  | 8589934592          | 2000000           | NORMAL | (id=129398472, weight=3.459375, user=test_rw, query_type in (SELECT), source_ip=192.168.10.12/24) |
| rg1  | 129398471 | 10             | 15.0%     | 300                        | 50000000                  | 8589934592          | 2000000           | NORMAL | (id=129398473, weight=10.0, db='test')                                                    |
+------+-----------+----------------+-----------+----------------------------+---------------------------+---------------------+-------------------+--------+--------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)'root'@(none) 06:06:24>

说明:weight:代表分类器的匹配度。

管理资源组配额和分类器

您可以修改资源组的配额,以及增加或删除资源组的分类器。
为已有的资源组修改资源配额。

ALTER RESOURCE GROUP group_name WITH ('cpu_core_limit' = 'INT','mem_limit' = 'm%'
);

删除指定资源组。

DROP RESOURCE GROUP <group_name>;

添加新的分类器。

ALTER RESOURCE GROUP <group_name> ADD (user='string', role='string', query_type in ('select'), source_ip='cidr');

删除指定的分类器。

ALTER RESOURCE GROUP <group_name> DROP (CLASSIFIER_ID_1, CLASSIFIER_ID_2, ...);

删除所有的分类器。

ALTER RESOURCE GROUP <group_name> DROP ALL;

监控资源组

可监控的资源组相关 Metric 包括:

  • FE 节点

    • starrocks_fe_query_resource_group:该资源组中查询任务的数量。
    • starrocks_fe_query_resource_group_latency:该资源组的查询延迟百分位数。
    • starrocks_fe_query_resource_group_err:该资源组中报错的查询任务的数量。
    • 查看metrics采集数据:FE IP:8040/metrics
    • image.png
  • BE 节点

    • starrocks_be_resource_group_cpu_limit_ratio:该资源组 CPU 配额比率的瞬时值。
    • starrocks_be_resource_group_cpu_use_ratio:该资源组 CPU 使用率瞬时值。
    • starrocks_be_resource_group_mem_limit_bytes:该资源组内存配额比率的瞬时值。
    • starrocks_be_resource_group_mem_allocated_bytes:该资源组内存使用率瞬时值。
    • 查看metrics采集数据:BE IP:8040/metrics
    • image.png

总结:

以上是starrocks集群资源资源的介绍,欢迎评论交流,转发,收藏~

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

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

相关文章

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32EC11编码器实现增减调节及单击、双击、长按功能 &#x1f4fa;实现效果演示&#xff1a; &#x1f4d8;内容提要 &#x1f4dd;本文主要实现&#xff0c;通过STM32 HAL库开发&#xff0c;实现的EC11编码器功能&#xff0c;按键结合状态机思想实现的拓展单击、双击、…

Linux之快速入门(CentOS 7)

文章目录 一、Linux目录结构二、常用命令2.1 切换用户2.2查看ip地址2.3 cd2.4 目录查看2.5 查看文件内容2.6 创建目录及文件2.7 复制和移动2.8 其他2.9 tar3.0 which3.1 whereis3.2 find&#xff08;这个命令尽量在少量用户使用此软件时运行&#xff0c;因为此命令是真的读磁盘…

计数排序(六)——计数排序及排序总结

目录 一.前言 二.归并小补充 三.计数排序 操作步骤&#xff1a; 代码部分&#xff1a; 四.稳定性的概念&#xff1a; 五.排序大总结&#xff1a; ​六.结语 一.前言 我们已经进入排序的尾篇了&#xff0c;本篇主要讲述计数排序以及汇总各类排序的特点。码字不易&#x…

【JavaScript 漫游】【002】JS 的数据类型总览

文章简介 本文为【JavaScript 漫游】专栏的第 002 篇文章&#xff0c;主要记录了笔者学习 JS 数据类型中所了解的基本知识点。 ES5 的数据类型有哪些如何区分 ES5 的数据类型null 和 undefined 的相同点和不同点布尔值的转换规则parseInt 和 parseFloat 的基本用法 作为 JS …

使用plotly dash 画3d圆柱(Python)

plotly3D &#xff08;3d charts in Python&#xff09;可以画3维图形 在做圆柱的3D装箱项目&#xff0c;需要装箱的可视化&#xff0c;但是Mesh &#xff08;3d mesh plots in Python&#xff09;只能画三角形&#xff0c;所以需要用多个三角形拼成一个圆柱&#xff08;想做立…

网站小程序分类目录网源码系统+会员注册登录功能 附带完整的搭建教程

随着互联网的发展&#xff0c;小程序分类目录网站已经成为了人们获取各类信息的重要渠道。而在这个领域中&#xff0c;罗峰给大家分享一款网站小程序分类目录网源码系统以其强大的功能和易用性&#xff0c;脱颖而出。本系统集成了会员注册登录功能&#xff0c;让用户能够更加便…

【git】git update-index --assume-unchanged(不改动.gitignore实现忽略文件)

文章目录 原因分析&#xff1a;添加忽略文件(取消跟踪)的命令&#xff1a;取消忽略文件(恢复跟踪)的命令&#xff1a;查看已经添加了忽略文件(取消跟踪)的命令&#xff1a; 原因分析&#xff1a; 已经维护的项目&#xff0c;文件已经被追踪&#xff0c;gitignore文件不方便修…

Layui + Echarts 5.0

Layui 怎么整合最新版本的 Echarts 5.0&#xff0c;Echarts 4 升级到 5后&#xff0c;有了很大改变&#xff0c;新的配置项4是无法兼容的&#xff0c;所以想要使用新的功能&#xff0c;都需要升级&#xff01; 新建一个echarts.js文件 layui.define(function (exports) {// 这…

Optional lab: Linear Regression using Scikit-LearnⅠ

scikit-learn是一个开源的、可用于商业的机器学习工具包&#xff0c;此工具包包含本课程中需要使用的许多算法的实现 Goals In this lab you will utilize scikit-learn to implement linear regression using Gradient Descent Tools You will utilize functions from sci…

微服务技术总结

微服务&#xff01; SrpingClound 微服务主要解决项目拆分后所产生的一系列问题。SpringClound主要解决服务的治理问题 单体VS分布式 单体&#xff1a;部署简单、成本低 缺点&#xff1a;服务耦合度高 2兼容1 服务拆分注意事项 远程调用分析 提供者&#xff1a;服务的提供方…

QT 使用XML保存操作记录

文章目录 1 实现程序保存操作记录的思路2 XML文档基本结构3 QDomDocument实现XML读写3.1 QDomDocument实现生成XML文件3.2 QDomDocument实现读取XML文件 4 QXmlStreamWriter实现读写4.1 QXmlStreamWriter实现生成XML4.2 QXmlStreamWriter实现读取XML 1 实现程序保存操作记录的思…

【大数据】Flink 架构(三):事件时间处理

《Flink 架构》系列&#xff08;已完结&#xff09;&#xff0c;共包含以下 6 篇文章&#xff1a; Flink 架构&#xff08;一&#xff09;&#xff1a;系统架构Flink 架构&#xff08;二&#xff09;&#xff1a;数据传输Flink 架构&#xff08;三&#xff09;&#xff1a;事件…

04.对象树

一、引入 1.QT实现输出"hello world" 使用QT编写"hello world"程序&#xff0c;有两种实现方式&#xff1a; &#xff08;1&#xff09;直接在生成的ui文件中&#xff0c;拖入一个label控件&#xff0c;双击控件编辑内容即可实现 &#xff08;2&#xff0…

【CSS】flex布局用法解析,快速上手flex布局,flex:1是什么意思?肯定看的懂好吧?

一、flex布局 flex 是 flexible box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为 flex 布局。 采用 flex 布局的元素&#xff0c;称为 flex 容器&#xff08;flex container&#xff09;&#xff0c;…

计算机视觉:高级图像处理,满足您的所有需求。

一、说明 特征提取是机器学习管道中的关键步骤&#xff0c;可增强模型在不同数据集上的泛化和良好表现能力。特征提取方法的选择取决于数据的特征和机器学习任务的具体要求。本文揭示图像处理的数学原理&#xff0c;实现增强的计算机视觉 二、关于计算机视觉的普遍问题 在计算机…

CSS基础细节学习

目录 一.CSS--网页的美容师 二.语法规范及选择器的介绍 一.CSS--网页的美容师 CSS是层叠样式表( Cascading Style Sheets )的简称&#xff0c;有时我们也会称之为CSS样式表或级联样式表。 CSS是也是一种标记语言&#xff0c;CSS主要用于设置HTML页面中的文本内容(字体、大小…

Linux:共享内存VS消息队列VS信号量

文章目录 共享内存的通信速度消息队列msggetmsgsndmsgrcvmsgctl 信号量semgetsemctl 内核看待ipc资源单独设计的模块ipc资源的维护 本篇主要是基于共享内存&#xff0c;延伸出对于消息队列和信号量&#xff0c;再从内核的角度去看这三个模块实现进程间通信 共享内存的通信速度…

2024 新年HTML5+Canvas制作3D烟花特效(附源码)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

RK3568 Android 13 系统裁剪

android 13 系统裁剪是个大工程&#xff0c;裁剪也是需要大量的测试&#xff0c;才能保证系统的稳定性&#xff0c;以下是RK官方给出的裁剪方案&#xff0c;有兴趣的可以去看一下&#xff0c;对裁剪不是要求过高的可以根据官方的建议&#xff0c;对系统进行裁剪: Rockchip And…

专科拿到季军:微茫星火,奋起直追!

Datawhale干货 作者&#xff1a;“不啻微茫”团队&#xff0c;季军方案 前 言 大家好&#xff0c;我们是 飞桨星河社区 X 智海Mo平台 AI 大模型创意应用大赛 获奖团队——"不啻微茫"&#xff0c;很荣幸能有机会与大家分享这次比赛经验&#xff0c;我们从零开始的过程…