Amazon EMR 与 EC2 置放群组的集成 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon EMR 与 EC2 置放群组的集成

在 Amazon EC2 上启动 Amazon EMR 多主节点 (master node) 集群时,您可以选择使用置放群组策略来指定您希望如何部署主节点 (master node) 实例来防止硬件故障。

从 Amazon EMR 版本 5.23.0 开始支持置放群组策略,并可作为多主节点 (master node) 集群的选项。目前,置放群组策略仅支持主节点 (master node) 类型,并会将 SPREAD 策略应用于这些主节点 (master node)。SPREAD 策略将一小组实例放置在单独的基础硬件上,以防止发生硬件故障时出现多个主节点 (master node) 丢失的问题。请注意:如果没有足够的唯一硬件来满足请求,实例启动请求可能会失败。有关 EC2 置放策略和限制的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的置放群组

Amazon EC2 的初始限制是每个Amazon区域可以启动 500 个启用置放群组策略的集群。联系 Amazon Sopport,请求增加允许的置放群组的数量。通过跟踪 Amazon EMR 与 Amazon EMR 置放组策略关联的键值对,可以识别 Amazon EMR 创建的 EC2 置放组 EMR。有关 EC2 集群实例类型的更多信息,请参阅查看 Amazon EC2 中的集群实例

将置放群组托管策略附加到 EMR 角色

置放群组策略需要一个名为 AmazonElasticMapReducePlacementGroupPolicy 的托管策略,以允许 Amazon EMR 在 Amazon EC2 上创建、删除和描述置放群组。必须先将托管策略附加到 Amazon EMR 角色再启动 Amazon EMR 多主节点集群。可以将 Amazon EMR 托管策略 AmazonEMRServicePolicy_v2 附加到 Amazon EMR 角色来取代置放群组托管策略。AmazonEMRServicePolicy_v2 可以与 AmazonElasticMapReducePlacementGroupPolicy 一样,访问 Amazon EC2 上的置放群组。有关更多信息,请参阅Amazon EMR 的服务角色(EMR 角色)

AmazonElasticMapReducePlacementGroupPolicy 托管策略是由 Amazon EMR 创建和管理的以下 JSON 文本。

注意

由于 AmazonElasticMapReducePlacementGroupPolicy 托管策略是自动更新的,因此,此处显示的策略可能已过期。使用Amazon管理控制台查看当前的策略。

{ "Version":"2012-10-17", "Statement":[ { "Resource":"*", "Effect":"Allow", "Action":[ "ec2:DeletePlacementGroup", "ec2:DescribePlacementGroups" ] }, { "Resource":"arn:aws:ec2:*:*:placement-group/EMR_*", "Effect":"Allow", "Action":[ "ec2:CreatePlacementGroup" ] } ] }

使用置放群组策略启动 Amazon EMR 多主节点集群

要使用置放群组策略启动 Amazon EMR 多主节点集群,请将置放群组托管策略 AmazonElasticMapReducePlacementGroupPolicy 附加到 Amazon EMR 角色。有关更多信息,请参阅将置放群组托管策略附加到 EMR 角色

每次使用此角色启动 Amazon EMR 多主节点集群时,Amazon EMR 都会尝试启动将 SPREAD 策略应用于其主节点的集群。如果您使用的角色未将置放群组托管式策略 AmazonElasticMapReducePlacementGroupPolicy 附加到自身,Amazon EMR 会尝试在没有置放群组策略的情况下启动 Amazon EMR 多主节点集群。

如果您使用 EMR API 或 CLI 通过 placement-group-configs 参数来启动 Amazon EMR 多主节点集群,则 Amazon EMR 仅在 EMR 角色附加置放组托管式策略 AmazonElasticMapReducePlacementGroupPolicy 时启动集群。如果 EMR 角色没有附加策略,则 Amazon EMR 多主节点集群将启动失败。

例 – 使用 EMR API 启动附加了置放群组策略的 Amazon EMR 多主节点集群。

使用 RunJobFlow 操作创建 Amazon EMR 多主节点集群时,请将 PlacementGroupConfigs 属性进行如下设置。目前,MASTER 实例角色会自动使用 SPREAD 作为置放群组策略。

