Amazon 与EC2置放群组EMR集成 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon 与EC2置放群组EMR集成

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

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

Amazon EC2 的初始限制是,每个 AWS 区域只能启动 500 个支持置放群组策略的集群。请联系 AWS 支持部门,请求增加允许的置放群组数量。您可以通过跟踪亚马逊与亚马逊EC2置放群组策略EMR关联的键值对来识别亚马逊EMR创建的EMR置放群组。有关EC2集群实例标签的更多信息,请参阅在 Amazon 中查看集群实例 EC2

将置放群组托管策略附加到 Amazon EMRrole

置放群组策略需要一个名为的托管策略AmazonElasticMapReducePlacementGroupPolicy,该策略EMR允许亚马逊在亚马逊上创建、删除和描述置放群组EC2。在启动具有多个主节点的 Amazon EMR 集群EMR之前,您必须附加AmazonElasticMapReducePlacementGroupPolicy到 Amazon 的服务角色。

或者,您可以将AmazonEMRServicePolicy_v2托管策略附加到 Amazon EMR 服务角色,而不是置放群组托管策略。 AmazonEMRServicePolicy_v2允许与 Amazon EC2 上的置放群组相同的访问权限AmazonElasticMapReducePlacementGroupPolicy。有关更多信息,请参阅 Amazon 的服务角色EMR(EMR角色)

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

注意

由于AmazonElasticMapReducePlacementGroupPolicy托管策略是自动更新的,因此此处显示的策略可能是 out-of-date。使用 AWS 管理控制台查看当前策略。

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

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

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

每次您使用此角色启动包含多个主节点的 Amazon EMR 集群时,Amazon 都会EMR尝试启动一个应用于其主节点的SPREAD策略的集群。如果您使用的角色没有AmazonElasticMapReducePlacementGroupPolicy关联置放群组托管策略,Amazon 会EMR尝试启动一个包含多个主节点但没有置放EMR群组策略的 Amazon 集群。

如果您启动具有多个主节点的亚马逊EMR集群,其placement-group-configs参数使用亚马逊EMRAPI或CLI,则EMR只有在亚马逊AmazonElasticMapReducePlacementGroupPolicy附加EMRrole了置放群组托管策略的情况下,亚马逊才会启动该集群。如果 Amazon EMRrole 未附加该策略,则具有多个主节点的 Amazon EMR 集群启动将失败。

Amazon EMR API
例 示例-使用置放群组策略从 Amazon 启动包含多个主节点的实例组集群 EMR API

当您使用 RunJobFlow 操作创建包含多个主节点的 Amazon EMR 集群时,请将该PlacementGroupConfigs属性设置为以下内容。目前,MASTER 实例角色会自动使用 SPREAD 作为置放群组策略。

{ "Name":"ha-cluster", "PlacementGroupConfigs":[ { "InstanceRole":"MASTER" } ], "ReleaseLabel": emr-6.15.0, "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" }
  • Replace(替换) ha-cluster 使用您的高可用性集群的名称。

  • Replace(替换) subnet-22XXXX01 使用您的子网 ID。

  • 更换 ec2_key_pair_name 使用您用于此集群的 EC2 key pair 的名称。EC2key pair 是可选的,只有在您想使用访问集群SSH时才需要使用密钥。

AWS CLI
例 示例 – 使用置放群组策略从 AWS Command Line Interface中启动具有多个主节点的实例集集群

当您使用 RunJobFlow 操作创建包含多个主节点的 Amazon EMR 集群时,请将该PlacementGroupConfigs属性设置为以下内容。目前,MASTER 实例角色会自动使用 SPREAD 作为置放群组策略。

aws emr create-cluster \ --name "ha-cluster" \ --placement-group-configs InstanceRole=MASTER \ --release-label emr-6.15.0 \ --instance-fleets '[ { "InstanceFleetType": "MASTER", "TargetOnDemandCapacity": 3, "TargetSpotCapacity": 0, "LaunchSpecifications": { "OnDemandSpecification": { "AllocationStrategy": "lowest-price" } }, "InstanceTypeConfigs": [ { "WeightedCapacity": 1, "BidPriceAsPercentageOfOnDemandPrice": 100, "InstanceType": "m5.xlarge" }, { "WeightedCapacity": 1, "BidPriceAsPercentageOfOnDemandPrice": 100, "InstanceType": "m5.2xlarge" }, { "WeightedCapacity": 1, "BidPriceAsPercentageOfOnDemandPrice": 100, "InstanceType": "m5.4xlarge" } ], "Name": "Master - 1" }, { "InstanceFleetType": "CORE", "TargetOnDemandCapacity": 5, "TargetSpotCapacity": 0, "LaunchSpecifications": { "OnDemandSpecification": { "AllocationStrategy": "lowest-price" } }, "InstanceTypeConfigs": [ { "WeightedCapacity": 1, "BidPriceAsPercentageOfOnDemandPrice": 100, "InstanceType": "m5.xlarge" }, { "WeightedCapacity": 2, "BidPriceAsPercentageOfOnDemandPrice": 100, "InstanceType": "m5.2xlarge" }, { "WeightedCapacity": 4, "BidPriceAsPercentageOfOnDemandPrice": 100, "InstanceType": "m5.4xlarge" } ], "Name": "Core - 2" } ]' \ --ec2-attributes '{ "KeyName": "ec2_key_pair_name", "InstanceProfile": "EMR_EC2_DefaultRole", "SubnetIds": [ "subnet-22XXXX01", "subnet-22XXXX02" ] }' \ --service-role EMR_DefaultRole \ --applications Name=Hadoop Name=Spark
  • Replace(替换) ha-cluster 使用您的高可用性集群的名称。

  • 更换 ec2_key_pair_name 使用您用于此集群的 EC2 key pair 的名称。EC2key pair 是可选的,只有在您想使用访问集群SSH时才需要使用密钥。

  • Replace(替换) subnet-22XXXX01 以及 subnet-22XXXX02使用您的子网IDs。

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

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

  • AmazonElasticMapReducePlacementGroupPolicy从 Amazon 中移除置放群组托管策略EMRrole,或者

  • 使用 Amazon EMRAPI 或CLI选择NONE作为置放群组策略,使用placement-group-configs参数启动包含多个主节点的集群。

Amazon EMR API
例 — 使用 Amazon 启动具有多个主节点的集群,无需置放群组策略EMRAPI。

使用 RunJobFlow 操作创建具有多个主节点的集群时,请将该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" }
  • Replace(替换) ha-cluster 使用您的高可用性集群的名称。

  • Replace(替换) subnet-22XXXX01 使用您的子网 ID。

  • 更换 ec2_key_pair_name 使用您用于此集群的 EC2 key pair 的名称。EC2key pair 是可选的,只有在您想使用访问集群SSH时才需要使用密钥。

Amazon EMR CLI
例 — 使用 Amazon 启动具有多个主节点的集群,无需置放群组策略EMRCLI。

使用 RunJobFlow 操作创建具有多个主节点的集群时,请将该PlacementGroupConfigs属性设置为以下内容。

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
  • Replace(替换) ha-cluster 使用您的高可用性集群的名称。

  • Replace(替换) subnet-22XXXX01 使用您的子网 ID。

  • 更换 ec2_key_pair_name 使用您用于此集群的 EC2 key pair 的名称。EC2key pair 是可选的,只有在您想使用访问集群SSH时才需要使用密钥。

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

您可以使用 Amazon d EMR escribe 集群API来查看附加到具有多个主节点的集群的置放群组策略配置。

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