Presto资源管理之Resource Groups And Selector

文章目录

  • 前言
  • 资源组配置
  • 选择器规则 Selector Rules
  • 全局配置 Global Properties
  • 选择器属性
  • 配置案例
    • 配置

在这里插入图片描述

prestoDb

前言

资源组对资源使用进行限制,并可以对在其中运行的查询执行队列策略,或将资源分配给子组。查询属于单个资源组,并且从该组(及其祖先)消耗资源。除了排队查询的限制外,当资源组耗尽资源时,不会导致正在运行的查询失败;而是新查询进入排队状态。资源组可以拥有子组或接受查询,但不能两者兼有。

资源组和相关的选择规则是由可插拔的管理器进行配置的。要启用内置的管理器以读取 JSON 配置文件,请添加一个包含以下内容的 etc/resource-groups.properties 文件:

resource-groups.configuration-manager=file
resource-groups.config-file=etc/resource_groups.json

将 resource-groups.config-file 的值更改为指向一个 JSON 配置文件,可以是绝对路径,也可以是相对于 Presto 数据目录的路径

资源组配置

  • name (必填): 组的名称。可以是一个模板(见下文)。

  • maxQueued (必填): 最大排队查询数量。一旦达到此限制,新查询将被拒绝。

  • hardConcurrencyLimit (必填): 最大并发运行查询数量。

  • softMemoryLimit (必填): 在新查询进入排队状态之前,该组可以使用的分布式内存的最大量。可以指定为绝对值(例如 1GB)或者作为集群内存的百分比(例如 10%)。

  • softCpuLimit(可选):在一段时间内(参见cpuQuotaPeriod),该组可使用的最大CPU时间,否则将对最大运行查询数量应用惩罚。还必须指定 hardCpuLimit。

  • schedulingPolicy(可选):指定如何选择排队查询来运行,以及子组如何有资格开始查询。可以是三个值之一:
    ○ 公平(默认):排队查询先入先出,子组必须轮流启动新查询(如果有任何排队的查询)。
    ○ weighted_fair:根据子组的计划选择权重和查询,它们已经在并发运行。运行查询的预期份额基于所有当前符合条件的子组的权重来计算子组。子组选择相对于其共享的并发性最小的来启动下一个查询。
    ○ 加权:排队查询是按优先级随机选择的
    (通过query_priority:doc:session属性</sql/set session>指定)。已选择子组
    以按其schedulingWeight的比例启动新查询。
    ○ query_priority:还必须配置所有子组

  • hardCpuLimit(可选):在一段时间内,该组可使用的最大 CPU 时间。

  • schedulingPolicy(可选):指定如何选择在队列中等待运行的查询,并确定子组何时有资格启动其查询。可以是以下三个值之一:

    • fair(默认):按照先进先出的顺序处理排队的查询,并且子组必须轮流开始新的查询(如果它们有排队的查询)。
    • weighted_fair:根据子组的 schedulingWeight 和其当前并发运行的查询数量选择子组。对于所有当前符合条件的子组,根据其权重计算其预期运行查询的份额。选择相对于其份额具有最少并发性的子组来启动下一个查询。
    • weighted:按照查询的优先级(通过 query_priority:doc:session 属性 </sql/set-session> 指定)按比例选择排队的查询。按照其 schedulingWeight 按比例选择子组来启动新的查询。
    • query_priority:所有子组还必须配置 query_priority。将根据查询的优先级严格选择排队的查询。
  • schedulingWeight(可选):该子组的权重。参见上述说明。默认为1。

  • jmxExport(可选):如果设置为 true,将导出组统计信息到 JMX 以进行监控。默认为 false。

  • perQueryLimits(可选):指定资源组中每个查询可以使用的最大资源量,超过限制将被终止。这些限制不会从父组继承。可以设置三种类型的限制:

    • executionTimeLimit(可选):指定查询可以执行的最长时间的绝对值(例如 1h)。
    • totalMemoryLimit(可选):指定查询可以使用的最大分布式内存的绝对值(例如 1GB)。
    • cpuTimeLimit(可选):指定查询可以使用的最大 CPU 时间的绝对值(例如 1h)。
  • subGroups(可选):子组的列表。

请注意,其中必填项的属性,需要在 JSON 配置文件中进行配置。

