当您的业务量需求不断波动时,建议您开启弹性伸缩功能并配置相应的伸缩规则,以便于E-MapReduce(简称EMR)可以按业务量波动增加或减少Task节点。确保作业完成的同时,可以节省成本。本文为您介绍如何在EMR控制台配置弹性伸缩。
前提条件
已新建Hadoop集群,创建详情请参见创建集群。
注意事项
弹性伸缩配置可以指定伸缩的节点的硬件规格。您可以在弹性伸缩功能未开启的情况下配置具体实例规格。如果特殊情况确实需要修改,可以关闭弹性伸缩功能后,再次开启。
系统会根据您选择的vCPU和内存规格,自动匹配出满足条件的实例,并显示在备选实例列表中。您需要选中备选的实例,以便集群按照已选的实例规格进行伸缩。
为避免由于ECS库存不足造成的弹性伸缩失败,您最多可以选择3种ECS实例。
无论是选择高效云盘还是SSD云盘,数据盘最小设置为40 GB。
按负载伸缩是基于云监控服务(CMS)产品功能提供的一种动态管理伸缩组的方式。在您成功配置弹性伸缩规则后,系统将自动在云监控服务体系内构建相应的报警规则。为确保EMR弹性伸缩活动的平稳运行,请勿对系统自动生成的报警规则进行修改、删除或禁用等操作。
操作步骤
进入弹性伸缩页面。
在顶部菜单栏处,根据实际情况选择地域和资源组。
在EMR on ECS页面,单击目标集群的集群ID。
单击上方的弹性伸缩页签。
新建弹性伸缩组。
在伸缩配置页签,单击新建弹性伸缩机器组。
说明弹性伸缩组只能在弹性伸缩模块下进行管理和配置,无法在节点管理模块下进行操作。
在新增弹性伸缩机器组对话框中,输入机器组名称,单击确定。
在伸缩配置页签,单击目标机器组操作列的配置规则。
在弹性伸缩配置面板的基础信息区域,配置相关参数。
参数
描述
最大实例数
弹性伸缩组的Task节点上限。一旦达到上限,即使满足弹性伸缩的规则,也不会继续执行弹性伸缩。最大实例数的上限为1000。
最小实例数
弹性伸缩的Task节点下限。如果弹性伸缩规则中设置的增加或减少Task节点数小于此处设置的最小实例数,则在首次执行时,集群会以最小节点数为准进行伸缩。
例如,您设置弹性扩容规则为每天零点动态添加1个节点,最小节点数为3,则系统在第一天的零点时会添加3个节点,以满足最小节点数的要求。
优雅下线
您可以设置超时时间,下线YARN上作业所在的Task节点。如果Task节点没有运行YARN上的作业或者作业运行超出您设置的超时时间,则下线Task节点。超时时间最大值为3600秒。
重要开启优雅下线时,请先将YARN配置项yarn.resourcemanager.nodes.exclude-path的值修改为/etc/ecm/hadoop-conf/yarn-exclude.xml。
修改超时时间后,请在业务低峰期重启YARN ResourceManager,以使修改后的超时时间生效。
在弹性伸缩配置面板的实例区域,选择实例方式、计费类型和实例规格。
单一计费模式
系统会根据您选择的vCPU和内存规格,自动匹配出满足条件的实例,并显示在实例规格区域。您需要选中实例规格区域的实例,以便集群按照已选的实例规格进行伸缩。单一计费模式支持以下两种计费类型:
按量付费
勾选实例的顺序决定显示节点的优先级,勾选实例后下方区域会显示每一个实例每小时的价格(包含EMR实例价格和ECS实例价格)。
抢占式实例
重要当您的作业对SLA(Service Level Agreement)要求较高时,请慎用该实例。因为竞价失败等原因会导致抢占式实例被释放,所以请谨慎使用抢占式实例。
勾选实例的顺序决定显示节点的优先级,每一个实例后会显示该实例在按量付费时每小时的价格。您还可以设置每台实例的上限价格,当满足规则时显示该类实例。抢占式实例详情,请参见什么是抢占式实例。
成本优化模式
该模式下,您可以制定更详细的成本控制策略,在成本和稳定性之间进行调整和权衡。
参数
描述
组内最小按量节点数量
弹性伸缩组需要的按量实例的最小个数,当伸缩组中按量实例个数小于该值时,将优先创建按量实例。
按量节点所占比例
弹性伸缩组内最小按量节点数量满足之后,创建实例中按量实例所占的比例。
最低价的多个实例规格
指定最低价的多个实例规格种类数。当创建抢占实例时,将在这些规格种类中进行均衡分布。最大值为3。
抢占实例补偿
是否开启竞价实例的补偿机制。开启抢占实例补偿后,在竞价实例被回收前5分钟左右,将主动替换掉当前竞价实例。
当您不指定组内最小按量节点数量、按量节点所占比例和最低价的多个实例规格参数时,您创建的是普通成本优化伸缩组。否则,您创建的是成本优化混合实例伸缩组。成本优化混合实例伸缩组与普通成本优化伸缩组在接口和功能方面是完全兼容的。
对于成本优化混合实例伸缩组,您可以通过合理制定混合实例策略,以实现与普通成本优化伸缩组完全相同的行为。例如:
普通成本优化伸缩组创建的全为按量实例
指定组内最小按量节点数量=0,按量节点所占比例=100,最低价的多个实例规格=1。
普通成本优化伸缩组优先创建竞价实例
指定组内最小按量节点数量=0,按量节点所占比例=0,最低价的多个实例规格=1。
说明成本优化模式详情,请参见AutoScaling成本优化模式升级--混合实例策略。
在弹性伸缩配置面板的触发方式区域,选择触发方式和规则。
规定时间伸缩:如果Hadoop集群计算量在一定的周期内存在明显的波峰和波谷,则您可以设置在每天、每周或每月的固定时间段扩展一定量的Task节点来补充计算能力,这样在保证作业完成的同时,也可以节省成本。
伸缩规则分为扩容规则和缩容规则,本示例以扩容规则为例介绍。集群关闭弹性伸缩功能后,所有规则会被清空,再次开启弹性伸缩功能时,需要重新配置伸缩规则。
参数
描述
规则名称
在同一个集群中,伸缩规则名称(包括扩容规则和缩容规则)不允许重复。
时间执行规则
重复执行:您可以选择每天、每周或每月的某一特定时间点执行一次弹性伸缩动作。
只执行一次:集群在指定的时间点执行一次弹性伸缩动作。
执行时间
选择规则执行的时间。
规则有效期
选择规则的有效期。
重试过期时间(秒)
弹性伸缩在到达指定时间时可能由于各种原因不能执行,通过设置重试过期时间,系统会在该时间范围内每隔30秒尝试执行一次,直到在满足条件时执行伸缩。设置范围为0~21600秒。
假设在指定时间段需要进行弹性伸缩动作A,如果有其他弹性伸缩动作B正在执行或正处在冷却期,则动作A无法执行。在您设置的重试过期时间内,每隔30秒会重试一次,尝试执行A,一旦条件满足,集群会立刻执行弹性伸缩。
调整台数
规则被触发时,集群每次增加Task节点数量。
冷却时间(秒)
每次弹性伸缩动作执行完成,到可以再次进行弹性伸缩的时间间隔。在冷却时间内,不会发生弹性伸缩动作。
规定负载伸缩:如果您无法准确的预估大数据计算的波峰和波谷,则可以使用按负载伸缩配置的策略。
伸缩规则分为扩容规则和缩容规则,本示例以扩容规则为例介绍。集群关闭弹性伸缩功能后,所有规则会被清空,再次开启弹性伸缩功能时,需要重新配置伸缩规则。切换伸缩策略时(例如,从按负载伸缩切换到按时间伸缩),原策略下的伸缩规则处于失效状态,不会被触发,但已经扩容的节点会继续保留,不会被释放。
参数
描述
规则名称
在同一个集群中,伸缩规则名称(包括扩容规则和缩容规则)不允许重复。
集群负载指标
在YARN的负载指标中获取,详细信息请参见Hadoop官方文档。
E-MapReduce弹性伸缩指标与YARN负载指标的对应关系,请参见E-MapReduce弹性伸缩指标与YARN所属服务的对应关系。
统计周期
您选定的集群负载指标在一个统计周期内,按照选定的聚合维度(平均值、最大值和最小值),达到触发阈值为一次触发。
统计规则
重复几次后扩容
负载指标聚合后达到阈值触发的次数,达到该次数后触发集群弹性伸缩的动作。
扩容(台)
规则被触发时,集群每次执行增加的Task节点数量。
冷却时间(秒)
每次弹性伸缩动作执行完成,到可以再次进行弹性伸缩的时间间隔。在冷却时间内,即使满足弹性伸缩条件也不会发生弹性伸缩动作。即忽略本次在冷却时间内触发的弹性伸缩动作,直到下一次满足伸缩条件且不在冷却时间内再执行。
单击保存。
您可以根据实际情况,开启弹性伸缩。开启弹性伸缩详情,请参见开启或关闭弹性伸缩(仅Hadoop集群类型)。
E-MapReduce弹性伸缩指标与YARN所属服务的对应关系
E-MapReduce弹性伸缩指标 | 所属服务 | 说明 |
YARN.AvailableVCores | YARN | 可供分配的虚拟核数。 |
YARN.PendingVCores | YARN | 待分配的虚拟核数。 |
YARN.AllocatedVCores | YARN | 已分配的虚拟核数。 |
YARN.ReservedVCores | YARN | 预留的虚拟核数。 |
YARN.AvailableMemory | YARN | 可供分配的内存量。单位:MB。 |
YARN.PendingMemory | YARN | 待分配的内存量。单位:MB。 |
YARN.AllocatedMemory | YARN | 已分配的内存量。单位:MB。 |
YARN.ReservedMemory | YARN | 预留的内存量。单位:MB。 |
YARN.AppsRunning | YARN | 运行中的任务数。 |
YARN.AppsPending | YARN | 挂起的任务数。 |
YARN.AppsKilled | YARN | 终止的任务数。 |
YARN.AppsFailed | YARN | 失败的任务数。 |
YARN.AppsCompleted | YARN | 完成的任务数。 |
YARN.AppsSubmitted | YARN | 提交的任务数。 |
YARN.AllocatedContainers | YARN | 已分配的容器数。 |
YARN.PendingContainers | YARN | 待分配的容器数。 |
YARN.ReservedContainers | YARN | 预留的容器数。 |
YARN.MemoryAvailablePrecentage | YARN | 剩余内存的百分比 |
YARN.ContainerPendingRatio | YARN | 待分配的容器数与已分配的容器数的比率 |