本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
手动调整正在运行的集群的大小
您可以使用 Amazon Web Services Management Console、Amazon CLI 或 Amazon EMR API,在正在运行的集群中的核心实例组和任务实例组以及实例集中添加和删除实例。如果集群使用的是实例组,您可显式更改实例计数。如果集群使用的是实例队列,您可更改按需实例和竞价型实例的目标单位数。然后,实例队列可添加和删除实例以满足新目标。有关更多信息,请参阅实例集选项。一旦实例可用,应用程序就可使用新预置的 Amazon EC2 实例来托管节点。删除实例后,Amazon EMR 会以不中断任务并防止数据丢失的方式关闭任务。有关更多信息,请参阅在任务完成时终止:
使用控制台调整集群大小
您可以使用 Amazon EMR 控制台调整正在运行的集群的大小。
注意
我们重新设计了 Amazon EMR 控制台,以便其易于使用。请参阅 控制台中的新增功能,以了解有关新旧控制台体验差异的信息。
当您对节点数进行更改时,实例组的 Status (状态) 会更新。当您请求的更改完成后,Status (状态) 为 Running (正在运行)。
使用 Amazon CLI 调整集群大小
您可以使用 Amazon CLI 调整正在运行的集群的大小。您可以增加或减少任务节点数,并且可以增加正在运行的集群中的核心节点数。还可以使用 Amazon CLI 或 API 关闭核心实例组中的实例。应小心地执行此操作。关闭核心实例组中的实例存在数据丢失的风险,且该实例不会被自动替换。
除了调整核心组和任务组的大小之外,还可使用 Amazon CLI 向正在运行的集群添加一个或多个任务实例组。
通过使用 Amazon CLI 更改实例数来调整集群大小
可以使用带 InstanceCount
参数的 Amazon CLI modify-instance-groups
子命令向核心组或任务组添加实例,并且可以从任务组删除实例。要向核心或任务组添加实例,请增加 InstanceCount
。要减少任务组中的实例数,请减少 InstanceCount
。将任务组的实例计数更改为 0 会删除所有实例,而不删除实例组。
-
要将任务实例组中的实例数从 3 增加到 4,请键入以下命令,将
ig-31JXXXXXXBTO
替换为实例组 ID。aws emr modify-instance-groups --instance-groups InstanceGroupId=
ig-31JXXXXXXBTO
,InstanceCount=4
要检索
InstanceGroupId
,请使用describe-cluster
子命令。输出是一个名为Cluster
的 JSON 对象,其中包含每个实例组的 ID。要使用此命令,您需要集群 ID(可以使用aws emr list-clusters
命令或控制台进行检索)。要检索实例组 ID,请键入以下命令,将j-2AXXXXXXGAPLF
替换为集群 ID。aws emr describe-cluster --cluster-id
j-2AXXXXXXGAPLF
借助 Amazon CLI,您还可以通过
--modify-instance-groups
子命令终止核心实例组中的实例。警告
指定
EC2InstanceIdsToTerminate
时,请务必谨慎。无论实例上运行的应用程序的状态如何,实例都将立即终止,并且不会自动替换实例。无论集群的 Scale down behavior (缩减行为) 配置如何,都会出现此情况。通过这种方式终止实例将面临数据丢失以及出现不可预测的集群行为的风险。要终止特定实例,您需要使用实例组 ID(由
aws emr describe-cluster --cluster-id
子命令返回)和实例 ID(由aws emr list-instances --cluster-id
子命令返回),键入以下命令,将ig-6RXXXXXX07SA
替换为实例组 ID,并将i-f9XXXXf2
替换为实例 ID。aws emr modify-instance-groups --instance-groups InstanceGroupId=
ig-6RXXXXXX07SA
,EC2InstanceIdsToTerminate=i-f9XXXXf2
有关在 Amazon CLI 中使用 Amazon EMR 命令的更多信息,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr。
通过使用 Amazon CLI 添加任务实例组来调整集群大小
借助 Amazon CLI,您可以通过 --add-instance-groups
子命令向集群添加 1-48 个任务实例组。任务实例组只能添加到包含主实例组和核心实例组的集群。借助 Amazon CLI,每次使用 --add-instance-groups
子命令时您可以添加多达五个任务实例组。
-
要向集群添加单个任务实例组,请键入以下命令,将
j-JXBXXXXXX37R
替换为集群 ID。aws emr add-instance-groups --cluster-id
j-JXBXXXXXX37R
--instance-groups InstanceCount=6
,InstanceGroupType=task
,InstanceType=m5.xlarge
-
要向集群添加多个任务实例组,请键入以下命令,将
j-JXBXXXXXX37R
替换为集群 ID。可以在单个命令中添加多达 5 个任务实例组。aws emr add-instance-groups --cluster-id
j-JXBXXXXXX37R
--instance-groups InstanceCount=6
,InstanceGroupType=task
,InstanceType=m5.xlarge
InstanceCount=10
,InstanceGroupType=task
,InstanceType=m5.xlarge
有关在 Amazon CLI 中使用 Amazon EMR 命令的更多信息,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr。
中断调整
通过使用 Amazon EMR 4.1.0 版或更高版本,您可以在现有大小调整操作执行期间下达新的大小调整指示。此外,您可以停止之前提交的调整请求,或提交新请求以覆盖之前的请求,而不必等待其完成。您还可以从控制台或使用 ModifyInstanceGroups
API 调用停止现有的大小调整操作,并将当前计数作为目标集群数。
下面的屏幕截图显示了正在调整但可通过选择 Stop (停止) 来停止的任务实例组。

