本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Amazon EMR 集群配置统一实例组
对于实例组配置,每个节点类型(主节点、核心节点或任务节点)均包含相同的实例类型和相同的实例购买选项:按需或 Spot。在创建实例组时,您可以指定这些设置。它们在以后均不可更改。但您可以将类型和购买选项相同的实例添加到核心和任务实例组。您也可以删除实例。
如果集群的按需型实例与您账户中可用的开放容量预留属性(实例类型、平台、租赁和可用区)相匹配,则会自动应用容量预留。您可以对主节点、核心节点和任务节点使用开放容量预留。但是,使用实例组预置集群时,不能使用目标容量预留,也不能阻止在具有匹配属性的开放容量预留中启动实例。如果要使用目标容量预留或阻止在开放容量预留中启动实例,请改用实例集。有关更多信息,请参阅在 Amazon EMR 中将容量预留与实例集结合使用。
要在创建集群后添加不同的实例类型,您可以添加其它任务实例组。您可以为每个实例组选择不同的实例类型和购买选项。有关更多信息,请参阅使用 Amazon EMR 集群扩展来适应不断变化的工作负载。
启动实例时,按需实例的容量预留首选项默认设置为 open
,这样按需实例才能在任何具有匹配属性(实例类型、平台、可用区)的开放容量预留中运行。有关按需容量预留的更多信息,请参阅在 Amazon EMR 中将容量预留与实例集结合使用。
此部分介绍如何使用统一实例组创建集群。有关通过手动添加或删除实例或使用自动扩展来修改现有实例组的更多信息,请参阅管理 Amazon EMR 集群。
使用控制台配置统一实例组
使用创建具有统一实例组的集群 AWS CLI
要使用 AWS CLI指定集群的实例组配置,请将 create-cluster
命令与 --instance-groups
参数结合使用。除非您为实例组指定 BidPrice
实参,否则 Amazon EMR 将使用按需型实例选项。有关使用按需实例和各种集群选项启动统一实例组的 create-cluster
命令的示例,请在命令行上键入 aws emr create-cluster help
,或参阅《AWS CLI 命令参考》中的 create-cluster。
您可以使用在 AWS CLI 使用竞价型实例的集群中创建统一的实例组。提供的 Spot 价格取决于可用区。使用 CLI 或 API 时,您可以使用AvailabilityZone
参数(如果您使用的是 EC2-classic 网络)或参数的SubnetID
--ec2-attributes
参数来指定可用区。您选择的可用区或子网适用于集群,因此可用于所有实例组。如果您未明确指定可用区或子网,Amazon EMR 将在启动集群时选择具有最低 Spot 价格的可用区。
以下示例演示了 create-cluster
命令,该命令创建主实例组、核心实例组和两个任务实例组,这些实例组均使用竞价型实例。myKey
替换为您的 Amazon EC2 密钥对的名称。
注意
为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字符 (^)。
aws emr create-cluster --name "
MySpotCluster
" \ --release-labelemr-7.7.0
\ --use-default-roles \ --ec2-attributes KeyName=myKey
\ --instance-groups \ InstanceGroupType=MASTER
,InstanceType=m5.xlarge
,InstanceCount=1
,BidPrice=0.25
\ InstanceGroupType=CORE
,InstanceType=m5.xlarge
,InstanceCount=2
,BidPrice=0.03
\ InstanceGroupType=TASK
,InstanceType=m5.xlarge
,InstanceCount=4
,BidPrice=0.03
\ InstanceGroupType=TASK
,InstanceType=m5.xlarge
,InstanceCount=2
,BidPrice=0.04
通过 CLI,您可以创建统一的实例组集群,为实例组的每种实例类型指定唯一的自定义 AMI。这允许您在同一实例组中使用不同的实例架构。每种实例类型都必须使用具有匹配架构的自定义 AMI。例如,您可以使用 x86_64 架构自定义 AMI 配置 m5.xlarge 实例类型和带有相应的AWS AARCH64
(ARM) 架构自定义 AMI 的 m6g.xlarge 实例类型。
以下示例显示了使用两种实例类型创建的统一实例组集群,每种实例类型都有自定义 AMI。请注意,自定义AMIs 仅在实例类型级别指定,而不是在集群级别指定。这是为了避免实例类型 AMIs 与集群级别的 AMI 发生冲突,这会导致集群启动失败。
aws emr create-cluster --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-groups \ InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 \ InstanceGroupType=CORE,InstanceType=m6g.xlarge,InstanceCount=1,CustomAmiId=ami-234567
您可以将多个自定义 AMIs 添加到正在运行的集群的实例组中。CustomAmiId
参数可以与add-instance-groups
命令一起使用,如以下示例所示。
aws emr add-instance-groups --cluster-id j-123456 \ --instance-groups \ InstanceGroupType=Task,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456
使用 Java SDK 创建实例组
您实例化一个 InstanceGroupConfig
对象,此对象指定集群的实例组配置。要使用竞价型实例,您可以在 withBidPrice
对象上设置 withMarket
和 InstanceGroupConfig
属性。以下代码演示了如何定义运行竞价型实例的主实例组、核心实例组和任务实例组。
InstanceGroupConfig instanceGroupConfigMaster = new InstanceGroupConfig() .withInstanceCount(1) .withInstanceRole("MASTER") .withInstanceType("m4.large") .withMarket("SPOT") .withBidPrice("0.25"); InstanceGroupConfig instanceGroupConfigCore = new InstanceGroupConfig() .withInstanceCount(4) .withInstanceRole("CORE") .withInstanceType("m4.large") .withMarket("SPOT") .withBidPrice("0.03"); InstanceGroupConfig instanceGroupConfigTask = new InstanceGroupConfig() .withInstanceCount(2) .withInstanceRole("TASK") .withInstanceType("m4.large") .withMarket("SPOT") .withBidPrice("0.10");