配置实例机群 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

配置实例机群

注意

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

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

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

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

您也可以为不同的可用区选择多个子网。当 Amazon EMR 启动集群时,它会在这些子网中查找您指定的实例和购买选项。如果 Amazon EMR 在一个或多个可用区检测到一个Amazon大规模事件,Amazon EMR 会自动尝试将流量从受影响的可用区路由出去,并尝试根据您的选择在备用可用区启动集群。

Considerations

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

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

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

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

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

  • 在指定 Spot 实例的目标容量时:

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

    • 对于每个队列,定义预置 Spot 实例的超时期限。如果 Amazon EMR 无法预置 Spot 容量,您可以改为终止集群或切换到预置按需容量。

  • 对于每个队列,您可以选择应用分配策略 – 按需型实例的最低价格;针对 Spo实例进行容量优化。

  • 对于每个采用按需 allocation strategy - lowest-price 的队列,您可以选择应用容量预留选项。

  • 启动集群之前,请检查您的子网大小。如果您使用任务队列预置集群,但相应子网中没有足够的可用 IP 地址,则该队列将进入暂停状态,而不是终止集群并显示错误。为了避免此问题,我们建议您增加子网中的 IP 地址数量。

实例机群选项

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

设置目标容量

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

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

重要

使用Amazon Web Services Management Console选择实例类型时,每个实例类型显示的 vCPU 数量是该实例的 YARN vcore 数量,而不是该实例类型的 EC2 vCPU 数量。有关每个实例类型的 vCPU 数量的更多信息,请参阅 Amazon EC2 实例类型

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

如果减少目标容量以调整正在运行的集群的大小,Amazon EMR 会尝试完成应用程序任务并终止实例以满足新目标。有关更多信息,请参阅在任务完成时终止。Amazon EMR 为完成大小调整操作设定了 60 分钟的超时时间。在某些情况下,节点可能在 60 分钟后仍运行任务,并且 Amazon EMR 会报告大小调整操作已成功但未满足新目标。

启动选项

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

注意

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

对于每个队列,您还可定义 Provisioning timeout (预置超时)。创建集群后,如果集群正在预置容量,但无法预置足够的 Spot 实例来达到您指定的目标容量,则超时将适用。您可以指定超时期限和要执行的操作。您可以让集群终止或切换到预置的按需容量,以便满足剩余 Spot 容量。当您选择切换到按需时,剩余 Spot 容量将在超时到期后有效地添加到按需目标容量。

在 Amazon Amazon EMR 5.12.1 及更高版本中,您可以选择启动采用优化容量分配的 Spot 和按需型实例机群。可在Amazon Web Services Management Console中或使用 API RunJobFlow 对此分配选项进行设置。使用分配策略选项需要额外的服务角色权限。如果您为集群使用默认 Amazon EMR 服务角色和托管策略(EMR_DefaultRole 和 AmazonEMRServicePolicy_v2),则已包含分配策略选项的权限。如果您不使用默认 Amazon EMR 服务角色和托管式策略,则必须添加它们以后才能使用此选项。请参阅 Amazon EMR 的服务角色(EMR 角色)

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

如果您选择使用价格最低的分配策略来启动按需型实例机群,则可以选择使用容量预留。可以使用 Amazon EMR API RunJobFlow 对容量预留选项进行设置。容量预留需要额外的服务角色权限,您必须添加这些权限后才能使用这些选项。请参阅 使用分配策略所需的 IAM 权限

多个子网(可用区)选项

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

主节点配置

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

实例机群的分配策略

对于 Amazon EMR 5.12.1 及更高版本,您可以将分配策略选项与每个集群节点的按需实例和 Spot 实例结合使用。使用 Amazon CLI 或 Amazon EMR API 和分配策略选项创建集群时,您可以为每个队列指定最多 30 个 Amazon EC2 实例类型,而不是使用默认 Amazon EMR 集群实例机群配置时允许的 5 个实例类型。我们建议您使用分配策略选项,它可以加快集群配置、更准确地进行 Spot 实例分配并减少 Spot 实例中断。

  • 按需型实例使用价格最低的策略,该策略首先启动价格最低的实例。启动按需型实例时,可以选择在您的账户中使用开放或目标容量预留。您可以对主节点、核心节点和任务节点使用开放容量预留。如果使用的按需型实例采用实例机群分配策略,您可能会遇到容量不足的问题。我们建议指定大量实例类型,以实现多样化并降低出现容量不足问题的概率。有关更多信息,请参阅将容量预留与实例机群结合使用

  • Spot 实例使用容量优化的策略,该策略从 Spot 实例池启动 Spot 实例,这些实例池可为要启动的实例数量提供最佳容量。

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

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

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

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

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

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