{ "Name":"ha-cluster", "PlacementGroupConfigs":[ { "InstanceRole":"MASTER" } ], "ReleaseLabel":"emr-5.30.1", "Instances":{ "ec2SubnetId":"subnet-22XXXX01", "ec2KeyName":"ec2_key_pair_name", "InstanceGroups":[ { "InstanceCount":3, "InstanceRole":"MASTER", "InstanceType":"m5.xlarge" }, { "InstanceCount":4, "InstanceRole":"CORE", "InstanceType":"m5.xlarge" } ] }, "JobFlowRole":"EMR_EC2_DefaultRole", "ServiceRole":"EMR_DefaultRole" }
  • ha-cluster 替换为您的高可用性集群的名称。

  • subnet-22XXXX01 替换为您的子网 ID。

  • ec2_key_pair_name 替换为您用于此集群的 EC2 密钥对的名称。EC2 密钥对是可选的,仅当您希望使用 SSH 访问集群时是必需的。

例 – 使用 EMR CLI 启动附加了置放群组策略的 Amazon EMR 多主节点集群。

aws emr create-cluster \ --name "ha-cluster" \ --placement-group-configs InstanceRole=MASTER \ --release-label emr-5.30.1 \ --instance-groups InstanceGroupType=MASTER,InstanceCount=3,InstanceType=m5.xlarge InstanceGroupType=CORE,InstanceCount=4,InstanceType=m5.xlarge \ --ec2-attributes KeyName=ec2_key_pair_name,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-22XXXX01 \ --service-role EMR_DefaultRole \ --applications Name=Hadoop Name=Spark
  • ha-cluster 替换为您的高可用性集群的名称。

  • subnet-22XXXX01 替换为您的子网 ID。

  • ec2_key_pair_name 替换为您用于此集群的 EC2 密钥对的名称。EC2 密钥对是可选的,仅当您希望使用 SSH 访问集群时是必需的。

在未附加置放群策略的情况下启动 Amazon EMR 多主节点集群

要让 Amazon EMR 多主节点集群在未附加置放群策略的情况下启动主节点,您需要执行以下操作之一:

  • 从 EMR 角色中删除置放群组托管策略 AmazonElasticMapReducePlacementGroupPolicy,或

  • 使用 EMR API 或 CLI 通过 placement-group-configs 参数启动 Amazon EMR 多主节点集群,选择 NONE 作为置放群组策略。

例 – 使用 EMR API 启动未附加置放群组策略的 Amazon EMR 多主节点集群。

使用 RunJobFlow 操作创建 Amazon EMR 多主节点集群时,请将 PlacementGroupConfigs 属性进行如下设置。

{ "Name":"ha-cluster", "PlacementGroupConfigs":[ { "InstanceRole":"MASTER", "PlacementStrategy":"NONE" } ], "ReleaseLabel":"emr-5.30.1", "Instances":{ "ec2SubnetId":"subnet-22XXXX01", "ec2KeyName":"ec2_key_pair_name", "InstanceGroups":[ { "InstanceCount":3, "InstanceRole":"MASTER", "InstanceType":"m5.xlarge" }, { "InstanceCount":4, "InstanceRole":"CORE", "InstanceType":"m5.xlarge" } ] }, "JobFlowRole":"EMR_EC2_DefaultRole", "ServiceRole":"EMR_DefaultRole" }
  • ha-cluster 替换为您的高可用性集群的名称。

  • subnet-22XXXX01 替换为您的子网 ID。

  • ec2_key_pair_name 替换为您用于此集群的 EC2 密钥对的名称。EC2 密钥对是可选的,仅当您希望使用 SSH 访问集群时是必需的。

例 – 使用 EMR CLI 启动未附加置放群组策略的 Amazon EMR 多主节点集群。

aws emr create-cluster \ --name "ha-cluster" \ --placement-group-configs InstanceRole=MASTER,PlacementStrategy=NONE \ --release-label emr-5.30.1 \ --instance-groups InstanceGroupType=MASTER,InstanceCount=3,InstanceType=m5.xlarge InstanceGroupType=CORE,InstanceCount=4,InstanceType=m5.xlarge \ --ec2-attributes KeyName=ec2_key_pair_name,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-22XXXX01 \ --service-role EMR_DefaultRole \ --applications Name=Hadoop Name=Spark
  • ha-cluster 替换为您的高可用性集群的名称。

  • subnet-22XXXX01 替换为您的子网 ID。

  • ec2_key_pair_name 替换为您用于此集群的 EC2 密钥对的名称。EC2 密钥对是可选的,仅当您希望使用 SSH 访问集群时是必需的。

检查附加到 Amazon EMR 多主节点集群的置放群组策略配置

您可以使用 Amazon EMR 描述集群 API,来查看附加到 Amazon EMR 多主节点集群的置放群组策略配置。

aws emr describe-cluster --cluster-id "j-xxxxx" { "Cluster":{ "Id":"j-xxxxx", ... ... "PlacementGroups":[ { "InstanceRole":"MASTER", "PlacementStrategy":"SPREAD" } ] } }