本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
手动调整正在运行的 Amazon EMR 集群的大小
您可以使用、或 Amazon EMR API 在正在运行的集群中的核心实例组和任务实例组以及实例队列中 Amazon Web Services Management Console添加和删除实例。 Amazon CLI如果集群使用的是实例组,您可显式更改实例计数。如果集群使用的是实例队列,您可更改按需实例和竞价型实例的目标单位数。然后,实例队列可添加和删除实例以满足新目标。有关更多信息,请参阅 实例集选项。只要节点可用,应用程序就可以使用新配置的 Amazon EC2 实例来托管节点。移除实例后,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
子命令。输出是一个名为的JSON对象Cluster
,其中包含每个实例组的 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 EMR 命令的更多信息 Amazon CLI,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr。
要通过添加任务实例组来调整集群的大小 Amazon CLI
使用 Amazon CLI,您可以使用子命令将 1 到 48 个任务实例组添加到集群中。--add-instance-groups
任务实例组只能添加到包含主实例组和核心实例组的集群。使用时 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 EMR 命令的更多信息 Amazon CLI,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr。
中断调整
使用 Amazon 4.1.0 或更高EMR版本,您可以在现有调整大小操作中发出调整大小的命令。此外,您可以停止之前提交的调整请求,或提交新请求以覆盖之前的请求,而不必等待其完成。您也可以通过控制台或使用当前计数作为集群目标计数的ModifyInstanceGroups
API调用来停止现有的调整大小。
下面的屏幕截图显示了正在调整但可通过选择 Stop (停止) 来停止的任务实例组。
使用中断调整大小 Amazon CLI
您可以使用modify-instance-groups
子命令 Amazon CLI 停止调整大小。假定您的实例组包含 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
。
要重置处于以下SUSPENDED状态的集群 Amazon CLI
键入带有 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(终止)选项。