选择器规则 Selector Rules

  • user(可选):用于匹配用户名的正则表达式。
  • source(可选):用于匹配来源字符串的正则表达式。
  • queryType(可选):用于匹配提交的查询类型的字符串:
    • DATA_DEFINITION:用于修改/创建/删除模式/表/视图的元数据以及管理预编译语句、权限、会话和事务的查询。
    • DELETE:DELETE 查询。
    • DESCRIBE:DESCRIBE、DESCRIBE INPUT、DESCRIBE OUTPUT 和 SHOW 查询。
    • EXPLAIN:EXPLAIN 查询。
    • INSERT:INSERT 和 CREATE TABLE AS 查询。
    • SELECT:SELECT 查询。
  • clientTags(可选):标签列表。为了匹配,此列表中的每个标签都必须在与查询相关联的客户端提供的标签列表中。
  • group(必需):这些查询将在其中运行的组。

全局配置 Global Properties

  • cpuQuotaPeriod(可选):强制执行 CPU 配额的周期。

选择器按顺序处理,并使用第一个匹配的选择器。

选择器属性

可以按以下方式设置来源名称:

  • CLI:使用 --source 选项。
  • JDBC:在 Connection 实例上设置 ApplicationName 客户端信息属性。

可以按以下方式设置客户端标签:

  • CLI:使用 --client-tags 选项。
  • JDBC:在 Connection 实例上设置 ClientTags 客户端信息属性。

配置案例

在下面的示例配置中,有几个资源组,其中一些是模板。
模板允许管理员动态构建资源组树。例如,在 pipeline_ U S E R 组中, {USER} 组中, USER组中,{USER} 将扩展为提交查询的用户名称。还支持 ${SOURCE},它将扩展为提交查询的来源。您还可以在来源和用户正则表达式中使用自定义命名变量。