默认的 Amazon EMR 服务角色和 Amazon EMR 托管式策略(EMR_DefaultRole 和 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": "*" } ] }

使用控制台配置实例机群

要通过实例机群创建集群,请在 Amazon EMR 控制台中使用 Advanced options (高级选项) 配置。

使用控制台通过实例队列创建集群

  1. 通过以下链接打开 Amazon EMR 控制台:https://console.aws.amazon.com/elasticmapreduce/

  2. 选择创建集群

  3. 在控制台窗口的顶部,选择 Go to advanced options (转到高级选项),输入 Software Configuration (软件配置) 选项,然后选择 Next (下一步)

  4. Cluster Composition (集群构成) 下,选择 Instance fleets (集群队列)。选择实例机群选项时,您应该看到用于指定按需实例和 Spot 实例目标容量的选项显示在 Cluster Nodes and Instances (集群节点和实例) 表中。

  5. 对于 Network (网络),输入一个值。如果您为 Network (网络) 选择 VPC,请选择单个 Amazon EC2 Subnet (EC2 子网) 或按住 Ctrl 并单击以选择多个 EC2 子网。您选择的子网必须属于同一类型 (公有或私有)。如果您仅选择了一个子网,则您的集群将在该子网中启动。如果您选择了一组,则当集群启动时,会从该组中选择具有最佳拟合度的子网。

    注意

    您的账户和区域可能为您提供了为 Network (网络) 选择 Launch into EC2-Classic (在 EC2-Classic 中启动) 的选项。如果您选择该选项,请从 EC2 Availability Zones (EC2 可用区) 而非 EC2 Subnets (EC2 子网) 中选择一个或多个项。有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的 Amazon EC2 和 Amazon VPC

  6. Allocation Strategy (分配策略) 下,选中复选框,应用分配策略。

    如果您不想使用新的分配策略选项,请不要勾选复选框。

  7. 如果您想要更改实例机群的默认名称,请在每个 Node type (节点类型) 下,选择铅笔图标,然后输入易识别的名称。如果想要删除 Task (任务) 实例机群,请选择“Task (任务)”行右侧的 X 图标。

  8. 选择 Add/remove instance types to fleet (为队列添加/移除实例类型),然后从主实例机群和核心实例机群的列表中选择最多 5 个实例类型;为任务实例机群添加最多 15 个实例类型。Amazon EMR 可在启动集群时预置这些实例类型的任意组合。

  9. 对于每个核心和任务实例类型,选择您定义该实例加权容量(每个实例都计为 X 个单位)的方式。会将各队列实例类型的 YARN vCore 数量用作默认的加权容量单位,但您可以将该值更改为对应用程序有意义的任何单位。

  10. Target capacity (目标容量) 下,定义每个队列所需的按需和 Spot 实例总数。EMR 可确保队列中的实例满足按需和 Spot 实例目标容量的请求单位。如果没有为队列指定按需或 Spot 单位,则不会为该队列配置容量。

  11. 如果使用 Spot 的目标容量配置队列,您可以输入您的最高 Spot 价格作为“% of On-Demand (% 按需价格)”定价,也可以输入“Dollars($)(美元($))”金额(以 USD 为单位)。

  12. 要在预置实例类型时使 EBS 卷挂载到该类型,请选择“EBS Storage (EBS 存储)”旁边的铅笔图标,然后输入 EBS 配置选项。

  13. 如果您为 Spot units (Spot 单位) 设定了一个即时计数,将根据以下准则设置 Advanced Spot options (高级 Spot选项)

    • Provisioning timeout (预置超时) – 使用这些设置可控制 Amazon EMR 在无法从您指定的 Fleet instance types (队列实例类型) 中预置 Spot 实例时执行的操作。您输入一个超时期限 (以分钟为单位),然后选择 Terminate the cluster (终止集群) 还是 Switch to provisioning On-Demand Instances (切换到预置按需型实例)。如果您选择切换到按需型实例,则分配给按需型实例的容量将计入 Spot 实例的目标容量,并且 Amazon EMR 将预置按需型实例,直至达到 Spot 实例的目标容量。

  14. 选择 Next (下一步),修改其他集群设置,然后选择 Next (下一步)

  15. 如果您选择应用新的分配策略选项,请在 Security Options (安全选项) 设置中,选择一个 EMR role (EMR 角色),并选择 EC2 instance profile (EC2 实例配置文件),其中包含分配策略选项所需的权限。否则,集群创建将失败。

  16. 选择创建集群

使用 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_DefaultRole 和 AmazonEMRServicePolicy_v2)中将自动提供实例队列。如果您为集群使用自定义服务角色或自定义托管式策略,则必须在下一部分内容添加分配策略的新权限。

使用实例队列配置创建集群

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

注意

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

例 示例:按需主实例、带单个实例类型的按需核心实例、默认 VPC

aws Amazon 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 Amazon 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 Amazon 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}']

例 示例:按需主实例、带多个权重实例类型的 Spot 核心实例、 Spot 实例的超时、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}'}

例 示例:按需主实例、带多个权重实例类型的混合核心和任务实例、核心 Spot 实例的超时、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 Amazon 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 Amazon EMR create-cluster —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 Amazon EMR add-instance-fleet —cluster-id j-123456 —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 Amazon 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 Amazon EMR modify-instance-fleet --cluster-id <cluster-id> / --instance-fleet InstanceFleetId='<instance-fleet-id>',TargetOnDemandCapacity=1,TargetSpotCapacity=1

将任务实例机群添加到集群

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

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