資源組限制資源使用,能夠對運行在其中的任務執行強制排隊策略,也能夠在子組間分配資源。一個任務屬於一個資源組,消費這個組的資源。除了對排隊任務限制外,當資源組用完資源時,不會致使正在運行的任務失敗,而是讓新的任務排隊。資源組可能有子組或者接收任務,也可能都不。正則表達式
資源組和相關篩選規則由一個插件配置。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" }