Manually Resizing a Running Cluster - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Manually Resizing a Running Cluster

您可以使用 AWS 管理控制台、AWS CLI 或 Amazon EMR API 从正在运行的集群中的核心和任务实例组以及实例队列中添加和删除实例。如果集群使用的是实例组,您可显式更改实例计数。如果集群使用的是实例队列,您可更改按需实例和 Spot 实例的目标单位数。然后,实例队列可添加和删除实例以满足新目标。有关更多信息,请参阅 Instance Fleet Options。) 一旦实例可用,应用程序就可使用新预配置的 Amazon EC2 实例来承载节点。移除实例时, Amazon EMR 终止 以不会中断工作和防止数据丢失的方式任务。有关更多信息,请参阅 Terminate at Task Completion。)

Resize a Cluster Using the Console

您可以使用 Amazon EMR 控制台调整正在运行的集群的大小。

使用控制台更改运行的现有集群的实例数

  1. Cluster List (集群列表) 页面中,选择要调整大小的集群。

  2. Cluster Details (集群详细信息) 页面上,选择 Hardware (硬件)

  3. 如果您的集群使用的是实例组,请选择要调整大小的实例组的实例数量列中的调整大小,键入新的实例数量,然后选中绿色复选标记。

    
							重新调整实例组 Amazon EMR 群集

    –OR–

    如果群集使用实例车队,请选择 调整大小配置的容量 列,键入新值 按需单位点单位,然后选择 调整大小.

    
							调整实例车队的大小 Amazon EMR 群集

当您对节点数进行更改时,实例组的 Status (状态) 会更新。当您请求的更改完成后,Status (状态)Running (正在运行)

Resize a Cluster Using the AWS CLI

您可以使用 AWS CLI 调整正在运行的集群的大小。您可以增加或减少任务节点数,并且可以增加正在运行的集群中的核心节点数。也可能是Erminate 使用 AWS CLI 或API。应小心地执行此操作。终止 核心实例组风险数据丢失的实例不会自动更换。

除了调整核心和任务组的大小之外,还可以使用 AWS CLI 向正在运行的集群添加一个或多个任务实例组。

通过使用 AWS CLI 更改实例计数来调整集群的大小

可以使用带 InstanceCount 参数的 AWS 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

    如果使用 AWS 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

    有关在 AWS CLI 中使用 Amazon EMR 命令的更多信息,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr

通过使用 AWS CLI 添加任务实例组来调整集群的大小

如果使用 AWS CLI ,您可以通过 --add-instance-groups 子命令向集群添加 1–48 个任务实例组。任务实例组只能添加到包含主实例组和核心实例组的集群。使用 AWS CLI 时,您每次使用 --add-instance-groups 子命令时,可添加多达 5 个任务实例组。

  1. 要将单个任务实例组添加到群集,请键入以下命令并更换 j-JXBXXXXXX37R 使用群集ID。

    aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m5.xlarge
  2. 要将多个任务实例组添加到群集,请键入以下命令并更换 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

    有关在 AWS CLI 中使用 Amazon EMR 命令的更多信息,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr

Interrupting a Resize

通过使用 Amazon EMR 4.1.0 版或更高版本,您可以在现有大小调整操作执行期间下达新的大小调整指示。此外,您可以停止之前提交的调整请求,或提交新请求以覆盖之前的请求,而不必等待其完成。您还可以从控制台或使用 ModifyInstanceGroups API 调用停止现有调整,使当前数量成为集群的目标数量。

下面的屏幕截图显示了正在调整但可通过选择 Stop (停止) 来停止的任务实例组。

使用 AWS CLI 中断调整操作

您可以在 AWS 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 请求有所变化。对于缩减请求,如果节点上有正在进行的工作,则在节点完成其工作前,实例组不会缩减。

Arrested State

如果尝试启动新的集群节点时遇到太多错误,实例组将进入“已捕获”状态。例如,如果新节点在执行引导操作时失败,则实例组将进入 ARRESTED 状态,而不是连续调配新节点。解决了基础问题后,您可以重置集群实例组上所需数量的节点,然后实例组继续开始分配节点。修改实例组会促使 Amazon EMR 尝试再次预配置节点。没有重启或终止任何运行节点。

在 AWS CLI 中,list-instances 子命令返回所有实例及其状态(与 describe-cluster 子命令执行的操作一样)。如果 Amazon EMR 检测到实例组故障,则组的状态会更改为 ARRESTED

使用 AWS CLI 重置 ARRESTED 状态下的集群

键入带有 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 子命令。可以查看 MASTER、CORE 或 TASK 组的信息。

    aws emr list-instances --cluster-id j-3KVXXXXXXY7UG --instance-group-types "CORE"

    使用带有 modify-instance-groups 参数的 --instance-groups 子命令可重置 ARRESTED 状态下的集群。实例组 ID 通过 describe-cluster 子命令返回。

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-3SUXXXXXXQ9ZM,InstanceCount=3