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

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

注意

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

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

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

您可以为每个队列指定最多 5 个 Amazon EC2 实例类型以便 Amazon EMR 在实现目标时使用,或者在您使用 AWS CLI 或 Amazon EMR API 以及按需实例和 Spot 实例的分配策略创建集群时,可以为每个队列指定最多 30 个 Amazon EC2 实例类型。

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

使用实例集的注意事项

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

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

  • Amazon EMR 选择任一或所有指定的 Amazon EC2 实例类型,使用 Spot 和按需购买选项进行预置。

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

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

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

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

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

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

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

  • 对于每个包含按需型实例的实例集,您可以选择应用容量预留选项。

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

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

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

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

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

实例集选项

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

设置目标容量

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

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

重要

使用AWS Management Console选择实例类型时,每个实例类型显示的 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 价格。您可以采用按需价格的百分比形式或特定美元金额形式设置此价格。如果可用区中的当前 Spot 价格低于您的最高 Spot 价格,Amazon EMR 会预置竞价型实例。您按 Spot 价格付费,但这不一定是最高 Spot 价格。

注意

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

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

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

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

多个子网(可用区)选项

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

主节点(master node)配置

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

实例集的分配策略

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

按需型实例的分配策略

按需型实例可使用以下分配策略:

lowest-price(默认值)

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

prioritized

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

注意

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

竞价型实例分配策略

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

price-capacity-optimized(推荐)

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

capacity-optimized

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

capacity-optimized-prioritized

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

注意

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

diversified

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

lowest-price

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

分配策略权限

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

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

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

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

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

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

我们会自动将这些权限包含在默认 Amazon EMR 服务角色 EMR_DefaultRole 和 Amazon 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 并打开 Amazon EMR 控制台,网址为 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 价格。您可以采用按需价格的百分比形式或特定美元金额形式设置此价格。如果可用区中的当前 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 命令。

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

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

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

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

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

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

注意

如果您之前未创建默认 Amazon EMR 服务角色和 EC2 实例配置文件,请先使用 aws emr create-default-roles 创建它们,然后再使用 create-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}']
例 示例:竞价型主实例、带单个实例类型的竞价型核心实例、默认 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}']
例 示例:竞价型主实例、无核心实例或任务实例、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 文件指定主实例集、核心实例集和任务实例集,如下例所示。核心实例集使用以按需价格的百分比表示的最高 Spot 价格 (BidPrice),而任务实例集和主实例集使用以 USD 表示的最高 Spot 价格 (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 用作输入。以下示例演示了针对包含主任务实例组和核心任务实例组的集群的命令及其输出。有关完整响应语法,请参阅《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" } ] }