Presto资源管理之Resource Groups And Selector

2023-11-10 15:20

本文主要是介绍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"
}

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

这篇关于Presto资源管理之Resource Groups And Selector的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383559

相关文章

【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、什么是上下文管理器?二、上下文管理器的实现三、使用内置上下文管理器四、使用`contextlib`模块五、总结 前言 在Python编程中,资源管理是一个重要的主题,尤其是在处理文件、网络连接和数据库

java读取resource/通过文件名获取文件类型

java读取resource java读取resource目录下文件的方法: 借助Guava库的Resource类 Resources.getResource("test.txt") 通过文件名获取文件类型 mongodb java

理解C++全局对象析构顺序与 IPC 资源管理:避免 coredump

文章目录 0. 概述1. 问题背景2. 问题分析3. 解决方案:手动释放资源4. 深入剖析:为什么手动调用 `reset()` 有效?5. 延伸思考:如何避免全局对象带来的问题?6. 总结 0. 概述 在编写 C++ 程序时,使用全局或静态对象有时可能会导致不可预期的崩溃(如 coredump)。这类崩溃通常源于对象的析构顺序、资源的管理方式,以及底层资源(如 IPC 通道或共

访问controller404:The origin server did not find a current representation for the target resource

ider build->rebuild project。Rebuild:对选定的目标(Project),进行强制性编译,不管目标是否是被修改过。由于 Rebuild 的目标只有 Project,所以 Rebuild 每次花的时间会比较长。 参考:资料

mybatis错误——java.io.IOException Could not find resource comxxxxxxMapper.xml

在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang.RuntimeException: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause:

业务资源管理模式语言09

示例: 图13 表示了QuoteTheMaintenance 模式的一个实例,在汽车修理店系统中,其中“Vehicle”扮演“Resource”,“Repair Quotation”扮演“Maintenance Quotation”,“Repair shop branch”扮演“Source-party”,“Customer”扮演“Destiny-Party”。 图13——QuoteThe

Winsock服务器内存资源管理

一般来讲, 在服务器上,如果有足够的资源,Winsock server,理论上可以支持成千的并发连接。而现实是,我们没有足够的资源可供使用,分配。本文主要来讨论一下内存资源之于Winsock server开发的重要性。 一)基本概念。 -> Pages,Locked Pages.         在现代操作系统中,内存管理会把主存(RAM)分成Pages来管理。 Paging(或者swap

android xml之Drawable 篇 --------shape和selector和layer-list的

转自 : http://blog.csdn.net/brokge/article/details/9713041 <shape>和<selector>在Android UI设计中经常用到。比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape>和<selector>。 可以这样说,<shape>和<selector>在美化控件中的作用是至关重要。 在

【vue使用Sass报错】启动项目报错 Syntax Error: SassError: expected selector

出现的问题 新项目启动的时候,提示: Syntax Error: SassError: expected selector 看了一下发现是sass使用样式穿透/deep/报的错 /deep/其实是已经过期的写法,某个版本之后就不支持了 但是我同事并没有出现同样的问题,不知道是为啥,也有可能是电脑(mac)的原因 解决办法 将 /deep/更换为::v-deep 但是这个项目是多人协作的,有