将容量预留与实例集结合使用 - Amazon EMR

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

将容量预留与实例集结合使用

要启动带有容量预留选项的按需型实例集,请附加使用容量预留选项所需的额外服务角色权限。由于容量预留选项必须与按需分配策略一起使用,因此您还必须在服务角色和托管式策略中提供分配策略所需的权限。有关更多信息,请参阅 分配策略权限

Amazon EMR 支持开放容量预留和定向容量预留。以下主题显示了可与 RunJobFlow 操作或 create-cluster 命令结合使用的实例集配置,以还使用按需型容量预留启动实例集。

尽力使用开放容量预留

如果集群的按需型实例与您账户中可用的开放容量预留属性(实例类型、平台、租赁和可用区)相匹配,则会自动应用容量预留。但是,不能保证使用您的容量预留。为了配置集群,Amazon EMR 会评估启动请求中指定的所有实例池,并使用价格最低且容量足以启动所有请求的核心节点的实例池。将自动应用与实例池匹配的可用开放容量预留。如果可用的开放容量预留与实例池不匹配,它们将保持未使用状态。

预置核心节点后,就会选择并修复可用区。Ama EMR zon 将任务节点配置到选定可用区的实例池中,首先从价格最低的实例池开始,直到所有任务节点都已配置完毕。将自动应用与实例池匹配的可用开放容量预留。

以下是尽力使用开放EMR容量预留的 Amazon 容量分配逻辑的用例。

示例 1: 启动请求中价格最低的实例池具有可用的开放容量预留

在这种情况下,Amazon 使用按需实例在价格最低的实例池中EMR启动容量。将自动使用此实例池中可用的开放容量预留。

按需策略 lowest-price
请求的容量 100
实例类型 c5.xlarge m5.xlarge r5.xlarge
可用的开放容量预留 150 100 100
按需价格 $ $$ $$$
预置的实例 100 - -
已使用的开放容量预留 100 - -
可用的开放容量预留 50 100 100

在启动队列后,您可以运行 describe-capacity-reservations 来查看剩余的未使用的容量预留量。

示例 2: 启动请求中价格最低的实例池没有可用的开放容量预留

在这种情况下,Amazon 使用按需实例在价格最低的实例池中EMR启动容量。但是,您的开放容量预留仍处于未使用状态。

按需策略 lowest-price
请求的容量 100
实例类型 c5.xlarge m5.xlarge r5.xlarge

可用的开放容量预留

- - 100
按需价格 $ $$ $$$
预置的实例 100 - -
已使用的开放容量预留 - - -
可用的开放容量预留 - - 100

配置实例机群以便尽力使用开放容量预留

您使用 RunJobFlow 操作创建基于实例集的集群时,请将按需分配策略设置为 lowest-priceCapacityReservationPreference,以让容量预留选项保持 open。或者,如果您将此字段留空,Amazon 会将按需实例的容量预留首选项EMR默认为open

"LaunchSpecifications": {"OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "CapacityReservationPreference": "open" } } }

您也可以使用 Amazon EMR CLI 使用开放容量预留创建基于实例队列的集群。

aws emr create-cluster \ --name 'open-ODCR-cluster' \ --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\ LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={CapacityReservationPreference=open}}'}

其中,

  • open-ODCR-cluster 替换为使用开放容量预留的集群的名称。

  • subnet-22XXXX01 替换为子网 ID。

首先使用开放容量预留

您可以选择替代最低价格分配策略,在配置 Amazon 集群时优先使用可用的开放容量预留。EMR在这种情况下,Amazon EMR 会评估启动请求中指定容量预留的所有实例池,并使用价格最低且容量足以启动所有请求的核心节点的实例池。如果所有具有容量预留的实例池都没有足够的容量来容纳所请求的核心节点,Amazon EMR 将采用前一主题中描述的尽力而为的情况。也就是说,Amazon 会EMR重新评估启动请求中指定的所有实例池,并使用价格最低且容量足以启动所有请求的核心节点的实例池。将自动应用与实例池匹配的可用开放容量预留。如果可用的开放容量预留与实例池不匹配,它们将保持未使用状态。

预置核心节点后,就会选择并修复可用区。Ama EMR zon 在选定的可用区将任务节点配置到具有容量预留的实例池中,首先从价格最低的实例池开始,直到所有任务节点都已配置完毕。Amazon 首先EMR使用所选可用区域中每个实例池中可用的可用开放容量预留,并且仅在需要时,才使用最低价格策略来配置所有剩余的任务节点。

以下是首先使用开放容量预留的 Amazon EMR 容量分配逻辑的用例。

示例 1:启动请求中具有可用开放容量预留的实例池具有足够的核心节点容量

在这种情况下,无论实例池的价格如何,Amazon 都会使用可用的开放容量预留EMR启动实例池中的容量。因此,会在预置所有核心节点之前,尽可能使用您的开放容量预留。

按需策略 lowest-price
请求的容量 100
使用策略 use-capacity-reservations-first
实例类型 c5.xlarge m5.xlarge r5.xlarge
可用的开放容量预留 - - 150
按需价格 $ $$ $$$
预置的实例 - - 100
已使用的开放容量预留 - - 100
可用的开放容量预留 - - 50

示例 2:启动请求中具有可用开放容量预留的实例池没有足够的容量用于核心节点

在这种情况下,Amazon将EMR退回到使用最低价格策略启动核心节点,并尽最大努力使用容量预留。

按需策略 lowest-price
请求的容量 100
使用策略 use-capacity-reservations-first
实例类型 c5.xlarge m5.xlarge r5.xlarge
可用的开放容量预留 10 50 50
按需价格 $ $$ $$$
预置的实例 100 - -
已使用的开放容量预留 10 - -
可用的开放容量预留 - 50 50

