Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon 与EC2置放群组EMR集成
当您在 Amazon 上启动 Amazon EMR 多主节点集群时EC2,您可以选择使用置放群组策略来指定您希望如何部署主节点实例以防硬件故障。
从 Amazon EMR 版本 5.23.0 开始,支持置放群组策略,作为多个主节点集群的选项。目前,置放群组策略仅支持主节点类型,并会将 SPREAD
策略应用于这些主节点。SPREAD
策略将一小组实例放置在单独的基础硬件上,以防止发生硬件故障时出现多个主节点丢失的问题。请注意:如果没有足够的唯一硬件来满足请求,实例启动请求可能会失败。有关EC2放置策略和限制的更多信息,请参阅 Linux 实例EC2用户指南中的置放群组。
Amazon EC2 的初始限制是,每个 Amazon 区域只能启动 500 个支持置放群组策略的集群。请联系 Amazon 支持部门,请求增加允许的置放群组数量。您可以通过跟踪亚马逊与亚马逊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。使用 Amazon 管理控制台查看当前策略。
{
"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 集群。
如果您启动具有多个主节点且placement-group-configs
参数为的亚马逊EMR集群CLI,则EMR只有在亚马逊EMRAPIAmazonElasticMapReducePlacementGroupPolicy
附加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"
}
- Amazon CLI
-
例 示例 – 使用置放群组策略从 Amazon 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
在未附加置放群组策略的情况下启动多主节点集群
要让多主节点集群在未附加置放群组策略的情况下启动主节点,您需要执行以下操作之一:
- 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"
}
- 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
检查附加多主节点集群的置放群组策略配置
您可以使用 Amazon d EMR escribe 集群API来查看附加到具有多个主节点的集群的置放群组策略配置。
aws emr describe-cluster --cluster-id "j-xxxxx"
{
"Cluster":{
"Id":"j-xxxxx",
...
...
"PlacementGroups":[
{
"InstanceRole":"MASTER",
"PlacementStrategy":"SPREAD"
}
]
}
}