大数据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.mzph.cn/news/661635.shtml

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

相关文章

Android配置GitLab CI/CD持续集成,Shell版本的gitlab-runner,FastLane执行,上传蒲公英

mac环境下&#xff0c; 首选需要安装gitlab-runner和fastlane brew install gitlab-runner brew install fastlane 安装完成&#xff0c;来到我们在gitlab下新建的Android项目&#xff0c;我们开始创建gitlab-runner 1、创建runner 点开runner&#xff0c;点击新建runner …

自然语言nlp学习四

5-5 BMTrain--ZeRO_哔哩哔哩_bilibili 5-6 BMTrain--Pipeline Parallel (流水线并行)_哔哩哔哩_bilibili 5-12 BMCook--背景介绍_哔哩哔哩_bilibili 5-20 BMInf--背景介绍_哔哩哔哩_bilibili 6-7 机器问答--QA介绍_哔哩哔哩_bilibili 6-8 机器问答--阅读理解_哔哩哔哩_bilibili…

常用API1 ---Math

包含用于执行基本数学运算的方法&#xff0c;如初等指数、对数、平方根和三角函数。 常用方法&#xff1a; package MyApi.a01mathdemo01;public class MathDemo01 {public static void main(String[] args) {//abs 获取参数的绝对值System.out.println(Math.abs(-88));System…

江科大stm32学习笔记10——对射式红外传感器

一、接线 上电之后可以看到对射式红外传感器亮两个灯&#xff0c;如果此时用挡光片挡住两个黑色方块中间的部分&#xff0c;则只亮一个灯。 二、代码 将4-1的工程文件夹复制粘贴一份&#xff0c;重命名为“5-1 对射式红外传感器计次”&#xff0c;打开keil&#xff0c;右键添…

认识 SYN Flood 攻击

文章目录 1.什么是 SYN Flood 攻击&#xff1f;2.半连接与全连接队列3.如何防范 SYN Flood 攻击&#xff1f;参考文献 1.什么是 SYN Flood 攻击&#xff1f; SYN Flood 是互联网上最原始、最经典的 DDoS&#xff08;Distributed Denial of Service&#xff09;攻击之一。 SYN…

[C#][opencvsharp]opencvsharp sift和surf特征点匹配

SIFT特征和SURF特征比较 SIFT特征基本介绍 SIFT(Scale-Invariant Feature Transform)特征检测关键特征&#xff1a; 建立尺度空间&#xff0c;寻找极值关键点定位&#xff08;寻找关键点准确位置与删除弱边缘&#xff09;关键点方向指定关键点描述子 建立尺度空间&#xff0…

SpringBoot RestTemplate 设置挡板

项目结构 代码 BaffleConfig /*** Description 记录配置信息* Author wjx* Date 2024/2/1 14:47**/ public interface BaffleConfig {// 是否开启挡板的开关public static boolean SWITCH true;// 文件根目录public static String ROOT_PATH "D:\\TIS\\mock";// …

最新2024如何解决谷歌浏览器Chrome谷歌翻译无法使用问题

快速恢复谷歌浏览器一键翻译功能在Chrome 中安装好【翻译】插件 Macbook 操作步骤&#xff1a; 1点击“前往”&#xff0c;打开“前往文件夹” 2 在对话框中输入“/etc” 囝找到“hosts”文件&#xff0c;复制粘贴到桌面 3 在复制的文件最后新起一行&#xff0c;输入并保存&am…

VUE3+TS使用OpenSeadragon学习之旅,实现多图片切换效果

1.官方网站&#xff1a;OpenSeadragon 2.使用npm下载插件&#xff1a;npm install openseadragon 3.在 index.html文件引入资源 <link rel"stylesheet" href"node_modules/openseadragon/build/openseadragon/openseadragon.css" /><script src…

消息队列的应用场景

消息队列的应用场景 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ&#xff0c;RabbitMQ&#xff0c;Ze…

用户界面(UI)、用户体验(UE)和用户体验(UX)的差异

对一个应用程序而言&#xff0c;UX/UE (user experience) 设计和 UI (user interface) 设计非常重要。UX设计包括可视化布局、信息结构、可用性、图形、互动等多个方面。UI设计也属于UX范畴。正是因为三者在一定程度上具有重叠的工作内容&#xff0c;很多从业多年的设计师都分不…

ffmpeg合成mp3音频,解决音频属性不一致问题

1. 需求&#xff0c;amr转成mp3&#xff0c;再将此mp3和其他mp3合成 2. 问题&#xff1a;拼接后的第一段音频可以播放&#xff0c;第二段自动跳过&#xff0c;无法播放。 3. 解决&#xff1a; 3.1 查看各文件属性 # 查看amr转为mp3文件的属性&#xff1a;ffprobe 文件名&am…

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(五十一)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

C语言实现12种排序算法

1.冒泡排序 思路&#xff1a;比较相邻的两个数字&#xff0c;如果前一个数字大&#xff0c;那么就交换两个数字&#xff0c;直到有序。 时间复杂度&#xff1a;O(n^2)&#xff0c;稳定性&#xff1a;这是一种稳定的算法。 代码实现&#xff1a; void bubble_sort(int arr[],…

Redis的bitmap使用不当,我内存爆了

背景 最近发现Redis的内存持续暴涨&#xff0c; 涨的有点吓人&#xff0c;机器都快扛不住了&#xff0c;不得不进行Redis内存可视化分析&#xff0c;发现大量的String类型的大key 经分析&#xff0c;最近上线了页面UV的统计&#xff0c;那目前如何做的呢&#xff1f; 通过访…

Redux状态管理(运行机制及实例)

背景&#xff1a; JavaScript需要管理的状态越来越多&#xff0c;越来越复杂;这些状态包括服务器返回的数据、缓存数据、用户操作产生的数据等等&#xff0c;也包括一些UI的状态&#xff0c;比如某些元素是否被选中&#xff0c;是否显示加载动效&#xff0c;当前分页。 状态之…

浅谈信号完整性分析

什么是信号完整性?在过去的低速时代,电平跳变时信号上升时间较长,通常几个 ns。器件间的互连线不至于影响电路的功能,没必要关心信号完整性问题。但在今天的高速时代,随着 IC输出开关速度的提高,很多都在皮秒级,不管信号周期如何,几乎所有设计都遇到了信号完整性问题。…

【ACL 2023】Enhancing Document-level EAE with Contextual Clues and Role Relevance

【ACL 2023】Enhancing Document-level Event Argument Extraction with Contextual Clues and Role Relevance 论文&#xff1a;https://aclanthology.org/2023.findings-acl.817/ 代码&#xff1a;https://github.com/LWL-cpu/SCPRG-master Abstract 与句子级推理相比&…

ZigBee学习——在官方例程基础实现点灯

IAR版本 :10.10.1 Z-stack版本 :3.0.2 文章目录 一、买的板子原理图二、实现过程2.1 重定义LED的物理映射(HAL层)2.2 创建LED事件(应用层)2.2.1 定义用户事件2.2.2 修改zclGenericApp_event_loop() 2.3 触发事件 一、买的板子原理图 二、实现过程 2.1 重定义LED的物理映射(HAL…

服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

知识点&#xff1a; 1、端口协议-弱口令&未授权&攻击方式等 2、桌面应用-社交类&文档类&工具类等 章节点&#xff1a; 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&…