Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

配置统一实例组

对于实例组配置,每个节点类型 (主节点、核心节点或任务节点) 均包含相同的实例类型和相同的实例购买选项:按需或竞价型。在创建实例组时指定这些设置,并且这些设置稍后无法更改。但您可以将类型和购买选项相同的实例添加到核心和任务实例组。您也可以删除实例。

要在创建集群后添加不同的实例类型,您可以添加其他任务实例组,并为每个实例组指定不同的实例类型和购买选项。有关更多信息,请参阅 扩展集群资源

此部分介绍如何使用统一实例组创建集群。有关通过手动添加或删除实例或使用自动扩展来修改现有实例组的更多信息,请参阅管理集群

使用控制台配置统一实例组

在创建集群时,以下过程涵盖了 Advanced options。此外,借助 Quick options,可使用实例组配置创建集群。有关使用 Quick Options 的更多信息,请参阅入门教程。

借助控制台,使用统一实例组创建集群

  1. Open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. 选择 Create cluster

  3. 选择 Go to advanced options,输入 Software Configuration 选项,然后选择 Next

  4. Hardware Configuration 屏幕中,将 Uniform instance groups 保持选中状态。

  5. 选择 Network,然后选择要在其中运行集群的 EC2 Subnet。有关 VPC 和子网的更多信息,请参阅计划和配置联网

    注意

    您的账户和区域可能为您提供为 Network 选择 Launch into EC2-Classic 的选项。如果您选择该选项,请选择 EC2 Availability Zone 而非 EC2 Subnet。有关更多信息,请参阅 Amazon EC2 User Guide for Linux Instances 中的 Amazon EC2 和 Amazon VPC

  6. 在每个 Node type 行中:

    • 如果您需要更改实例组的默认名称,请在 Node type 下,单击铅笔图标,然后输入易识别的名称。若要删除 Task 实例组,请单击 X 图标或选择 Add task instance group 以添加其他 Task 实例组。

    • Instance type 下,单击铅笔图标,然后选择要用于该节点类型的实例类型。

      重要

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

    • Instance count 下,输入要运行该节点类型的实例的数量。只有一个 Master 节点类型的实例。

    • Purchasing option 下,选择 On-demand,或选择 Spot 并输入希望为每个实例支付的最高现货价格。当选定的 EC2 子网的可用区中的现货价格低于最高现货价格时,此实例组中的实例将启动。

      提示

      将鼠标指针置于 Maximum Spot price 的信息工具提示的上方可查看当前区域中所有可用区的现货价格。最低现货价格用绿色显示。您可能需要使用此信息来告知您的 EC2 Subnet 选择。

    • Auto Scaling for Core and Task node types 下,选择铅笔图标,然后配置自动扩展选项。有关更多信息,请参阅 使用 Amazon EMR 中的自动扩展功能

  7. 要将其他任务实例组添加到集群,请单击和配置实例组的设置,如上一个步骤中所述。

  8. 选择 Next,修改其他集群设置,然后启动集群。

使用 AWS CLI 通过统一实例组创建集群

要使用 AWS CLI 指定集群的实例组配置,请将 create-cluster 命令与 --instance-groups 参数结合使用。除非您为实例组指定 BidPrice 参数,否则 Amazon EMR 将使用按需购买选项。有关使用按需实例和各种集群选项启动统一实例组的 create-cluster 命令的示例,请在命令行上键入 aws emr create-cluster help ,或参阅 AWS CLI Command Reference 中的 create-cluster

您可以使用 AWS CLI 在群集中创建使用 Spot 实例的统一实例组。提供的现货价格取决于可用区。在使用 CLI 或 API 时,您可以使用 --ec2-attributes 形参的 AvailabilityZone 实参 (如果您使用的是 EC2-classic 网络) 或 SubnetID 实参来指定可用区。您选择的可用区或子网适用于集群,因此可用于所有实例组。如果您未明确指定可用区或子网,Amazon EMR 将在启动集群时选择具有最低现货价格的可用区。

以下示例演示了一个 create-cluster 命令,该命令创建主实例组、核心实例组和两个任务实例组,它们都使用 Spot 实例。将 myKey 替换为您的 EC2 密钥对的名称。

注意

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

Linux、UNIX 和 macOS 用户:

aws emr create-cluster --name "MySpotCluster" --release-label emr-5.13.0 \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceType=m4.large,InstanceCount=1,BidPrice=0.25 \ InstanceGroupType=CORE,InstanceType=m4.large,InstanceCount=2,BidPrice=0.03 \ InstanceGroupType=TASK,InstanceType=m4.large,InstanceCount=4,BidPrice=0.03 \ InstanceGroupType=TASK,InstanceType=m4.large,InstanceCount=2,BidPrice=0.04

Windows 用户:

aws emr create-cluster --name "Spot cluster" --release-label emr-5.13.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceType=m4.large,InstanceCount=1,BidPrice=0.25 InstanceGroupType=CORE,BidPrice=0.03,InstanceType=m4.large,InstanceCount=2 InstanceGroupType=TASK,BidPrice=0.03,InstanceType=m4.large,InstanceCount=4 InstanceGroupType=TASK,BidPrice=0.04,InstanceType=m4.large,InstanceCount=2

使用 Java 开发工具包创建实例组

您实例化一个 InstanceGroupConfig 对象,此对象指定集群的实例组配置。要使用 Spot 实例,您可以在 InstanceGroupConfig 对象上设置 withBidPricewithMarket 属性。以下代码演示如何定义运行 Spot 实例的主实例组、核心实例组和任务实例组。

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”);