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

news2025/3/13 18:59:27

在这里插入图片描述

前言

自 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.coloradmin.cn/o/1427253.html

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

相关文章

如何使用 Supabase Auth 在您的应用程序中设置身份验证

在本文中&#xff0c;您将学习基本的关键概念&#xff0c;这些概念将帮助您掌握身份验证和授权的工作原理。 您将首先了解什么是身份验证和授权&#xff0c;然后了解如何使用 Supabase auth 在应用程序中实现身份验证。 &#xff08;本文内容参考&#xff1a;java567.com&…

2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题--完善程序题

2020 CCF认证第一轮&#xff08;CSP-J&#xff09;真题 三、完善程序题 第一题 质因数分解 给出正整数n&#xff0c;请输出将n质因数分解的结果&#xff0c;结果从小 到大输出。 例如&#xff1a;输入n120程序应该输出2 2 2 3 5,表示1202 X 2 X 2 X 3 X 5输入保2≤n≤10^9提…

PostGIS空间数据库之空间数据融合实践

目录 前言 一、ST_Union()简介 1、方法说明 2、参数介绍 二、ST_Collect()简介 1、方法说明 2、参数介绍 3、两者区别 三、实际案例实践 1、不重叠融合 2、空间重叠融合 总结 前言 众所周知&#xff0c;熟悉GIS桌面软件的同学一定都知道&#xff0c;想要对空…

跟着pink老师前端入门教程-day13

品优购案例 一、品优购项目规划 1. 品优购项目整体介绍 项目名称&#xff1a;品优购 项目描述&#xff1a;品优购是一个电商网站&#xff0c;我们要完成 PC 端首页、列表页、注册页面的制作 2. 品优购项目学习目的 1. 电商类网站比较综合&#xff0c;里面需要大量的布…

【Linux C | I/O模型】Unix / Linux系统的5种IO模型 | 图文详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

oracle 19c上安装样例数据库

样例schema的分类 HR: Human Resources OE: Order Entry PM: Product Media IX: Information Exchange SH: Sales History BI: Business Intelligence 安装样例数据库 1&#xff1a;HR的安装&#xff0c;通过dbca时候 2&#xff1a;HR的安装&#xff0c;安装完数据库后&#…

面试经典 150 题 -- 矩阵 (总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 36 . 有效的数独 模拟 : 用数组模拟哈希表来判断对应的行&#xff0c;列和当前元素所在的3*3方格中是否重复出现&#xff0c;是的话&#xff0c;直接return false…

vue3前端开发,element-plus前端框架探秘:scope对象

vue3前端开发&#xff0c;element-plus前端框架探秘:scope对象&#xff01;我们经常需要对当前行的数据进行操作&#xff0c;比如增加&#xff0c;删除&#xff0c;编辑等&#xff0c;为此我们需要传递当前行所对应的唯一主键,通常情况下&#xff0c;当前行对应的业务主键是id属…

花瓣网美女图片爬取

爬虫基础案例01 花瓣网美女图片 网站url&#xff1a;https://huaban.com 图片爬取 import requests import json import os res requests.get(url "https://api.huaban.com/search/file?text%E7%BE%8E%E5%A5%B3&sortall&limit40&page1&positionsear…

【Linux-crontab】Linux 系统 crontab 执行定时任务

【Linux-crontab】Linux 系统 crontab 执行定时任务 1&#xff09;crontab简介2&#xff09;操作步骤3&#xff09;知识扩展4&#xff09;常见的分时任务格式 1&#xff09;crontab简介 crond 是 Linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程&#xff0…

专有D区震撼上市,高性价比的稀缺大机型谁不爱?

有时候&#xff0c;你可能想要一台或数台大机器&#xff1a; 核数多点&#xff0c;100不算多吧 内存大点&#xff0c;2T、4T的 主频高点&#xff0c;3.5GHz 要么三合一&#xff0c;既要又要还要&#xff1f; 那么问题来了&#xff1a; 这些既多核心&#xff0c;又大内存&a…

初学者必会的100个Python编程代码,入门全套资料都给朋友们整理好了,文末免费领!

我记得刚开始接触编程的时候&#xff0c;觉得太难了。 也很好奇&#xff0c;写代码的那些人也太厉害了吧&#xff1f;全是英文的&#xff0c;他们的英文水平一定很好吧&#xff1f; 他们是怎么记住这么多代码格式的&#xff1f;而且错了一个标点符号&#xff0c;整个程序都会…

Unity SRP 管线【第七讲:URP LOD实现以及Reflections反射探针】

目录 一、URP LOD 组件1、LOD Group的使用2、LOD切换原理Cross Fade(淡入淡出)模式Animated Cross-Fading如果未设置Clip&#xff0c;并且Fade Transition Width不为0LOD物体烘培 SpeedTree 模式 二、反射探针1. 获取反射探针数据2. 环境光照明 IBL3. 反射探针&#xff08;Refl…

创业公司的项目经理,如何有效争取股权激励

摘要&#xff1a;PM圆桌派&#xff0c;思考要快&#xff0c;行动要快。希赛聚集了一群有追求的PM校友&#xff0c;在一起谈天说地。在这里&#xff0c;我们无问对错&#xff0c;不论输赢&#xff0c;不分高下&#xff0c;每周四&#xff0c;一期一个话题battle&#xff0c;将真…

LeetCode--189

189. 轮转数组 提示 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转…

ele-h5项目使用vue3+vite开发:第一节、页面头部实现

实现页面 确认需求 顶部提示栏搜索框搜索提示 normalize.css:处理不同浏览器的默认样式 安装 npm i normalize.css 使用 src\App.vue<style scoped> import normalize.css;#app {/** 让字体抗锯齿&#xff0c;看起来更清晰 */-webkit-font-smoothing: antialiased;-moz-o…

面试中问到的算法题。————目录树生成

前言 我在面试中遇到了算法题&#xff0c;也是我第一次面试&#xff0c;也不知道是太紧张了还是太久没刷算法题了&#xff0c;感觉压有点懵的状态&#xff0c;所以当时面试的时候没有做出来或者说只做了一半没有做完。 面试完成后&#xff0c;我又重新审视了一下题目&#xff…

【送书福利-第三十一期】《区块链安全理论与实践(安全技术经典译丛)》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

Xline Jepsen 测试分析

Table of Contents 摘要背景介绍 XlineJepsen CheckersNemesisJepsen 测试设计 数据一致性 SerializabilityLinearizabilityStrict SerializabilityJepsen etcd test RegistersSetsAppendWRJepsen Xline test测试结果分析 测试结果异步落盘Revision生成 背景旧的实现分析1-RTT…

九、Qt图表使用

一、QCharts概述 Qt图表提供了&#xff1a;折线图、样条曲线图、面积图、散点图、条形图、饼图、方块胡须图、蜡烛图、极坐标图。1、QChart介绍 Qt Charts基于Qt的QGraphics View架构&#xff0c;其核心组件是QChartView和QChartQChartView是显示图标的视图&#xff0c;基类为…