配置实例集 - Amazon EMR

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

配置实例集

注意

实例队列配置仅在亚马逊 4.8.0 及更高EMR版本中可用,不包括 5.0.0 和 5.0.3。

Amazon EMR 集群的实例队列配置允许您为 Amazon EC2 实例选择各种配置选项,并帮助您为集群中的每种节点类型制定灵活而弹性的资源配置策略。

在实例集配置中,您可以为每个队列内的按需实例和竞价型实例https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html指定目标容量。当集群启动时,Amaz EMR on 会预配置实例,直到目标实现为止。当由于价格上涨或实例故障而在正在运行的集群中EC2回收竞价型实例时,Amazon EMR 会尝试使用您指定的任何实例类型替换该实例。这使得可在 Spot 价格高峰期间更轻松地重新获取容量。

在使用或 Amazon 以及按需EC2实例和竞价型实例的分配策略创建集群时,您最多可以为每个队列指定五种 Amazon EC2 实例类型供亚马逊EMRAPI在实现目标时使用, AWS CLI 或者为每个队列指定最多 30 个亚马逊实例类型。EMR

您也可以为不同的可用区选择多个子网。当 Amazon EMR 启动集群时,它会查看这些子网以找到您指定的实例和购买选项。如果 Amazon 在一个或多个可用区中EMR检测到 AWS 大规模事件,Amazon EMR 会自动尝试将流量从受影响的可用区域引出,并尝试根据您的选择启动您在备用可用区创建的新集群。请注意,只有在创建集群时才能选择集群可用区。如果发生可用区中断,现有的集群节点不会在新的可用区中自动重新启动。

使用实例队列的注意事项

在 Amazon EMR 上使用实例队列时,请考虑以下事项。

  • 对于每个节点类型(主节点、核心节点和任务节点),您可以有一个实例集。您最多可以为上的每个队列指定五种 Amazon EC2 实例类型 AWS Management Console (或者使用 AWS CLI 或 Amazon EMR API 和创建集群时,每个实例队列最多可指定 30 种类型实例集的分配策略)。

  • Amazon EMR 选择任一或全部指定的 Amazon EC2 实例类型来配置竞价和按需购买选项。

  • 对于核心队列和任务队列,您可以设定 Spot 和按需实例的目标容量。使用 v CPU 或分配给每个计入目标的 Amazon EC2 实例的通用单位。Ama EMR zon 会预配置实例,直到每个目标容量完全满足。对于主实例集,目标始终为一。

  • 您可以选择一个子网(可用区)或范围。如果您选择一个范围,Ama EMR zon 会在可用区中配置最合适的容量。

  • 在指定竞价型实例的目标容量时:

    • 对于每个实例类型,指定最高 Spot 价格。如果竞EMR价价格低于最高竞价价格,Amazon 会配置竞价型实例。您按 Spot 价格付费,但这不一定是最高 Spot 价格。

    • 对于每个队列,定义预置竞价型实例的超时期限。如果 Amazon EMR 无法预置 Spot 容量,您可以终止集群或改为配置按需容量。这仅适用于预置集群,而不适用于调整集群大小。如果超时期限在集群大小调整过程中结束,则未预置的竞价请求将无效,且不会转移到按需容量。

  • 对于每个队列,您可以为竞价型实例指定以下分配策略之一:价格容量优化、容量优化 capacity-optimized-prioritized、最低价格或在所有池中实现多元化。

  • 对于每个队列,您可以为按需实例应用以下分配策略:最低价格策略或优先策略。

  • 对于每个具有按需实例的队列,您可以选择应用容量预留选项。

  • 如果您对实例队列使用分配策略,则在为集群选择子网时需要考虑以下注意事项:EMR

    • 当 Ama EMR zon 为集群配置任务队列时,它会筛选出缺少足够可用 IP 地址的子网,无法配置所请求EMR集群的所有实例。这包括在集群启动期间主实例队列、核心实例队列和任务实例队列所需的 IP 地址。EMR然后,Amazon 利用其分配策略根据实例类型和具有充足 IP 地址的剩余子网来确定启动集群的实例池。

    • 如果 Amazon 由于可用 IP 地址不足而EMR无法启动整个集群,它将尝试识别具有足够可用 IP 地址的子网来启动基本(核心和主要)实例队列。在这种情况下,您的任务实例队列将进入暂停状态,而不是因错误而终止集群。

    • 如果指定的子网都不包含足够的 IP 地址来配置基本核心和主实例队列,则集群启动将失败,并显示 _。VALIDATION ERROR这会触发CRITICAL严重性集群终止事件,通知您集群无法启动。为防止出现此问题,我们建议增加子网中的 IP 地址数量。

  • 启动按需实例时,您可以为账户中的主节点、核心节点和任务节点使用开放或定向容量预留。使用按需实例队列的分配策略,您可能会发现容量不足。我们建议您指定多种实例类型,以实现多样化并减少出现容量不足的可能性。有关更多信息,请参阅 将容量预留与实例集结合使用

