View a markdown version of this page

规划和配置 Amazon EMR 集群的实例集 - Amazon EMR

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

规划和配置 Amazon EMR 集群的实例集

注意

实例集配置仅在 Amazon EMR 发行版 4.8.0 及更高版本(不包括 5.0.0 和 5.0.3)中可用。

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

在实例队列配置中,您可以为每个队列中的On-Demand实例竞价型实例指定目标容量。集群启动时,Amazon EMR 预置实例,直至达到目标。如果 Amazon EC2 在集群运行时因价格上涨或实例失败而回收 Spot 实例,Amazon EMR 会尝试将该实例替换为您指定的任何实例类型。这使得可在 Spot 价格高峰期间更轻松地重新获取容量。

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

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

使用实例集的注意事项

在 Amazon EMR 中使用实例集时,请考虑以下事项。

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

  • Amazon EMR 选择任何或所有指定的 Amazon EC2 实例类型进行预配置,同时提供竞价和 On-Demand 购买选项。

  • 您可以为核心队列和任务队列确定竞价型和 On-Demand实例的目标容量。请使用分配给计入目标的每个 Amazon EC2 实例的 vCPU 或通用单位。Amazon EMR 预置实例,直至达到每个目标容量。对于主实例集,目标始终为一。

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

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

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

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

  • 对于每个实例集,您可以为竞价型实例指定其中一种分配策略:价格容量优化、容量优化、容量优化优先、最低价格或跨池多样化分配。

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

  • 对于每个带有 On-Demand 实例的队列,您可以选择应用容量预留选项。

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

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

    • 如果 Amazon EMR 因可用 IP 地址不足而无法启动整个集群,则会尝试找出有足够可用 IP 地址的子网,以启动基本(核心和主)实例集。在这种情况下,任务实例集将进入暂停状态,而不是因错误而终止集群。

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

  • 如果您运行的是 Amazon EMR emr-7.7.0 及更高版本,并且您使用实例集的分配策略,则可以将集群纵向扩展到每个实例集最多 4000 个 EC2 实例和 14000 个 EBS 卷。对于低于 emr-7.7.0 的版本,集群的每个实例集最多只能纵向扩展到 2000 个 EC2 实例和 7000 个 EBS 卷。

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

实例集选项

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

设置目标容量

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

在使用控制台时,默认情况下,Amazon EC2 实例类型的 vCPU 数量将用于目标容量的计数。您可以将此项更改为 Generic units (通用单位),然后为每个 EC2 实例类型指定计数。使用时AWS CLI,您可以为每种实例类型手动分配通用单位。

重要

当您使用选择实例类型时AWS 管理控制台,显示的每种实例类型的 vCPU 数量是该实例类型的 YARN vcore 数,而不是该实例类型的 EC2 vCPU 数量。有关每个实例类型 vCPU 数量的更多信息,请参阅 Amazon EC2 实例类型

对于每个队列,可指定最多 5 个 Amazon EC2 实例类型。如果您使用实例集的分配策略并使用AWS CLI或 Amazon EMR API 创建集群,则每个实例队列最多可以指定 30 个 EC2 实例类型。Amazon EMR 选择这些 EC2 实例类型的任意组合来达到您的目标容量。由于 Amazon EMR 希望完全填满目标容量,因此可能会超过目标。例如,如果存在 2 个未填满的单位,并且 Amazon EMR 只能使用 5 个单位来预置实例,则仍将预置该实例,这意味着将超出目标容量 3 个单位。

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

启动选项

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

注意

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

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

有关竞价型实例的更多信息,请参阅《Amazon EC2 用户指南》中的竞价型实例。有关 On-Demand 实例的更多信息,请参阅 Amazon EC2 用户指南中的On-Demand实例

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

多个子网(可用区)选项

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

主节点(master node)配置

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

实例集的分配策略

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

使用 On-Demand 实例的分配策略

以下分配策略适用于您的 On-Demand 实例:

lowest-price(默认值)

最低价格分配策略从具有可用容量的最低价格池中启动 On-Demand 实例。如果价格最低的池没有可用容量,则 On-Demand 实例来自价格下一个最低且具有可用容量的池。

prioritized

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

注意

如果您使用容量优化的优先级竞价分配策略,Amazon EMR 会在您设置优先级时将相同的优先级应用于您的 On-Demand 实例和竞价型实例。

竞价型实例分配策略

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

price-capacity-optimized(推荐)

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

capacity-optimized

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

capacity-optimized-prioritized

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

注意

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

diversified

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

lowest-price

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

分配策略权限

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

使用On-Demand 分配策略选项时,可选的 On-Demand 容量预留 (ODCR) 可用。容量预留选项允许您为 Amazon EMR 集群首先使用预留容量指定首选项。此功能可确保您的关键工作负载使用您已经使用开放或目标 ODCR 预留的容量。对于非关键工作负载,容量预留首选项允许您指定是否使用预留容量。

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

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

使用分配策略所需的 IAM 权限

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

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

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

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

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

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

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

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

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

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

为您的集群配置实例集

Console
使用控制台创建包含实例集的集群
  1. 登录并打开 Amazon EMR 控制台,网址为。AWS 管理控制台 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择 Create cluster(创建集群)。

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

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

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

    添加 EBS 卷

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

    编辑权重容量

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

    编辑最高 Spot 价格

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

  6. (可选)要为节点添加安全组,请在 Networking(联网)部分展开 EC2 security groups (firewall) [EC2 安全组(防火墙)],然后为每个节点类型选择安全组。

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

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

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

AWS CLI

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

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

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

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

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

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

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

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

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

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

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

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

注意

如果您之前未创建默认 Amazon EMR 服务角色和 EC2 实例配置文件,请先使用 aws emr create-default-roles 创建它们,然后再使用 create-cluster 命令。

例示例: On-Demand 主实例、 On-Demand 核心实例类型为单一实例、默认 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}']
例示例:竞价型主实例、带单个实例类型的竞价型核心实例、默认 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}']
例示例: 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'] \ --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}']
例示例: 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,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}'}
例示例:具有多种加权实例类型的 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}']
例示例:竞价型主实例、无核心实例或任务实例、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}]}}']
例示例:多个自定义 AMI、多种实例类型、按需型主实例、按需型核心实例
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}']
例示例:将任务节点添加到具有多种实例类型和多个自定义 AMI 的正在运行的集群
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) 作为百分比 On-Demand,而任务和主实例队列使用最高竞价价格 (BidPriceAsPercentageofOnDemandPrice) 作为以美元为单位的字符串。

[ { "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 命令可检索实例队列 ID。

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 用作输入。以下示例演示了针对包含主任务实例组和核心任务实例组的集群的命令及其输出。有关完整的响应语法,请参阅ListInstanceFleetsAmazon EMR API 参考》。

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" } ] }