摘要:
本文介绍腾讯云 EMR 的自动伸缩功能,包括基于时间的伸缩策略和基于负载的伸缩策略的配置方法,以及如何通过设置混合伸缩规则实现灵活的集群弹性管理。
一、为什么需要自动伸缩
在大数据平台运营中,业务负载往往存在波动性。例如,白天业务繁忙时需要更多的计算资源,而夜间业务量减少时,部分资源处于闲置状态。如果集群规模固定,会导致资源浪费或性能不足的问题。
1.1 业务负载的波动性
企业的大数据业务通常存在以下特点:
- 周期性波动:业务在一天的不同时间段、一周的不同天数存在明显的波峰波谷
- 突发性增长:某些业务场景会出现突发的大量计算需求
- 长期增长:随着业务发展,数据量和计算需求逐步增长
1.2 固定集群规模的局限
传统的固定集群规模存在以下局限:
- 为保障业务高峰时的性能,需要按照峰值需求配置集群规模,导致低谷时资源闲置
- 无法应对突发的大量计算需求,可能导致作业延迟
- 集群扩容需要手动操作,响应时间长
1.3 自动伸缩的价值
EMR 的自动伸缩功能可以根据服务角色的负载变化自动增加或减少节点数量,无需手动调整节点数量和规格,能够在快速响应需求变化的同时节约成本。
二、 EMR 自动伸缩概述
2.1 支持的伸缩策略
EMR 支持两种伸缩策略:
- 基于时间的伸缩策略:根据预设的时间规则自动扩缩容节点。适用于业务负载有明显的时间规律场景。
- 基于负载的伸缩策略:根据集群的负载指标自动扩缩容节点。适用于业务负载没有明显时间规律,需要根据业务量变化而变化的场景。
此外, EMR 还支持时间伸缩和负载伸缩混合弹性规则设置。
2.2 支持的节点类型
EMR 自动伸缩功能支持对以下节点类型进行伸缩:
- Task 节点:负责执行计算任务,支持自动伸缩
- Router 节点:负责提供集群访问入口,支持自动伸缩
注意: Core 节点不支持缩容,只能扩容。
2.3 伸缩规则优先级
伸缩规则触发遵循"先触发先执行,同时触发根据规则优先顺序执行"的原则。规则优先级顺序由高到低依次为: 1 > 2 > 3 > 4 > 5 。
三、基于时间的伸缩策略配置
3.1 适用场景
基于时间的伸缩策略适用于以下场景:
- 业务负载有明显的时间规律,如每天固定时间出现峰值
- 可以预测业务需求的时间变化
- 需要保证在特定时间段内有足够的计算资源
3.2 配置步骤
配置时间伸缩规则的步骤:
- 登录 EMR 控制台,进入集群详情页
- 在集群详情页选择"集群服务",进入角色管理页
- 在角色管理页选择对应角色,在"操作 > 更多"中单击"自动伸缩"
- 在自动伸缩弹框中,开启自动伸缩状态开关
- 选择"时间伸缩"策略类型
- 配置时间伸缩规则:
- 名称:输入规则名称
- 执行类型:选择"执行一次"或"重复执行"
- 执行时间:选择具体的执行时间
- 目标数量:设置目标节点数量
- 单击"确定"保存规则
3.3 时间伸缩规则示例
示例场景:业务在每周一到周五的早上 8:15 出现峰值,需要扩容 1 台节点,定时销毁时长设置 3 小时。
规则配置:
- 规则名称: time-scale-out-rule
- 执行类型:重复执行
- 执行时间:每周一到周五,早上 8:15
- 目标数量:扩容 1 台节点
- 定时销毁时长: 3 小时
3.4 注意事项
- 扩容资源存在耗时,耗时与扩容数量成正比,建议提前 15 分钟准备资源
- 重复执行规则到期后,规则状态将失效并处于关闭状态
- 到期前将有告警通知
四、基于负载的伸缩策略配置
4.1 适用场景
基于负载的伸缩策略适用于以下场景:
- 业务负载没有明显的时间规律
- 需要根据业务量的变化自动调整资源
- 无法准确预估集群计算的波峰和波谷
4.2 负载指标
EMR 自动伸缩支持基于以下负载指标进行伸缩:
YARN 负载指标:
- AvailableVCores:可用虚拟核数的数量
- PendingVCores:等待可用的虚拟核数
- AvailableMB:可用内存数量( MB )
- PendingMB:等待可用的内存数量( MB )
Trino 负载指标(仅支持 EMR-V2.7.0 和 EMR-V3.40 及以上版本且部署 Trino 组件的集群):
4.3 配置步骤
配置负载伸缩规则的步骤:
- 登录 EMR 控制台,进入集群详情页
- 在集群详情页选择"集群服务",进入角色管理页
- 在角色管理页选择对应角色,在"操作 > 更多"中单击"自动伸缩"
- 在自动伸缩弹框中,开启自动伸缩状态开关
- 选择"负载伸缩"策略类型
- 配置负载伸缩规则:
- 规则类型:扩容/缩容
- 策略类型:按负载
- 规则名称:伸缩规则的名称
- 有效时间:仅在有效时间内触发负载伸缩规则
- 负载类型:选择 YARN 或 Trino
- 统计规则:根据选定的集群负载指标,设置触发阈值条件
- 单击"确定"保存规则
4.4 负载伸缩规则示例
示例场景:当 root.default 队列的 PendingVCores 大于 10 时,自动扩容 1 台节点;当 AvailableVCores 大于 20 时,自动缩容 1 台节点。
扩容规则配置:
- 规则类型:扩容
- 规则名称: load-scale-out-rule
- 有效时间:不限制
- 负载类型: YARN
- 统计规则: PendingVCores#root.default > 10
- 扩容数量: 1 台节点
缩容规则配置:
- 规则类型:缩容
- 规则名称: load-scale-in-rule
- 有效时间:不限制
- 负载类型: YARN
- 统计规则: AvailableVCores#root.default > 20
- 缩容数量: 1 台节点
4.5 注意事项
- 无法准确的预估集群计算的波峰和波谷时,建议使用按负载伸缩进行策略配置
- 最多设置 5 个统计规则
- 支持根据子队列进行规则统计
- 支持选择所有规则同时触发阈值时生效或任意规则触发阈值时生效
五、混合伸缩策略配置
5.1 适用场景
混合伸缩策略适用于以下场景:
- 业务存在一定周期内明显的波峰波谷,也存在非周期性的突然业务短暂高峰
- 需要同时考虑时间和负载因素
- 需要更灵活的伸缩策略
5.2 配置示例
混合场景示例:业务存在一定周期内明显的波峰波谷,也存在非周期性的突然业务短暂高峰。
规则配置:
- 规则 1:设置时间扩容规则,选择重复执行,按每周一到周五,明天早上 8:15 进行扩容 1 台节点,定时销毁时长设置 3 小时。
- 规则 2:设置负载扩容规则,根据所需监控指标进行选择,有效期建议不设置,默认全天,扩容 1 台。
- 规则 3:设置负载缩容规则,根据所需监控指标进行选择,有效期建议不设置,默认全天,缩容 1 台。
规则优先级:规则 1 > 规则 2 > 规则 3 。
5.3 混合伸缩规则触发原则
混合伸缩规则触发遵循以下原则:
- 先触发先执行
- 同时触发根据规则优先顺序执行
- 扩容规则优先于缩容规则
- 按负载伸缩中根据触发的指标的时间排序
- 按负载伸缩中同一触发指标按照规则创建的顺序触发
六、自动伸缩最佳实践
6.1 规则配置建议
- 根据业务特点选择合适的伸缩策略:有时间规律选择时间伸缩,无时间规律选择负载伸缩
- 设置合理的阈值:阈值过高会导致资源不足,阈值过低会导致频繁伸缩
- 配置多条规则时,合理设置规则优先级
- 为缩容规则设置冷却时间,避免频繁缩容
6.2 监控和告警
- 启用伸缩记录功能,查看伸缩历史
- 配置告警通知,及时了解伸缩规则执行情况
- 定期查看伸缩记录,分析伸缩规则的效果
6.3 成本控制
- 合理设置伸缩范围,避免无限扩容
- 使用竞价实例作为 Task 节点,降低计算成本
- 定期审查伸缩规则,清理不再需要的规则
七、常见问题排查
7.1 伸缩规则未触发
可能的原因:
- 规则配置错误,检查触发条件是否正确的
- 规则未开启,检查自动伸缩状态开关是否开启
- 规则不在有效期内
- 节点数量已达到伸缩范围的限制
7.2 扩容失败
可能的原因:
- 资源不足,无法创建新的节点
- 安全组配额达到上限
- 子账号权限不足
排查步骤:
- 检查集群的事件日志,查看扩容失败的原因
- 检查资源配额是否足够
- 检查子账号权限是否正确
7.3 缩容失败
可能的原因:
- 节点上有正在运行的任务
- 节点上有数据(针对 Core 节点)
- 缩容规则配置错误
排查步骤:
- 检查节点上是否有正在运行的任务
- 检查缩容规则配置
- 查看集群的事件日志
八、 EMR on TKE 的自动伸缩
8.1 EMR on TKE 自动伸缩概述
EMR on TKE 也支持自动伸缩功能。当前仅支持 EMR-TKE-V1.1.0 及以上版本的 Trino ( Worker )、 RSS ( Worker )和 StarRocks ( CN )角色支持配置自动伸缩功能。
8.2 配置差异
EMR on TKE 的自动伸缩配置与 EMR on CVM 有以下差异:
- EMR on TKE 的自动伸缩是基于 POD 数量的调整,而不是节点数量的调整
- 支持配置 POD 规格和 POD 范围
- 自动伸缩功能和调整 POD 数量功能是互斥的
了解更多产品详情:腾讯云 EMR 产品页