扩容规则执行时预设资源添加原则
每个集群最多可配置10种伸缩规格,扩容规则触发时将根据规格优先级进行扩容,当高优先级规格数量不足时,由次优先级资源规格混合高优先级规格进行扩容补充计算资源(按量计费和竞价实例执行顺序相同)。
当资源充足时:1>2>3>4>5
例如
预设5种规格且资源充足,当扩容规则触发需要扩容10台节点时,按照顺序规格1扩容10台节点,其余预设规格不选择。
当资源不足时:1+2>1+2+3>1+2+3+4>1+2+3+4+5
例如
预设规格1有8台节点,规格2有4台节点,规格3有3台节点,当扩容规则触发需要扩容13台节点时,按照顺序规格1扩容8台节点,规格2扩容4台,规格3扩容1台节点。
当资源规格无货时,假设规格2无货:1+3>1+3+4>1+3+4+5
例如
预设规格1有8台节点,规格2没货没有节点,规格3有3台节点,当扩容规则触发需要扩容10台节点时,按照顺序规格1扩容8台节点,规格2不选,规格3扩容2台节点。
预设规格1有8台节点,其余预设规格均无货,当扩容规则触发,需要扩容10台节点时,扩容规则将会触发,并扩容规格1扩容8台节点,扩容部分成功。
扩容方式:支持选择:节点、内存、核数三种方式;三种方式仅支持整数非0值输入。当方式选择核数和内存时,扩容保证最大算力进行扩容节点数量换算。
例如
按核数扩容,设置扩容10核,但规格按优先顺序扩容规格为8核时,规则触发将扩容2台8核节点。
按内存扩容,设置扩容20G,但规格按优先顺序扩容规格为16G时,规则触发将扩容2台16G节点。
缩容规则执行时弹性节点缩容原则
自动伸缩功能扩容出的弹性节点,当缩容规则触发时:按时间缩容,将优先缩容空闲节点,根据“先扩后缩,后扩先缩”原则执行,不足缩容数量时,再选择缩容运行 container 的节点;按负载缩容,优先缩容部署了负载指标所属服务的节点,且优先缩容空闲节点,根据“先扩后缩,后扩先缩”原则执行,不足缩容数量时,再选择缩容运行 container 的节点。非弹性节点将不受缩容规则触发而触发缩容动作,非弹性节点仅支持手动缩容。
注意
定时销毁节点将不受“先扩后缩,后扩先缩”和集群“最小节点数”原则约束;时间到达即可执行缩容,且默认优雅缩容30分钟范围。
空闲节点的判断依据为5分钟内无正在运行的 container。
按负载缩容,假设节点创建时间从早到晚A>B>C>D>E。
例如:
设置 YARN 负载指标缩容,缩容5台节点,C、D、E部署了 YARN 组件,且D、E正在运行 container,当缩容规则触发时,缩容顺序为:C>E>D>B>A。
设置 Trino 负载指标缩容,缩容5台节点,C、D、E部署了 Trino 组件,且D、B正在运行 container,当缩容规则触发时,缩容顺序为:E>C>D>A>B。
按时间缩容,假设节点创建时间从早到晚A>B>C>D>E。
例如:
按节点缩容,设置缩容5台节点,D、E正在运行 container,当缩容规则触发时,缩容顺序为:C>B>A>E>D。
缩容方式:支持选择:节点、内存、核数三种方式;三种方式仅支持整数非0值输入当方式选择核数和内存时,缩容保证业务正常按最小台数进行缩容节点数量换算,节点无任务运行时按时间倒序缩容且保证最少一台缩容。
例如
按核数缩容,设置缩容20核,缩容规则触发时,按时间倒序集群存在弹性节点分别为3台8核16G节点和2台4核8G节点,将成功缩容2台8核16G节点。
按内存缩容,设置缩容30G,缩容规则触发时,按时间倒序集群存在弹性节点分别为3台8核16G节点和2台4核8G节点,将成功缩容1台8核16G节点。
伸缩规则触发顺序执行原则
支持时间伸缩和负载伸缩混合弹性规则设置,规则触发遵循“先触发先执行,同时触发根据规则优先顺序执行”;规则状态用于标记规则是否开启,默认为开启状态,当不需要规则运行但仍想保留规则配置时可将规则状态设置为关闭。
仅按负载进行伸缩设置
1.1 遵循“先触发先执行,同时触发根据规则优先顺序执行”,如:1>2>3>4>5。
1.2 单条负载伸缩规则支持设置多指标,当所有指标都符合条件时触发规则。
1.3 支持指定时间段内监控集群负载变化,设置负载伸缩生效。
仅按时间进行伸缩设置
1.1 遵循“先触发先执行,同时触发根据规则优先顺序执行”,如:1>2>3>4>5。
1.2 重复执行规则,若规则到期后,规则状态将失效并处于关闭状态;到期前将有告警通知,详情请参见 告警配置。
按负载和时间混合进行伸缩设置
遵循“先触发先执行,同时触发根据规则优先顺序执行”,如:1>2>3>4>5。
队列负载指标对应关系
负载类型 | 类别 | 维度 | EMR 自动伸缩指标 | 指标含义 |
YARN | AvailableVCores | root | AvailableVCores#root | Root 队列可用虚拟核数的数量 |
| | root.default | AvailableVCores#root.default | root.default 队列可用虚拟核数的数量 |
| | 自定义子队列 | 如:AvailableVCores#root.test | root.test 队列可用虚拟核数的数量 |
| PendingVCores | root | PendingVCores#root | Root 队列等待可用的虚拟核数 |
| | root.default | PendingVCores#root.default | root.default 队列等待可用的虚拟核数 |
| | 自定义子队列 | 如:PendingVCores#root.test | root.test 队列等待可用的虚拟核数 |
| AvailableMB | root | AvailableMB#root | Root 队列可用内存数量(MB) |
| | root.default | AvailableMB#root.default | root.default 队列可用内存数量(MB) |
| | 自定义子队列 | 如:AvailableMB#root.test | root.test 队列可用内存数量(MB) |
| PendingMB | root | PendingMB#root | Root 队列等待可用的内存数量(MB) |
| | root.default | PendingMB#root.default | root.default 队列等待可用的内存数量(MB) |
| | 自定义子队列 | 如:PendingMB#root.test | root.test 队列等待可用的内存数量(MB) |
| AvailableMemPercentage | 集群 | AvailableMemPercentage | 剩余内存的百分比 |
| ContainerPendingRatio | 集群 | ContainerPendingRatio | 待分配的容器数与已分配的容器数的比率 |
| AppsRunning | root | AppsRunning#root | Root 队列运行中的任务数 |
| | root.default | AppsRunning#root.default | root.default 队列运行中的任务数 |
| | 自定义子队列 | 如:AppsRunning#root.test | root.test 队列运行中的任务数 |
| AppsPending | root | AppsPending#root | Root 队列挂起的任务数 |
| | root.default | AppsPending#root.default | root.default 队列挂起的任务数 |
| | 自定义子队列 | 如:AppsPending#root.test | root.test 队列挂起的任务数 |
| PendingContainers | root | PendingContainers#root | Root 队列待分配的容器数 |
| | root.default | PendingContainers#root.default | root.default 队列待分配的容器数 |
| | 自定义子队列 | 如:PendingContainers#root.test | root.test 队列待分配的容器数 |
| AllocatedMB | root | AllocatedMB#root | Root 队列已分配的内存量 |
| | root.default | AllocatedMB#root.default | root.default 队列已分配的内存量 |
| | 自定义子队列 | 如:AllocatedMB#root.test | root.test 队列已分配的内存量 |
| AllocatedVCores | root | AllocatedVCores#root | Root 队列已分配的虚拟核数 |
| | root.default | AllocatedVCores#root.default | root.default 队列已分配的虚拟核数 |
| | 自定义子队列 | 如:AllocatedVCores#root.test | root.test 队列已分配的虚拟核数 |
| ReservedVCores | root | ReservedVCores#root | Root 队列预留的虚拟核数 |
| | root.default | ReservedVCores#root.default | root.default 队列预留的虚拟核数 |
| | 自定义子队列 | 如:ReservedVCores#root.test | root.test 队列预留的虚拟核数 |
| AllocatedContainers | root | AllocatedContainers#root | Root 队列已分配的容器数 |
| | root.default | AllocatedContainers#root.default | root.default 队列已分配的容器数 |
| | 自定义子队列 | 如:AllocatedContainers#root.test | root.test 队列已分配的容器数 |
| ReservedMB | root | ReservedMB#root | Root 队列预留的内存量 |
| | root.default | ReservedMB#root.default | root.default 队列预留的内存量 |
| | 自定义子队列 | 如:ReservedMB#root.test | root.test 队列预留的内存量 |
| AppsKilled | root | AppsKilled#root | Root 队列终止的任务数 |
| | root.default | AppsKilled#root.default | root.default 队列终止的任务数 |
| | 自定义子队列 | 如:AppsKilled#root.test | root.test 队列终止的任务数 |
| AppsFailed | root | AppsFailed#root | Root 队列失败的任务数 |
| | root.default | AppsFailed#root.default | root.default 队列失败的任务数 |
| | 自定义子队列 | 如:AppsFailed#root.test | root.test 队列失败的任务数 |
| AppsCompleted | root | AppsCompleted#root | Root 队列完成的任务数 |
| | root.default | AppsCompleted#root.default | root.default 队列完成的任务数 |
| | 自定义子队列 | 如:AppsCompleted#root.test | root.test 队列完成的任务数 |
| AppsSubmitted | root | AppsSubmitted#root | Root 队列提交的任务数 |
| | root.default | AppsSubmitted#root.default | root.default 队列提交的任务数 |
| | 自定义子队列 | 如:AppsSubmitted#root.test | root.test 队列提交的任务数 |
| AvailableVCoresPercentage | 集群 | AvailableVCoresPercentage | 集群内可用虚拟核数百分比 |
| MemPendingRatio | root | MemPendingRatio#root | Root 队列等待可用的内存百分比 |
| | root.default | MemPendingRatio#root.default | root.default 队列等待可用的内存百分比 |
| | 自定义子队列 | 如:MemPendingRatio#root.test | root.test 队列等待可用的内存百分比 |
Trino | FreeDistributed | 集群 | FreeDistributed | 集群可用 Distributed 内存 |
| QueuedQueries | 集群 | QueuedQueries | 队列中等待执行的查询总数 |