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

配置统一实例组

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

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

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

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

在创建集群时,以下过程涵盖了 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 (EC2 子网)。您选择的子网将与可用性组关联,后者与每个子网一起列出。有关更多信息,请参阅 计划和配置联网

    注意

    您的账户和区域可能为您提供为 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。如果选择 Spot,请为 Spot 实例选择最高价的选项。默认情况下,选择 Use on-demand as max price (使用按需价格作为最高价格)。您可以选择 Set max $/hr (设定最高价($/小时)),然后输入您的最高价。您选择的 EC2 Subnet (EC2 子网) 的可用区价格低于 Maximum Spot price (最高 Spot 价格)

      提示

      将鼠标移到 Spot 的信息工具提示上方可查看当前区域中可用区的当前 Spot 价格。最低 Spot 价格用绿色显示。您可能需要使用此信息来更改您的 EC2 Subnet (EC2 子网) 选择。

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

  7. 根据需要选择 Add task instance group (添加任务实例组) 并按照上一步中所述配置设置。

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

以下示例演示了一个 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.14.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.14.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”);