实例集选项

使用以下准则来了解实例队列选项。

设置目标容量

为核心队列和任务队列指定所需的目标容量。当您这样做时,这决定了 Amazon 预配置的按需实例和竞价型实例的EMR数量。在指定实例时,您将决定每个实例计入目标的量。在预置按需实例时,该容量将计入按需目标。Spot 实例也是如此。与核心实例集和任务实例集不同,主实例集始终为一个实例。因此,此队列的目标容量始终是一。

当您使用控制台时,默认情况下,Amazon EC2 实例类型将用作目标容量的计数。 vCPUs 您可以将其更改为通用单位,然后为每种EC2实例类型指定计数。使用时 AWS CLI,您可以为每种实例类型手动分配通用单位。

重要

当您使用选择实例类型时 AWS Management Console,CPU显示的每种实例类型的 v 数是该实例类型的 YARN vcore 数,而不是该实例类型的 vcore 数。EC2 vCPUs 有关每种实例类型数量的 vCPUs 更多信息,请参阅 Amazon EC2 实例类型

对于每个队列,您最多可以指定五种 Amazon EC2 实例类型。如果您使用实例集的分配策略并使用 AWS CLI 或 Amazon 创建集群 EMRAPI,则每个实例队列最多可以指定 30 个EC2实例类型。Amazon EMR 会选择这些EC2实例类型的任意组合来满足您的目标容量。由于 Amazon EMR 希望完全填满目标容量,因此可能会出现超额情况。例如,如果有两个未配送的单元,而 Amazon EMR 只能配置一个计数为五个单位的实例,则该实例仍会被预配置,这意味着超过目标容量三个单位。

如果您减少目标容量以调整正在运行的集群的大小,Amazon 会EMR尝试完成应用程序任务并终止实例以满足新的目标。有关更多信息,请参阅 在任务完成时终止

启动选项

对于竞价型实例,您可以在队列中指定每个实例类型的最高 Spot 价格。您可以采用按需价格的百分比形式或特定美元金额形式设置此价格。如果可用区的当前竞价价格低于您的最高竞价价格,Amazon EMR 会配置竞价型实例。您按 Spot 价格付费,但这不一定是最高 Spot 价格。

注意

自 2021 年 7 月 1 日起,新客户不再享有具有定义持续时间(也称为 Spot 块)的竞价型实例。对于以前使用过该功能的客户,我们将继续支持具有定义持续时间的竞价型实例,直到 2022 年 12 月 31 日。

在 Amazon EMR 5.12.1 及更高版本中可用,您可以选择启动具有优化容量分配的竞价型和按需实例队列。此分配策略选项可以在旧版本中设置, AWS Management Console 也可以使用APIRunJobFlow。请注意,您无法在新控制台中自定义分配策略。使用分配策略选项需要额外的服务角色权限。如果您使用集群的默认 Amazon EMR 服务角色EMR_DefaultRole和托管策略(和AmazonEMRServicePolicy_v2),则已包含分配策略选项的权限。如果您未使用默认的 Amazon EMR 服务角色和托管策略,则必须添加它们才能使用此选项。请参阅 Amazon 的服务角色EMR(EMR角色)

有关竞价型实例的更多信息,请参阅 Amazon EC2 用户指南中的竞价型实例。有关按需实例的更多信息,请参阅 Amazon EC2 用户指南中的按需实例

如果您选择使用价格最低的分配策略来启动按需型实例集,则可以选择使用容量预留。可以使用 Amazon 设置容量预留选项EMRAPIRunJobFlow。容量预留需要额外的服务角色权限,您必须添加这些权限后才能使用这些选项。请参阅 分配策略权限。请注意,您无法在新控制台中自定义容量预留。

多个子网(可用区)选项

使用实例队列时,可以在中指定多个 Amazon EC2 子网VPC,每个子网对应不同的可用区。如果您使用 EC2-Classic,则需要明确指定可用区。Amazon 会根据您的队列规格EMR确定最适合启动实例的可用区。始终仅在一个可用区中预置实例。您可以选择私有子网或公有子网,但不能将两者混合使用,并且您指定的子网必须位于同一子网内。VPC

