资源组限制资源使用,能够对运行在其中的任务执行强制排队策略,也能够在子组间分配资源。一个任务属于一个资源组,消费这个组的资源。除了对排队任务限制外,当资源组用完资源时,不会致使正在运行的任务失败,而是让新的任务排队。资源组可能有子组或者接收任务,也可能都不。正则表达式
资源组和相关筛选规则由一个插件配置。etc/resource-groups.properties这个配置文件有以下内容,内部插件能够读取json配置文件。json
resource-groups.configuration-manager=file resource-groups.config-file=etc/resource_groups.json
修改resource-groups.config-file这个属性的值指向一个json配置文件,这个能够是一个相对路径也能够是一个绝对路径。c#
name(必须):组名称,能够是一个模板并发
maxQueued(必须):排队任务的最大数量,一旦达到这个数量,新的任务将被拒绝分布式
hardConcurrencyLimit(必须):正在运行的任务的数量spa
softMemoryLimit(必须):这个组分布式内存的最大使用量,一旦到达,新任务排队。能够指定为一个绝对值,也能够指定对集群的百分比。插件
softCpuLimit(可选):一个周期里可使用cpu的时间,hardCpuLimit也必须指定code
hardCpuLimit(可选):一个周期里可使用的cpu时间继承
schedulingPolicy(可选):指定排队任务执行的优先级,子组执行任务的优先级,有如下三个选项:ip
schedulingWeight(可选):子组权重,默认为1
jmxExport(可选):若是设置为true,组相关的统计指标被吓到JMX以便监控,默认为false
subGroups(可选):子组列表
user(可选):匹配用户名
source(可选):匹配源头
queryType(可选):匹配任务类型
DESCRIBE
, DESCRIBE INPUT
, DESCRIBE OUTPUT
, and SHOW
类型的任务INSERT
和 CREATE TABLE AS
类型的任务clientTags(可选):tag列表,每一个tag必须在用户提交任务的tag列表里
group(必须):这些任务运行的组
cpuQuotaPeriod(可选):cpu份额被强制执行的时间
选择器顺序处理,匹配的第一个将被使用
提供选择器属性
source名字能够以下设置:
Client tags能够以下设置
例子中的配置以下,这里有多个资源组,一些是模板。模板容许管理员动态的构建资源树。例如,在pipeline_${USER} 组中,${USER}将被扩展为提交任务的用户名。${SOURCE}也支持,将被扩展为提交任务的来源。你能够用自定义变量在source和user正则表达式中
这里定义了四个筛选器,这些任务运行在子组中:
这些筛选器继承了以下策略:
其它的用户:
{ "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" }