弹性伸缩是云上大数据平台的核心能力。通过按需自动扩缩容节点,能够快速满足业务的波动,并降低算力成本。本文为您介绍如何根据您的业务特点为集群配置合适的弹性伸缩规则,以满足您业务量需求不断波动的情况,并更好的为您节省成本。
前提条件
步骤一:选择触发方式
步骤二:配置弹性伸缩规则
如果您设置了多条弹性伸缩规则,当同时满足条件时,系统将会按照以下内容触发和执行:
扩容规则优先于缩容规则。
按时间和按负载规则按照触发先后执行。
按负载伸缩中根据触发的指标的时间排序。
按负载伸缩中同一触发指标按照规则创建的顺序触发。
按时间伸缩
按照您业务可能拓展的时间点,选择重复执行或者只执行一次的执行频率,配置扩容规则,并在业务结束后对应的时间配置缩容规则。选择重复执行时,通过配置规则有效期,可以设置规则生效的截止时间,超出有效期后不再触发伸缩活动。
例如,您的业务在每天的22点开始增加,凌晨4点开始减少,您可以使用按时间伸缩,配置伸缩时间,按天重复执行,每天的22点配置扩容规则,凌晨4点配置缩容规则。
配置项和指标的详细信息,请参见添加弹性伸缩规则。
按负载伸缩
初始情况下EMR会为您推荐默认常用的扩缩容指标,您需要根据集群指标变化的情况自行配置具体的阈值,配置好具体的数值后,单击确定,然后单击保存并应用,在您的业务发生变化后,即会触发对应规则。
您可以参考以下步骤,配置适合自己集群的伸缩规则。
选择合适的指标。
在集群监控页签的指标监控页面的Dashboard下拉框中,选择YARN-HOME,观测您过去时间的指标随业务的变化,选择合适的指标。
指标的选择要与容量变化成反比,在伸缩活动发生后,实例数量的变化可以降低对应的指标。
例如:配置扩容规则,如果在60秒内yarn_resourcemanager_queue_AppsPending的平均值 >= 1,该条件连续出现1次,则添加1个节点。扩容活动发生后,可以有效地减少队列中挂起的任务数。
推荐指标如下表所示。
E-MapReduce弹性伸缩指标
所属服务
说明
yarn_resourcemanager_queue_AvailableMBPercentage
YARN
root队列可用内存资源所占百分比。
yarn_resourcemanager_queue_AvailableVCores
YARN
root队列可供分配的虚拟核数。
yarn_resourcemanager_queue_AvailableMB
YARN
root队列可供分配的内存。单位:MB。
yarn_resourcemanager_queue_AppsPending
YARN
root队列挂起的任务数。
yarn_resourcemanager_queue_PendingContainers
YARN
root队列待分配的容器数。
yarn_resourcemanager_queue_AvailableVCoresPercentage
YARN
root队列可用CPU核数资源所占百分比。
配置一个合适的扩缩容规则。
首次配置时,扩容规则上可以首选pending相关的指标,而缩容规则可以选择available相关的指标。
每一条规则内,您可以配置多条指标的触发条件,并指定指标触发之间的与或关系,可以更细粒度的控制伸缩条件。
为了避免频繁的扩缩容导致的资源浪费,可以为缩容规则配置一定的冷却时间。在冷却时间内,即使满足伸缩条件也不会发生弹性伸缩活动。
EMR平均扩容时间保持在1.55分钟,扩容100个节点平均只需要1.83分钟。因此可以设置扩容规则的冷却时间在100s~300s左右,保证在新扩出的实例进入使用后,观测到配置的指标是否有所回落,进而决定是否需要进行下一次的扩容,避免资源的浪费。
为了更快的响应指标的变化,建议时间粒度配置为1分钟,过大的时间粒度会使用过期的历史数据触发伸缩活动,造成不必要的浪费。
扩缩容数量上,根据您现有的节点数量处理的作业能力和期望的业务增长,预估指标回落所需要增加的节点数量进行配置。
配置时间约束(当前规则在一天之内生效的时间范围),可以组合不同的伸缩规则,在不同时间段配置不同内容的伸缩条件。
设置最大最小值范围。
当前节点组实例数限制可以约束整体的扩容数量。最大实例数保证不会在负载未满足的情况下无限扩容,超出您的使用预算。最小实例数能保证有最小数量的实例处理您的业务问题,当您的实例因为某些意外因素被直接释放后,弹性伸缩组也会为您补充实例,满足最小数量。
调整规则。
配置规则后,您可以通过观察一段时间的指标和伸缩活动记录,适量地调整规则的配置参数。
当伸缩活动过于频繁,刚扩容的实例频繁缩掉,并且扩容的实例有所闲置时,可以在规则中使用与条件,增加指标触发限制来减少扩缩容的频率,或者适当延长规则的冷却时间。
当需要反复扩容才能处理您提交的作业或者扩容速度无法及时处理业务作业时,可以适当增加每次规则触发时扩容的实例数量。