主节点(master node)配置

由于主实例集只是一个实例,因此其配置与核心实例集和任务实例集的配置略有不同。由于主实例集仅包含一个实例,因此您只能为主实例集选择按需型或竞价型实例。如果您使用控制台创建实例队列,则您选定的购买选项的目标容量将设置为 1。如果使用 AWS CLI,请务必根据TargetOnDemandCapacity需要将TargetSpotCapacity或设置为 1。您仍然可以为主实例集选择最多 5 个实例类型(为按需型实例或竞价型实例使用分配策略选项时,最多可选择 30 个实例类型)。但是,与核心实例队列和任务实例队列不同,Amazon EMR 可能会预配置多个不同类型的实例,而 Amazon EMR 会选择一种实例类型来为主实例队列预配置。

实例集的分配策略

在 Amazon 5.12.1 及更高EMR版本中,您可以将分配策略选项与每个群集节点的按需实例和竞价型实例配合使用。当您使用具有分配策略的 AWS CLI EMRAPI、Amazon 或 Amazon EMR 控制台创建集群时,您可以为每个队列指定最多 30 个 Amazon EC2 实例类型。使用默认 Amazon EMR 集群实例队列配置,每个队列最多可以有 5 种实例类型。我们建议您使用分配策略选项,它可以加快集群配置、更准确地进行竞价型实例分配并减少竞价型实例中断。

按需型实例的分配策略

以下分配策略适用于您的按需实例:

lowest-price(默认值)

最低价格分配策略从具有可用容量的最低价格池中启动按需实例。如果价格最低的池没有可用容量,则按需实例来自价格第二低且具有可用容量的池。

prioritized

优先分配策略允许您为实例队列的每种实例类型指定优先级值。Amazon 会EMR启动优先级最高的按需实例。如果您使用此策略,则必须为至少一种实例类型配置优先级。如果您没有为实例类型配置优先级值,Amazon 会为该实例类型EMR分配最低的优先级。对于给定实例类型,集群中的每个实例队列(主实例队列、核心实例队列或任务实例队列)可以具有不同的优先级值。

注意

如果您使用capacity-optimized-prioritized竞价分配策略,则在您设置优先级时,Amazon 会将相同的优先级EMR应用于您的按需实例和竞价型实例。

竞价型实例分配策略

您可以为竞价型实例指定以下分配策略之一:

price-capacity-optimized(推荐)

价格容量优化的分配策略从竞价型实例池中启动竞价型实例,这些实例池的可用容量最大,启动的实例数量价格最低。因此,价格容量优化策略获得竞价容量的几率通常更高,中断率也更低。这是 Amazon 6.10.0 及更高EMR版本的默认策略。

capacity-optimized

容量优化的分配策略将竞价型实例启动到可用性最高的池中,短期内中断几率最低。对于与重新启动的作业相关的中断成本可能更高的工作负载来说,这是一个不错的选择。这是 Amazon 6.9.0 及更EMR低版本的默认策略。

capacity-optimized-prioritized

capacity-optimized-prioritized 分配策略允许您为实例队列中的每种实例类型指定优先级值。Amazon 会首先针对容量进行EMR优化,但它会尽最大努力尊重实例类型的优先级,例如优先级不会显著影响队列配置最佳容量的能力。如果您的工作负载必须具有最小的中断量,但仍需要某些实例类型,我们建议您使用此选项。如果您使用此策略,则必须为至少一种实例类型配置优先级。如果您没有为任何实例类型配置优先级,Amazon 会为该实例类型EMR分配最低的优先级值。对于给定实例类型,集群中的每个实例队列(主实例队列、核心实例队列或任务实例队列)可以具有不同的优先级值。

注意

如果您使用优先按需分配策略,Amazon 会在您设置优先级时将相同的优先级值EMR应用于您的按需实例和竞价型实例。

diversified

通过多元化分配策略,Amazon 在所有EC2竞价容量池中分配竞价型实例。

lowest-price

最低价格分配策略从具有可用容量的最低价格池中启动竞价型实例。如果价格最低的池没有可用容量,则竞价型实例将来自价格次低且具有可用容量的池。如果池在满足您请求的容量之前已用完容量,Amazon EC2 队列会从价格第二低的池中提取容量来继续满足您的请求。为确保达到所需容量,您可能会获得来自多个容量池的竞价型实例。由于此策略仅考虑实例价格而不考虑容量可用性,因此可能会导致较高的中断率。