在启动队列后,您可以运行 describe-capacity-reservations 来查看剩余的未使用的容量预留量。

将实例机群配置为首先使用开放容量预留

使用 RunJobFlow 操作创建基于势例集的集群时,请将按需分配策略设置为 lowest-price,并将 CapacityReservationOptionsUsageStrategy 设置为 use-capacity-reservations-first

"LaunchSpecifications": {"OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first" } } }

您也可以先使用容量预留使用 Amazon EMR CLI 创建基于实例队列的集群。

aws emr create-cluster \ --name 'use-CR-first-cluster' \ --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\ LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first}}'}

其中,

  • use-CR-first-cluster 替换为使用开放容量预留的集群的名称。

  • subnet-22XXXX01 替换为子网 ID。

首先使用目标容量预留

在配置 Amazon EMR 集群时,您可以选择改写最低价格分配策略,优先使用可用的目标容量预留。在这种情况下,Amazon EMR 会评估启动请求中指定的具有目标容量预留的所有实例池,并选择价格最低且容量足以启动所有请求的核心节点的实例池。如果所有具有目标容量预留的实例池都没有足够的容量来容纳核心节点,Amazon EMR 就会回到前面描述的尽力而为的情况。也就是说,Amazon 会EMR重新评估启动请求中指定的所有实例池,并选择价格最低且容量足以启动所有请求的核心节点的实例池。将自动应用与实例池匹配的可用开放容量预留。但是,目标容量预留仍处于使用状态。

预置核心节点后,就会选择并修复可用区。Ama EMR zon 在选定可用区将任务节点置于具有定向容量预留的实例池中,首先从价格最低的容量预留开始,直到所有任务节点都已配置完毕。Amazon EMR 会先尝试使用选定可用区内每个实例池中可用的目标容量预留。然后,只有在需要时,Amazon 才会EMR使用最低价格策略来配置所有剩余的任务节点。

以下是首先使用目标容量预留的 Amazon EMR 容量分配逻辑的用例。

示例 1: 启动请求中具有可用目标容量预留的实例池具有足够的核心节点容量

在这种情况下,无论实例池的价格如何,Amazon 都会使用可用的目标容量预留在实例池中EMR启动容量。因此,会在预置所有核心节点之前,尽可能使用您的目标容量预留。

按需策略 lowest-price
使用策略 use-capacity-reservations-first
请求的容量 100
实例类型 c5.xlarge m5.xlarge r5.xlarge
可用的目标容量预留 - - 150
按需价格 $ $$ $$$
预置的实例 - - 100
已使用的目标容量预留 - - 100
可用的目标容量预留 - - 50
例 示例 2:启动请求中具有可用目标容量预留的实例池没有足够的容量用于核心节点
按需策略 lowest-price
请求的容量 100
使用策略 use-capacity-reservations-first
实例类型 c5.xlarge m5.xlarge r5.xlarge
可用的目标容量预留 10 50 50
按需价格 $ $$ $$$
预置的实例 100 - -
已使用的目标容量预留 10 - -
可用的目标容量预留 - 50 50

在启动队列后,您可以运行 describe-capacity-reservations 来查看剩余的未使用的容量预留量。

将实例机群配置为首先使用目标容量预留

使用 RunJobFlow 操作创建基于实例集的集群时,请将按需分配策略设置为 lowest-price,并将 CapacityReservationOptionsUsageStrategy 设置为 use-capacity-reservations-first、将 CapacityReservationOptionsCapacityReservationResourceGroupArn 设置为 <your resource group ARN>。有关更多信息,请参阅 Amazon EC2 用户指南中的使用容量预留

"LaunchSpecifications": {"OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first", "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup" } } }

其中arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup,替换为你的资源组ARN。

您也可以使用 Amazon EMR CLI 使用目标容量预留创建基于实例队列的集群。

aws emr create-cluster \ --name 'targeted-CR-cluster' \ --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=100,\ InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\ LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first,CapacityReservationResourceGroupArn=arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup}}'}

其中,

  • targeted-CR-cluster 替换为使用目标容量预留的集群的名称。

  • subnet-22XXXX01 替换为子网 ID。

  • arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup已替换为您的资源组ARN。

避免使用可用的开放容量预留

如果您想避免在启动 Amazon EMR 集群时意外使用任何开放容量预留,请将按需分配策略设置CapacityReservationPreferenceCapacityReservationOptionslowest-price和 for none。否则,Amazon 会将按需实例的容量预留首选项EMR默认为,open并尽最大努力尝试使用可用的开放容量预留。

"LaunchSpecifications": {"OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "CapacityReservationPreference": "none" } } }

您也可以使用 Amazon EMR CLI 创建基于实例队列的集群,而无需使用任何开放容量预留。

aws emr create-cluster \ --name 'none-CR-cluster' \ --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\ LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={CapacityReservationPreference=none}}'}

其中,

  • none-CR-cluster 替换为不使用任何开放容量预留的集群的名称。

  • subnet-22XXXX01 替换为子网 ID。

使用容量预留的方案

在以下情况下,使用容量预留可以获得益处。

情况 1:使用容量预留轮替长时间运行的集群

在轮替一个长时间运行的集群时,您可能对预置新实例的实例类型和可用区有严格的要求。通过容量预留,您可以使用容量保证来完成集群轮替,且不会发生中断。

使用可用容量预留的集群轮替
方案 2:使用容量预留预置连续的短期集群

您还可以使用容量预留为单个工作负载配置一组连续的短期集群,以便在终止集群时,下一个集群可以使用容量预留。您可以使用目标容量预留来确保仅预期集群使用容量预留。

使用可用容量预留的短期集群预置