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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

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

使用控制台调整集群大小

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

Console
使用新控制台更改现有集群的实例数
  1. 登录 Amazon Web Services Management Console,然后通过 https://console.aws.amazon.com/em r 打开亚马逊EMR控制台。

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

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

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

    注意

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

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

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

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

  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 EMR 命令的更多信息 Amazon CLI,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr

中断调整

使用 Amazon 4.1.0 或更高EMR版本,您可以在现有调整大小操作中发出调整大小的命令。此外,您可以停止之前提交的调整请求,或提交新请求以覆盖之前的请求,而不必等待其完成。您也可以通过控制台或使用当前计数作为集群目标计数的ModifyInstanceGroupsAPI调用来停止现有的调整大小。

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

Task instance group showing resizing status with options to resize or 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(终止)选项。