Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

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

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

使用控制台调整集群的大小

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

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

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

  2. 集群详细信息页面上,选择硬件

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

    调整 Amazon EMR 集群的实例组大小

    –或–

    如果您的集群使用的是实例队列,请选择预配置容量列中的调整大小,为按需单位数量Spot 单位数量键入新值,然后选择调整大小

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

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

使用 AWS CLI 调整集群的大小

您可以使用 AWS CLI 调整正在运行的集群的大小。您可以增加或减少任务节点数,并且可以增加正在运行的集群中的核心节点数。还可以使用 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=m4.large
  2. 要向集群添加多个任务实例组,请键入以下命令,将 j-JXBXXXXXX37R 替换为集群 ID。可以在单个命令中添加多达 5 个任务实例组。

    aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m4.large InstanceCount=10,InstanceGroupType=task,InstanceType=m4.large

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

中断调整

通过使用 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 状态,而不是持续地预配置新节点。解决了基础问题后,您可以重置集群实例组上所需数量的节点,然后实例组继续开始分配节点。修改实例组会促使 Amazon EMR 尝试再次预配置节点。没有重启或终止任何运行节点。

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

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

键入带有 --cluster-id 参数的 describe-cluster 子命令可查看集群中实例的状态。

  • 要查看有关集群中所有实例和实例组的信息,请键入以下命令,将 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": "m4.large", "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": "m4.large", "Id": "ig-3SUXXXXXXQ9ZM", "Market": "ON_DEMAND", "RunningInstanceCount": 1 } ... }

    要查看有关特定实例组的信息,请键入带有 --cluster-id--instance-group-types 参数的 list-instances 子命令。可以查看 MASTER、CORE 或 TASK 组的信息。

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

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

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