Presto资源管理之Resource Groups And Selector

news2025/1/14 20:30:03

文章目录

  • 前言
  • 资源组配置
  • 选择器规则 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.coloradmin.cn/o/1192345.html

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

相关文章

uniapp+vue3+ts+vite+echarts开发图表类小程序,将echarts导入项目使用的详细步骤,耗时一天终于弄好了

想在uniapp和vue3环境中使用echarts是一件相当前卫的事情&#xff0c;官方适配的还不是很好&#xff0c;echarts的使用插件写的是有些不太清晰的&#xff0c;这里我花费了一天的时间&#xff0c;终于将这个使用步骤搞清楚了&#xff0c;并且建了一个仓库&#xff0c;大家可以直…

工业自动化与物联网技术的融合:开启智能制造新时代

工业自动化与物联网技术的融合&#xff1a;开启智能制造新时代 随着科技的飞速发展&#xff0c;工业自动化与物联网技术的融合已经成为现代制造业的重要发展趋势。本文将分析工业自动化与物联网技术的关系、应用场景以及面临的挑战&#xff0c;并展望未来的发展趋势。 一、工业…

基于element-plus定义表格行内编辑配置化

文章目录 前言一、新增table组件二、使用步骤 前言 在 基于element-plus定义表单配置化 基础上&#xff0c;封装个Element-plus的table表格 由于表格不同于form组件&#xff0c;需自定义校验器&#xff0c;以下组件配置了单个校验&#xff0c;及提交统一校验方法&#xff0c;且…

【vue会员管理系统】篇六之退出系统功能

一、效果图 点击之后跳转到登陆界面 二、实现步骤 2.1Easy Mock新增接口 打开Easy Mock新建接口 方法:post URL:user/logout 描述&#xff1a;退出系统 2.2新增api 在api/login.js下添加以下代码 export function logout(token) {return request({url: /user/logout,method:…

【2021研电赛】管道巡检机器人

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力&#xff0c;更有重磅电子产品免费领取! 团队介绍 参赛单位&#xff1a;广西科技大学 参赛队伍&#xff1a;OMEN 参赛队员&#xff1a;吴海晨 陈永亮 乔亚坤 第1章 项目意义 1.1 研究背景及意义 据媒体报道&am…

NIO 笔记(二)Netty框架专题

【笔记来自&#xff1a;it白马】 Netty框架 前面我们学习了Java为我们提供的NIO框架&#xff0c;提供使用NIO提供的三大组件&#xff0c;我们就可以编写更加高性能的客户端/服务端网络程序了&#xff0c;甚至还可以自行规定一种通信协议进行通信。 NIO框架存在的问题 但是之…

全国消费者行为和购买力的大数据可视化动态大屏【可视化项目案例-01】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…

瑞芯微:基于RK3568的深度估计模型部署

根据单张图像估计深度信息是计算机视觉领域的经典问题&#xff0c;也是一项具有挑战的难题。由于单目图像的尺度不确定&#xff0c;传统方法无法计算深度值。 随着深度学习技术的发展&#xff0c;该范式已经成为了估计单目图像的深度信息的一种解决方案。早期的深度估计方法大多…

InSAR数据处理、地形三维重建、形变信息提取、监测丨GMTSAR合成孔径雷达干涉测量丨GNSS、北斗高精度数据处理

目录 ①合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测等应用 ②基于GMTSAR合成孔径雷达干涉测量InSAR数据处理、形变信息提取与分析 ③GNSS、北斗高精度数据处理暨新版GAMITGLOBK软件应用 更多应用 ①合成孔径雷达干涉测量InSAR数据处理、地形三维…

sCrypt 现在支持 Ordinals 了

比特币社区对 1Sat Ordinals 的接受度正在迅速增加&#xff0c;已有超过 4800 万个铭文被铸造&#xff0c;这一新创新令人兴奋不已。 尽管令人兴奋&#xff0c;但 Ordinals 铭文的工具仍然不发达&#xff0c;这使得使用 Ordinals 进行构建具有挑战性。 更具体地说&#xff0c;缺…

智慧城市照明为城市节能降耗提供支持继电器开关钡铼S270

智慧城市照明&#xff1a;为城市节能降耗提供支持——以钡铼技术S270继电器开关为例 随着城市化进程的加速&#xff0c;城市照明系统的需求也日益增长。与此同时&#xff0c;能源消耗和环境污染问题日益严重&#xff0c;使得城市照明的节能减排成为重要议题。智慧城市照明系统…

MapBox免Token离线部署全套成熟方案

看了网上的一些Mapbox离线部署使用的文章,有些讲述的不是很全面,有些简直就是跟风胡说。 这篇文章我们来给大家提供一个完整的成熟的mapbox-gl离线部署方案。 首先我们要搞清楚为什么mapbox-gl需要申请token才能使用,其实并不是框架本身的源码不想让大家用,否则mapbox也不…

微软宣布称Windows 再不会偷偷下载更新文件,真的吗?

导读时钟拨回到2015年&#xff0c;微软刚刚推出Windows 10操作系统时&#xff0c;一些Windows 7用户首次在线Update的升级文件大小居然高达6~8GB。这件事引发了大量的不满&#xff0c;一些按照流量计费和宽带不给力的用户怨言极为严重&#xff0c;其中德国用户把此事闹上了当地…

使用小程序插件【用户信息功能页】获取用户昵称、头像、openid

摘要 因为获取用户信息的接口 wx.getUserInfo 存在滥用&#xff0c;使用不规范等原因&#xff0c;微信官方已经将这个接口权限回收&#xff0c;改为用户信息填写&#xff0c;即引导用户主动填写微信昵称和上传头像。这种做法确实是麻烦了点。 但是微信小程序插件&#xff0c;…

LeetCode算法题解(回溯、难点)|LeetCode51. N 皇后

LeetCode51. N 皇后 题目链接&#xff1a;51. N 皇后 题目描述&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。…

19.8 Boost Asio 异或加密传输

异或加密是一种对称加密算法&#xff0c;通常用于加密二进制数据。异或操作的本质是对两个二进制数字进行比较&#xff0c;如果它们相同则返回0&#xff0c;如果不同则返回1。异或加密使用一把密钥将明文与密文进行异或运算&#xff0c;从而产生密文。同时&#xff0c;使用相同…

大厂面试题-MySQL中的RR隔离级别,到底有没有解决幻读问题?

就MySQL中的RR(Repeatable Reads)事务隔离级别&#xff0c;到底有没有解决幻读问题发起了激烈的讨论。 一部分人说有&#xff0c;一部分人说没有。 结论&#xff0c;MySQL中的RR事务隔离级别&#xff0c;在特定的情况下会出现幻读的问题。 所谓的幻读&#xff0c;表示在同一…

git拉取项目所有分支

1、执行git clone &#xff0c;随便拉取一个分支 2、进入成功拉取去的分支生成的文件夹中&#xff0c;执行下面的命令即可完成拉拉取&#xff0c;如下图所示 for branch in git branch -a | grep remotes | grep -v HEAD | grep -v master ; dogit branch --track ${branch#r…

【JVM】类加载器 Bootstrap、Extension、Application、User Define

以下环境为 jdk1.8 两大类 分类成员语言继承关系引导类加载器bootstrap 引导类加载器C/C无自定义类加载器extension 拓展类加载器、application 系统/应用类加载器、user define 用户自定义类加载器Java继承于 java.lang.ClassLoader 四小类 Bootstrap 引导类加载器 负责加…

js实现向上、向下、向左、向右无缝滚动

向左滚动 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, ini…