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

配置实例集

注意

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

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

在实例集配置中,您可以为每个队列内的按需实例和竞价型实例https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-spot-instances.html指定目标容量。集群启动时,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 会自动尝试将流量从受影响的可用区路由出去,并尝试根据您的选择在备用可用区启动您创建的新集群。请注意,只有在创建集群时才能选择集群可用区。如果发生可用区中断,现有的集群节点不会在新的可用区中自动重新启动。

注意事项

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

  • 对于每个节点类型(主节点、核心节点和任务节点),您可以有一个实例集。您在 Amazon Web Services Management Console上最多可为每个实例集指定 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 价格,Amazon EMR 会预置竞价型实例。您按 Spot 价格付费,但这不一定是最高 Spot 价格。

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

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

  • 对于每个实例集,您可以为按需型实例应用最低价格分配策略;您无法为按需型实例自定义分配策略。

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

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

实例集选项

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

设置目标容量

为核心队列和任务队列指定所需的目标容量。此操作将确定 Amazon EMR 预置的按需实例和竞价型实例的数量。在指定实例时,您将决定每个实例计入目标的量。在预置按需实例时,该容量将计入按需目标。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 会尝试完成应用程序任务并终止实例以满足新目标。有关更多信息,请参阅在任务完成时终止

启动选项

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

注意

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

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

有关竞价型实例的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的竞价型实例https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-spot-instances.html。有关按需实例的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的按需实例

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

多个子网(可用区)选项

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

主节点(master node)配置

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

实例集的分配策略

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

按需型实例的分配策略

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

竞价型实例分配策略

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

price-capacity-optimized(推荐)

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

capacity-optimized

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

diversified

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

lowest-price

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

分配策略权限

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

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

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

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

使用分配策略所需的 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": "*" } ] }

为您的集群配置实例集

注意

我们重新设计了 Amazon EMR 控制台,以便其易于使用。请参阅 控制台中的新增功能,以了解有关新旧控制台体验差异的信息。

New console
使用新控制台通过实例集创建集群
  1. 登录 Amazon Web Services 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(创建集群)。

Old console
使用旧控制台通过实例集创建集群
  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

  2. 选择创建集群

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

  4. Cluster Composition (集群构成) 下,选择 Instance fleets (实例集)。选择实例集选项时,您可看到用于指定按需型实例和竞价型实例的 Target capacity (目标容量) 选项,该选项显示在 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 (目标容量) 下,定义每个实例集所需的按需型和竞价型实例总数。EMR 可确保实例集中的实例满足按需型和竞价型实例目标容量的请求单位。如果没有为实例集指定按需型或竞价型单位,则不会为该实例集配置容量。

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

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

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

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

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

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

  16. 选择创建集群

Amazon CLI

要使用 Amazon 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" } ] }