分配策略权限

分配策略选项需要多个IAM权限,这些权限会自动包含在默认的 Amazon EMR 服务角色和 Amazon EMR 托管策略(EMR_DefaultRoleAmazonEMRServicePolicy_v2)中。如果您为集群使用自定义服务角色或托管式策略,必须添加这些权限后才能创建集群。有关更多信息,请参阅 分配策略权限

当您使用按需分配策略选项时,可以使用可选的按需容量预留 (ODCRs)。容量预留选项允许您指定优先使用预留容量的 Amazon EMR 集群。您可以使用它来确保您的关键工作负载使用您已经使用开放或定向预留的容量ODCRs。对于非关键工作负载,容量预留首选项允许您指定是否使用预留容量。

容量预留只能由匹配其属性(实例类型、平台、可用区)的实例使用。默认情况下,在配置与实例属性匹配的按需实例EMR时,Amazon 会自动使用开放容量预留。如果您没有任何正在运行的实例与容量预留的容量匹配,则这些容量将保持未使用的状态,直至启动与其属性相匹配的实例。如果您不想在启动集群时使用任何容量预留,则必须在启动选项中将容量预留首选项设置为 none (无)

不过,您还可以将容量预留定位到特定工作负载。这使您可以明确控制允许哪些实例在预留容量中运行。有关按需容量预留的更多信息,请参阅 将容量预留与实例集结合使用

分配策略所需的IAM权限

您的 Amazon 的服务角色EMR(EMR角色) 需要额外的权限才能创建使用按需型或竞价型实例集的分配策略选项的集群。

我们会自动将这些权限包含在默认的亚马逊EMR服务角色EMR_DefaultRole和亚马逊EMR托管策略中AmazonEMRServicePolicy_v2

如果您为集群使用自定义服务角色或托管式策略,则必须添加以下权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteLaunchTemplate", "ec2:CreateLaunchTemplate", "ec2:DescribeLaunchTemplates", "ec2:CreateLaunchTemplateVersion", "ec2:CreateFleet" ], "Resource": "*" } }

以下是创建使用开放容量或目标容量预留的集群所需的服务角色权限。除了使用分配策略选项所需的权限之外,还必须提供这些权限。

例 服务角色容量预留的策略文档

要使用开放容量预留,必须提供以下额外权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeCapacityReservations", "ec2:DescribeLaunchTemplateVersions", "ec2:DeleteLaunchTemplateVersions" ], "Resource": "*" } ] }

要使用目标容量预留,必须提供以下额外权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeCapacityReservations", "ec2:DescribeLaunchTemplateVersions", "ec2:DeleteLaunchTemplateVersions", "resource-groups:ListGroupResources" ], "Resource": "*" } ] }

为您的集群配置实例集

Console
使用控制台创建包含实例队列的集群
  1. 登录 AWS Management Console,然后通过 https://console.aws.amazon.com/em r 打开亚马逊EMR控制台。

  2. EC2在左侧导航窗格的开下EMR,选择集群,然后选择创建集群

  3. Cluster configuration(集群配置)下,选择 Instance fleets(实例集)。

  4. 对于每个 Node group(节点组),选择 Add instance type(添加实例类型),为主实例集和核心实例集选择最多 5 个实例类型,为任务实例集选择最多 15 个实例类型。Amazon 在启动集群时EMR可能会预配置这些实例类型的任意组合。

  5. 在每个节点组类型下,选择每个实例旁边的 Actions(操作)下拉菜单以更改以下设置:

    添加EBS卷

    在 Amazon EMR 预配置实例类型后,指定要附加到该实例类型的EBS卷。

    编辑权重容量

    对于核心节点组,将此值更改为适用于应用程序的任意单位数量。每种YARNvCores 队列实例类型的数量用作默认的加权容量单位。您无法编辑主节点的权重容量。

    编辑最高 Spot 价格

    为实例集中的每个实例类型指定最高 Spot 价格。您可以采用按需价格的百分比形式或特定美元金额形式设置此价格。如果可用区的当前竞价价格低于您的最高竞价价格,Amazon 将预配置竞EMR价型实例。您按 Spot 价格付费,但这不一定是最高 Spot 价格。

  6. 或者,要为节点添加安全组,请展开网络部分中的EC2安全组(防火墙),然后为每种节点类型选择您的安全组。

  7. 或者,要使用分配策略选项,请选中应用分配策略旁边的复选框,然后选择想要为竞价型实例指定的分配策略。如果您的 Amazon EMR 服务角色没有所需的权限,则不应选择此选项。有关更多信息,请参阅 实例集的分配策略

  8. 选择适用于集群的任何其他选项。

  9. 要启动集群,选择 Create cluster(创建集群)。