这里有四个选择器,定义了哪些查询在哪些资源组中运行:

  • 第一个选择器匹配来自 bob 的查询,并将其放入 admin 组中。
  • 第二个选择器匹配所有来自包含“pipeline”的来源名称的数据定义(DDL)查询,并将其放入 global.data_definition 组中。这有助于减少这类查询的排队时间,因为预期它们会很快。
  • 第三个选择器匹配来自包含“pipeline”的来源名称的查询,并将其放入全局.pipeline 组下动态创建的每个用户 pipeline 组中。
  • 第四个选择器匹配来自 BI 工具的查询(其来源匹配正则表达式“jdbc#(?<tool_name>.*)”),并且具有客户端提供的标签,这些标签是“hi-pri”的超集。这些查询将被放置在全局.pipeline.tools 组下动态创建的子组中。动态子组将基于从来源的正则表达式中提取的名为 tool_name 的命名变量创建。考虑一个具有来源“jdbc#powerfulbi”、用户“kayla”和客户端标签“hipri”和“fast”的查询。此查询将被路由到 global.pipeline.bi-powerfulbi.kayla 资源组。
  • 最后一个选择器是一个全捕获器,将所有尚未匹配的查询放入每个用户 adhoc 组中。

这些选择器一起实施以下策略:

  • 用户“bob”是管理员,可以同时运行最多 50 个查询。查询将根据用户提供的优先级运行。

对于其余用户:

  • 最多可同时运行 100 个查询。
  • 只能运行最多 5 个带有来源“pipeline”的并发 DDL 查询。查询按照先进先出的顺序运行。
  • 非 DDL 查询将在全局.pipeline 组下运行,总并发数为 45,每用户并发数为 5。查询按照先进先出的顺序运行。
  • 对于 BI 工具,每个工具可以同时运行最多 10 个查询,每个用户可以运行最多 3 个查询。如果总需求超过 10 的限制,具有最少运行查询的用户将获得下一个并发插槽。在竞争情况下,此策略实现公平性。
  • 所有剩余查询将被放入类似的全局.adhoc.other 下的每个用户组中。

配置

{
  "rootGroups": [
    {
      "name": "global",
      "softMemoryLimit": "80%",
      "hardConcurrencyLimit": 100,
      "maxQueued": 1000,
      "schedulingPolicy": "weighted",
      "jmxExport": true,
      "subGroups": [
        {
          "name": "data_definition",
          "softMemoryLimit": "10%",
          "hardConcurrencyLimit": 5,
          "maxQueued": 100,
          "schedulingWeight": 1
        },
        {
          "name": "adhoc",
          "softMemoryLimit": "10%",
          "hardConcurrencyLimit": 50,
          "maxQueued": 1,
          "schedulingWeight": 10,
          "subGroups": [
            {
              "name": "other",
              "softMemoryLimit": "10%",
              "hardConcurrencyLimit": 2,
              "maxQueued": 1,
              "schedulingWeight": 10,
              "schedulingPolicy": "weighted_fair",
              "subGroups": [
                {
                  "name": "${USER}",
                  "softMemoryLimit": "10%",
                  "hardConcurrencyLimit": 1,
                  "maxQueued": 100
                }
              ]
            },
            {
              "name": "bi-${tool_name}",
              "softMemoryLimit": "10%",
              "hardConcurrencyLimit": 10,
              "maxQueued": 100,
              "schedulingWeight": 10,
              "schedulingPolicy": "weighted_fair",
              "subGroups": [
                {
                  "name": "${USER}",
                  "softMemoryLimit": "10%",
                  "hardConcurrencyLimit": 3,
                  "maxQueued": 10
                }
              ]
            }
          ]
        },
        {
          "name": "pipeline",
          "softMemoryLimit": "80%",
          "hardConcurrencyLimit": 45,
          "maxQueued": 100,
          "schedulingWeight": 1,
          "jmxExport": true,
          "subGroups": [
            {
              "name": "pipeline_${USER}",
              "softMemoryLimit": "50%",
              "hardConcurrencyLimit": 5,
              "maxQueued": 100
            }
          ]
        }
      ]
    },
    {
      "name": "admin",
      "softMemoryLimit": "100%",
      "hardConcurrencyLimit": 50,
      "maxQueued": 100,
      "schedulingPolicy": "query_priority",
      "jmxExport": true
    }
  ],
  "selectors": [
    {
      "user": "bob",
      "group": "admin"
    },
    {
      "source": ".*pipeline.*",
      "queryType": "DATA_DEFINITION",
      "group": "global.data_definition"
    },
    {
      "source": ".*pipeline.*",
      "group": "global.pipeline.pipeline_${USER}"
    },
    {
      "source": "jdbc#(?<tool_name>.*)",
      "clientTags": ["hipri"],
      "group": "global.adhoc.bi-${tool_name}.${USER}"
    },
    {
      "group": "global.adhoc.other.${USER}"
    }
  ],
  "cpuQuotaPeriod": "1h"
}

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP32建立TCP连接

ESP32建立TCP连接 1.搭建ESP-IDF开发环境 搭建开发环境直接从官网下载即可。 https://docs.espressif.com/projects/esp-idf/zh_CN/v5.1.1/esp32s3/index.html https://dl.espressif.com/dl/esp-idf/?idf4.4 使用官方的下载器下载好&#xff0c;就可以自动安装&#xff0…

Java poi给docx中的关键字标记颜色

Java poi给docx中的关键字标记颜色 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId>&l…

用于图像处理的高斯滤波器 (LoG) 拉普拉斯

一、说明 欢迎来到拉普拉斯和高斯滤波器的拉普拉斯的故事。LoG是先进行高斯处理&#xff0c;继而进行拉普拉斯算子的图像处理算法。用拉普拉斯具有过零功能&#xff0c;实现边缘岭脊提取。 二、LoG算法简述 在这篇博客中&#xff0c;让我们看看拉普拉斯滤波器和高斯滤波器的拉普…

Java 并发编程面试题——重入锁 ReentrantLock

目录 1.ReentrantLock 是什么&#xff1f;2.✨什么是重入锁&#xff1f;ReentrantLock 是如何实现可重入特征的&#xff1f;3.公平锁和非公平锁有什么区别&#xff1f;ReentrantLock 分别是如何实现的&#xff1f;4.✨ReentrantLock 的实现原理是什么&#xff1f;5.为什么 Reen…

Sui与SUMM3R推出NFT增长计划,毕业即提供5万美元资助

为了寻找并支持专注于NFT的高质量初创企业&#xff0c;我们自豪地宣布在Sui上推出NFT增长计划SUMM3R。这是一个为种子期和初创期公司提供的综合计划&#xff0c;该加速器将利用Sui独特的NFT技术&#xff0c;为它们提供无与伦比的知识、连接和资源&#xff0c;以建立可持续的业务…

k8s 部署mqtt —— 筑梦之路

mqtt是干嘛的&#xff0c;网上有很多资料&#xff0c;这里就不再赘述。 --- apiVersion: apps/v1 kind: Deployment metadata:labels:app: mqttname: mqttnamespace: default spec:replicas: 1selector:matchLabels:app: mqttstrategy:rollingUpdate:maxSurge: 25%maxUnavaila…

Leetcode_2:两数相加

题目描述&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff…

远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你

具备一定规模的企业&#xff0c;其IT运维需求普遍会面临设备数量众多、难以统一高效管理、始终存在安全敞口等问题&#xff0c;尤其是针对分部广泛的无人值守设备时&#xff0c;更是如此。 举一个简单的例子&#xff0c;一台位于商圈的无人值守可互动广告机设备&#xff0c;所…

第18章Swing程序设计

Swing程序设计 Swing用于开发桌面窗体程序用于JDK的第二代GUI框架&#xff0c;其功能比JDK第一代GUI框架AWT更为强大&#xff0c;性能更加优良。但因为Swing技术推出时间太早&#xff0c;七性能&#xff0c;开发效率等不及一些其他的留下技术&#xff0c;所以目前市场大多数桌面…

Windows系统下本地MQTT服务器搭建(保姆级教程)

Windows系统下本地MQTT服务器搭建 1.下载并安装emqx服务器 1. 访问Eqmx官网 2. 选中合适的MQTT服务器版本 由于我们使用的是本地部署MQTT服务器&#xff0c;而且只使用基础功能的MQTT服务器功能&#xff0c;所以选中“大规模分布式MQTT消息服务器”即可&#xff0c;如下如图…

【Copilot】登录报错 Extension activation failed: “No auth flow succeeded.“(VSCode)

问题描述 Visual Studio Code 登录 GitHub Copilot 插件报错。 在浏览器中成功授权 GitHub 账户&#xff0c;返回 VSCode 后仍然报错。 [ERROR] [default] [2023-11-06T12:34:56.185Z] Extension activation failed: "No auth flow succeeded."原因分析 网络环境问…

mongo实际业务场景实战

业务场景 有四个业务信息,分别是适用部门、适用岗位、适用职级、适用专业。 1.适用部门有三个层级类似D001表示一级部门、D001002表示二级部门、D001002001表示三级部门,ALL表示所有部门。 2.适用岗位有岗位A、岗位B、ALL等,ALL表示适用所有岗位。 3.适用职级有M-1,M-2、AL…

csharp写一个招聘信息采集的程序

csharp爬虫是一种用于自动化抓取网页内容的程序。它可以通过模拟人类浏览器的行为&#xff0c;自动访问网站并抓取所需的数据。csharp爬虫可以用于各种场景&#xff0c;例如数据挖掘、搜索引擎优化、竞争情报等。但是&#xff0c;使用csharp爬虫需要注意一些问题&#xff0c;例…

再获5G RedCap能力认证!宏电5G RedCap工业智能网关通过中国联通5G物联网OPENLAB开放实验室测试验证

​近日&#xff0c;中国联通5G物联网OPENLAB开放实验室携手宏电股份完成5G RedCap工业智能网关端到端的测试验证&#xff0c;并颁发OPENLAB实验室面向RedCap终端的认证证书&#xff0c;为RedCap产业规模推广、全行业赋能打下坚实基础。 中国联通5G物联网OPENLAB开放实验室是中国…

【kylin】使用nmtui软件配置网桥

文章目录 一、什么是网桥二、如何配置网桥域名解析失败 一、什么是网桥 网桥也叫桥接器&#xff0c;是连接两个局域网的一种存储/转发设备&#xff0c;它能将一个大的LAN分割为多个网段&#xff0c;或将两个以上的LAN互联为一个逻辑LAN&#xff0c;使LAN上的所有用户都可访问服…

Selenium切换窗口句柄及调用Chrome浏览器

一. 调用Chrome浏览器 首先,假设通过Firefox()浏览器定向爬取首页导航栏信息,审查元素代码如下图所示,在div class="menu"路径的ul、li、a下,同时可以定位ul class="clearfix"。 # coding=utf-8 import os from selenium import webdriver #…

react antd message多条数据展示样式

最终效果&#xff1a; 前言&#xff1a; 平时我们经常用到message来做一些错误提示&#xff0c;最常见的就是单行提示。如下图&#xff1a; 实现代码&#xff1a; message.error(This is an error message)多行动态message实现 参考文献&#xff1a;antd message 链接地址&a…

java版本转换小工具

工作之余写了一个转换小工具&#xff0c;具有以下功能&#xff1a; 时间戳转换Base64编码/解码URL编码/解码JSON格式化 时间戳转换 package org.binbin.container.panel;import javax.swing.*; import java.awt.*; import java.text.DateFormat; import java.text.SimpleDat…

【verilog】verilog语法刷题知识点总结

verilog语法刷题知识点总结 1.状态机2.任务和函数的区别3.case&#xff0c;casez和casex4.随机数产生关键字5.运算符优先级6.特殊运算符(1)移位运算符(2)等式运算符(3)动态位宽截取运算符 7.testbench知识点 1.状态机 &#xff08;1&#xff09;三段式状态机的组成&#xff1a…

Vue.Draggable 踩坑:add 事件与 change 事件中 newIndex 字段不同之谜

背景 最近在弄自定义表单&#xff0c;需要拖动组件进行表单设计&#xff0c;所以用到了 Vue.Draggable(中文文档)。Vue.Draggable 是一款基于 Sortable.js 实现的 vue 拖拽插件&#xff0c;文档挺简单的&#xff0c;用起来也方便&#xff0c;但没想到接下来给我遇到了灵异事件……