手动调整正在运行的集群的大小 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

手动调整正在运行的集群的大小

您可以使用 Amazon Web Services Management Console、Amazon CLI 或 Amazon EMR API,在正在运行的集群中的核心实例组和任务实例组以及实例集中添加和删除实例。如果集群使用的是实例组,您可显式更改实例计数。如果集群使用的是实例队列,您可更改按需实例和竞价型实例的目标单位数。然后,实例队列可添加和删除实例以满足新目标。有关更多信息,请参阅实例集选项。一旦实例可用,应用程序就可使用新预置的 Amazon EC2 实例来托管节点。删除实例后,Amazon EMR 会以不中断任务并防止数据丢失的方式关闭任务。有关更多信息,请参阅在任务完成时终止

使用控制台调整集群大小

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

注意

我们重新设计了 Amazon EMR 控制台,以便其易于使用。请参阅 控制台中的新增功能,以了解有关新旧控制台体验差异的信息。

New console
使用新控制台更改现有集群的实例数
  1. 登录 Amazon Web Services Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择要更新的集群。集群必须正在运行;您无法调整预置集群或已终止集群的大小。

  3. 在集群详细信息页面的 Instances(实例)选项卡上,查看 Instance groups(实例组)面板。

  4. 要调整现有实例组的大小,请选择要调整大小的核心实例组或任务实例组旁边的单选按钮,然后选择 Resize instance group(调整实例组大小)。为实例组指定新的实例数,然后选择 Resize(调整大小)。

    注意

    如果您选择减少正在运行的实例组大小,Amazon EMR 将智能地选择要从实例组中删除的实例,将数据丢失的风险降至最低。要对调整大小操作进行更精细地控制,可以依次选择实例组的 ID、要删除的实例,然后使用 Terminate(终止)选项。有关智能缩减行为的更多信息,请参阅 集群缩减

  5. 如果要取消调整大小操作,您可以选择状态为 Resizing(调整大小)的实例组的单选按钮,然后从列表操作中选择 Stop resize(停止调整大小)。

  6. 要向集群添加一个或多个任务实例组以应对不断增加的工作负载,请从操作列表中选择 Add task instance group(添加任务实例组)。选择 Amazon EC2 实例类型,输入任务组的实例数,然后选择 Add task instance group(添加任务实例组)以返回到集群的 Instance groups(实例组)面板。

Old console
使用旧控制台更改现有集群的实例数
  1. Cluster List (集群列表) 页面中,选择要调整大小的集群。

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

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

    –或–

    如果您的集群使用的是实例集,请在 Provisioned capacity (预置容量) 列中选择 Resize (调整大小),为 On-Demand units (按需单位数量)Spot units (Spot 单位数量) 键入新值,然后选择 Resize (调整大小)

当您对节点数进行更改时,实例组的 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 子命令时您可以添加多达五个任务实例组。

  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

    有关在 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(终止)选项。