AWS CLI

要使用创建和启动带有实例队列的集群 AWS CLI,请遵循以下指南:

  • 要使用实例队列创建和启动集群,请将 create-cluster 命令与 --instance-fleet 参数结合使用。

  • 要获取有关集群中的实例队列的配置详细信息,请使用 list-instance-fleets 命令。

  • 要将多个自定义 Amazon Linux AMIs 添加到您正在创建的集群,请使用每个InstanceType规范中的CustomAmiId选项。您可以为实例队列节点配置多种实例类型和多种自定义实例类型AMIs,以满足您的需求。请参阅 示例:使用实例集配置创建集群

  • 要更改实例队列的目标容量,请使用 modify-instance-fleet 命令。

  • 要向不具有任务实例队列的集群添加此队列,请使用 add-instance-fleet 命令。

  • AMIs可以使用 add-instance-fleet 命令中的CustomAmiId 参数将多个自定义添加到任务实例队列中。请参阅 示例:使用实例集配置创建集群

  • 要在创建实例队列时使用分配策略选项,请更新服务角色以在下一部分内容包含示例策略文档。

  • 要在使用按需分配策略创建实例队列时使用容量预留选项,请更新服务角色以在下一部分内容包含示例策略文档。

  • 实例队列会自动包含在默认EMR服务角色和 Amazon EMR 托管策略(EMR_DefaultRoleAmazonEMRServicePolicy_v2)中。如果您为集群使用自定义服务角色或自定义托管式策略,则必须在下一部分内容添加分配策略的新权限。

示例:使用实例集配置创建集群

以下示例演示了 create-cluster 命令以及可组合使用的各种选项。

注意

如果您之前没有创建默认的 Amazon EMR 服务角色和EC2实例配置文件,请在使用aws emr create-default-rolescreate-cluster命令之前使用创建它们。

例 示例:按需主实例、单实例类型的按需核心、默认 VPC
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}']
例 示例:Spot 主实例、Spot 核心实例类型为单一实例、默认 VPC
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetSpotCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}'] \ InstanceFleetType=CORE,TargetSpotCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}']
例 示例:按需主实例、带单实例类型的混合核心、单EC2子网
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c'] \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=2,TargetSpotCapacity=6,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=2}']
例 示例:按需主要、具有多种加权实例类型的竞价型核心、竞价型超时、EC2子网范围
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c','subnet-de67890f'] \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \ InstanceFleetType=CORE,TargetSpotCapacity=11,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}',\ '{InstanceType=m4.2xlarge,BidPrice=0.9,WeightedCapacity=5}'],\ LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=120,TimeoutAction=SWITCH_TO_ON_DEMAND}'}
例 示例:按需主实例、混合核心实例和具有多种加权实例类型的任务、核心竞价型实例的超时、EC2子网范围
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c','subnet-de67890f'] \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=8,TargetSpotCapacity=6,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}',\ '{InstanceType=m4.2xlarge,BidPrice=0.9,WeightedCapacity=5}'],\ LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=120,TimeoutAction=SWITCH_TO_ON_DEMAND}'} \ InstanceFleetType=TASK,TargetOnDemandCapacity=3,TargetSpotCapacity=3,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}']
例 示例:Spot 主要、无核心或任务、Amazon EBS 配置、默认 VPC
aws emr create-cluster --release-label Amazon EMR 5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetSpotCapacity=1,\ LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=60,TimeoutAction=TERMINATE_CLUSTER}'},\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,\ EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,\ SizeIn GB=100}},{VolumeSpecification={VolumeType=io1,SizeInGB=100,Iop s=100},VolumesPerInstance=4}]}}']
例 示例:多个自定义AMIs、多种实例类型、按需主实例、按需核心实例
aws emr create-cluster --release-label Amazon EMR 5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456},{InstanceType=m6g.xlarge, CustomAmiId=ami-234567}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456},{InstanceType=m6g.xlarge, CustomAmiId=ami-234567}']
例 示例:向具有多种实例类型和多个自定义实例的正在运行的集群添加任务节点 AMIs
aws emr add-instance-fleet --cluster-id j-123456 --release-label Amazon EMR 5.3.1 \ --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleet \ InstanceFleetType=Task,TargetSpotCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456}',\ '{InstanceType=m6g.xlarge,CustomAmiId=ami-234567}']
例 示例:使用JSON配置文件