使用 Amazon CLI 中断大小调整操作
您可以在 Amazon CLI 中使用 modify-instance-groups
子命令来停止大小调整操作。假定您的实例组包含 6 个实例,您需要将实例增加到 10 个。但随后您决定撤消此请求:
-
初始请求:
aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-
myInstanceGroupId
,InstanceCount=10第二个请求 (停止第一个请求) :
aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-
myInstanceGroupId
,InstanceCount=6
注意
此种处理是异步进行的,因此,在执行后续请求前,您可能会看到实例计数相对于之前的 API 请求有所变化。对于缩减请求,如果节点上有正在进行的工作,则在节点完成其工作前,实例组不会缩减。
“暂停”状态
如果尝试启动新的集群节点时遇到太多错误,实例组就会进入“暂停”状态。例如,如果新节点在执行引导操作时出现故障,实例组会进入 SUSPENDED (暂停) 状态,而不是持续地预置新节点。解决了基础问题后,您可以重置集群实例组上所需数量的节点,然后实例组继续开始分配节点。修改实例组会促使 Amazon EMR 尝试再次预置节点。没有重启或终止任何运行节点。
在 Amazon CLI 中,list-instances
子命令返回所有实例及其状态(与 describe-cluster
子命令执行的操作一样)。如果 Amazon EMR 检测到实例组故障,则组的状态会更改为 SUSPENDED
。
使用 Amazon CLI 重置处于 SUSPENDED(暂停)状态的集群
键入带有 describe-cluster
参数的 --cluster-id
子命令可查看集群中实例的状态。
-
要查看有关集群中所有实例和实例组的信息,请键入以下命令,将
j-3KVXXXXXXY7UG
替换为集群 ID。aws emr describe-cluster --cluster-id
j-3KVXXXXXXY7UG
输出会显示有关实例组和实例状态的信息:
{ "Cluster": { "Status": { "Timeline": { "ReadyDateTime": 1413187781.245, "CreationDateTime": 1413187405.356 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "Ec2InstanceAttributes": { "Ec2AvailabilityZone": "us-west-2b" }, "Name": "Development Cluster", "Tags": [], "TerminationProtected": false, "RunningAmiVersion": "3.2.1", "NormalizedInstanceHours": 16, "InstanceGroups": [ { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413187775.749, "CreationDateTime": 1413187405.357 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "Name": "MASTER", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge", "Id": "ig-3ETXXXXXXFYV8", "Market": "ON_DEMAND", "RunningInstanceCount": 1 }, { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413187781.301, "CreationDateTime": 1413187405.357 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "Name": "CORE", "InstanceGroupType": "CORE", "InstanceType": "m5.xlarge", "Id": "ig-3SUXXXXXXQ9ZM", "Market": "ON_DEMAND", "RunningInstanceCount": 1 } ... }
要查看有关特定实例组的信息,请键入带有
list-instances
和--cluster-id
参数的--instance-group-types
子命令。您可以查看主实例组、核心实例组和任务实例组的信息。aws emr list-instances --cluster-id
j-3KVXXXXXXY7UG
--instance-group-types"CORE"
使用带有
modify-instance-groups
参数的--instance-groups
子命令可重置SUSPENDED
状态下的集群。实例组 ID 通过describe-cluster
子命令返回。aws emr modify-instance-groups --instance-groups InstanceGroupId=
ig-3SUXXXXXXQ9ZM
,InstanceCount=3
缩减集群大小时的注意事项
如果您选择缩减正在运行的集群的大小,则请考虑以下 Amazon EMR 行为和最佳实践:
-
为了减少对正在进行的作业的影响,Amazon EMR 会智能地选择要删除的实例。有关集群缩减行为更多信息,请参阅《Amazon EMR 管理指南》中的 在任务完成时终止。
-
当您缩减集群的大小时,Amazon EMR 会将数据从其删除的实例复制到剩余的实例。确保组中剩余的实例中有足够的存储容量用于存储此数据。
-
Amazon EMR 尝试停用组中实例上的 HDFS。缩减集群大小之前,建议您尽量减少 HDFS 写入 I/O。
-
要在缩减集群大小时进行最精细的控制,您可以在控制台中查看集群并导航到 Instances(实例)选项卡。选择要调整大小的实例组的 ID。然后对要删除的特定实例使用 Terminate(终止)选项。