您可以在JSON文件中配置实例队列参数,然后将该JSON文件作为实例队列的唯一参数进行引用。例如,以下命令引用JSON配置文件my-fleet-config.json

aws emr create-cluster --release-label emr-5.30.0 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets file://my-fleet-config.json

这些区域有:my-fleet-config.json 文件指定主实例队列、核心实例队列和任务实例队列,如下例所示。核心实例队列使用最高竞价价格 (BidPrice) 作为按需实例的百分比,而任务和主实例队列使用最高竞价价格 (BidPriceAsPercentageofOnDemandPrice) 作为字符串。USD

[ { "Name": "Masterfleet", "InstanceFleetType": "MASTER", "TargetSpotCapacity": 1, "LaunchSpecifications": { "SpotSpecification": { "TimeoutDurationMinutes": 120, "TimeoutAction": "SWITCH_TO_ON_DEMAND" } }, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge", "BidPrice": "0.89" } ] }, { "Name": "Corefleet", "InstanceFleetType": "CORE", "TargetSpotCapacity": 1, "TargetOnDemandCapacity": 1, "LaunchSpecifications": { "OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first", "CapacityReservationResourceGroupArn": "String" } }, "SpotSpecification": { "AllocationStrategy": "capacity-optimized", "TimeoutDurationMinutes": 120, "TimeoutAction": "TERMINATE_CLUSTER" } }, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge", "BidPriceAsPercentageOfOnDemandPrice": 100 } ] }, { "Name": "Taskfleet", "InstanceFleetType": "TASK", "TargetSpotCapacity": 1, "LaunchSpecifications": { "OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "CapacityReservationPreference": "none" } }, "SpotSpecification": { "TimeoutDurationMinutes": 120, "TimeoutAction": "TERMINATE_CLUSTER" } }, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge", "BidPrice": "0.89" } ] } ]

修改实例集的目标容量

使用 modify-instance-fleet 命令可指定实例队列的新目标容量。您必须指定集群 ID 和实例队列 ID。使用list-instance-fleets命令检索实例队列IDs。

aws emr modify-instance-fleet --cluster-id <cluster-id> \ --instance-fleet \ InstanceFleetId='<instance-fleet-id>',TargetOnDemandCapacity=1,TargetSpotCapacity=1

将任务实例集添加到集群

如果集群仅具有主实例集和核心实例集,您可以使用 add-instance-fleet 命令添加任务实例集。您只能使用此命令添加任务实例队列。

aws emr add-instance-fleet --cluster-id <cluster-id> --instance-fleet \ InstanceFleetType=TASK,TargetSpotCapacity=1,\ LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=20,TimeoutAction=TERMINATE_CLUSTER}'},\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}']

获取集群中的实例集的配置详细信息

使用 list-instance-fleets 命令可获取集群中的实例队列的配置详细信息。该命令将集群 ID 用作输入。以下示例演示了针对包含主任务实例组和核心任务实例组的集群的命令及其输出。有关完整的响应语法,请参阅 Amazon EMR API 参考ListInstanceFleets中的。

list-instance-fleets --cluster-id <cluster-id>
{ "InstanceFleets": [ { "Status": { "Timeline": { "ReadyDateTime": 1488759094.637, "CreationDateTime": 1488758719.817 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "ProvisionedSpotCapacity": 6, "Name": "CORE", "InstanceFleetType": "CORE", "LaunchSpecifications": { "SpotSpecification": { "TimeoutDurationMinutes": 60, "TimeoutAction": "TERMINATE_CLUSTER" } }, "ProvisionedOnDemandCapacity": 2, "InstanceTypeSpecifications": [ { "BidPrice": "0.5", "InstanceType": "m5.xlarge", "WeightedCapacity": 2 } ], "Id": "if-1ABC2DEFGHIJ3" }, { "Status": { "Timeline": { "ReadyDateTime": 1488759058.598, "CreationDateTime": 1488758719.811 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "ProvisionedSpotCapacity": 0, "Name": "MASTER", "InstanceFleetType": "MASTER", "ProvisionedOnDemandCapacity": 1, "InstanceTypeSpecifications": [ { "BidPriceAsPercentageOfOnDemandPrice": 100.0, "InstanceType": "m5.xlarge", "WeightedCapacity": 1 } ], "Id": "if-2ABC4DEFGHIJ4" } ] }