Amazon EMR 與 EC2 放置群組整合 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EMR 與 EC2 放置群組整合

在 Amazon EC2 上啟動 Amazon EMR 多個主節點叢集時,您可以選擇使用放置群組策略來指定希望如何部署主節點執行個體以防止硬體故障。

從 Amazon EMR 5.23.0 版開始,支援放置群組策略作為多個主節點叢集的選項。目前,放置群組策略僅支援主節點類型,且 SPREAD 策略會套用至這些主節點。SPREAD 策略將一小組執行個體放置在單獨的基礎硬體上,以防止在發生硬體故障時遺失多個主節點。請注意,如果沒有足夠的唯一硬體來滿足請求,執行個體啟動請求可能會失敗。如需 EC2 放置策略和限制的詳細資訊,請參閱《EC2 Linux 執行個體使用者指南》中的放置群組

Amazon EC2 對每 AWS 個區域可啟動的 500 個已啟用置放群組策略的叢集有初始限制。請連絡 AWS 支援部門,要求增加允許的置放群組數目。您可以透過追蹤 Amazon EMR 與 Amazon EMR 放置群組策略關聯的金鑰值對,來識別 Amazon EMR 建立的 EC2 放置群組。如需有關 EC2 叢集執行個體標籤的詳細資訊,請參閱 檢視 Amazon EC2 中的叢集執行個體

將放置群組受管政策附接至 Amazon EMR 角色

放置群組策略需要稱為 AmazonElasticMapReducePlacementGroupPolicy 的受管政策,該政策允許 Amazon EMR 在 Amazon EC2 上建立、刪除和描述放置群組。在啟動具有多個主節點的 Amazon EMR 叢集之前,您必須將 AmazonElasticMapReducePlacementGroupPolicy 連接至 Amazon EMR 的服務角色。

您也可以將 AmazonEMRServicePolicy_v2 受管政策附接至 Amazon EMR 服務角色而非放置群組受管政策。AmazonEMRServicePolicy_v2 允許對 Amazon EC2 上的放置群組進行與 AmazonElasticMapReducePlacementGroupPolicy 相同的存取。如需詳細資訊,請參閱 Amazon EMR 的服務角色 (EMR 角色)

AmazonElasticMapReducePlacementGroupPolicy 受管政策為 Amazon EMR 建立和管理的下列 JSON 文字。

注意

由於受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" ] } ] }

使用放置群組策略啟動具有多個主節點的 Amazon EMR 叢集

若要使用放置群組策略啟動具有多個主節點的 Amazon EMR 叢集,請將放置群組受管政策 AmazonElasticMapReducePlacementGroupPolicy 連接至 Amazon EMR 角色。如需詳細資訊,請參閱 將放置群組受管政策附接至 Amazon EMR 角色

每當您使用此角色啟動具有多個主節點的 Amazon EMR 叢集時,Amazon EMR 都會嘗試啟動 SPREAD 策略已套用至主節點的叢集。如果您使用未連接放置群組受管政策 AmazonElasticMapReducePlacementGroupPolicy 的角色,Amazon EMR 會嘗試啟動具有多個主節點但沒有置放群組策略的 Amazon EMR 叢集。

如果您使用 Amazon EMR API 或 CLI,以 placement-group-configs 參數啟動具有多個主節點的 Amazon EMR 叢集,則只有在 Amazon EMR 角色已連接放置群組受管政策 AmazonElasticMapReducePlacementGroupPolicy 時,Amazon EMR 才會啟動該叢集。如果 Amazon EMR 角色未連接該政策,則具有多個主節點的 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" }
  • ha-cluster 取代為您的高可用性叢集名稱。

  • subnet-22XXXX01 取代為您的子網路 ID。

  • ec2_key_pair_name 取代為此叢集的 EC2 金鑰對名稱。EC2 金鑰對是選用的,且只有在您想要使用 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
  • ha-cluster 取代為您的高可用性叢集名稱。

  • ec2_key_pair_name 取代為此叢集的 EC2 金鑰對名稱。EC2 金鑰對是選用的,且只有在您想要使用 SSH 存取叢集時才需要。

  • 使用您的子網路 ID 取代 subnet-22XXXX01subnet-22XXXX02

啟動具有多個主節點但沒有放置群組策略的叢集

若要讓具有多個主節點的叢集啟動沒有放置群組策略的主節點,您需要執行下列其中一項:

  • 從 Amazon EMR 角色移除放置群組受管政策 AmazonElasticMapReducePlacementGroupPolicy,或

  • 使用 Amazon EMR API 或 CLI 選擇 NONE 作為放置群組策略,透過 placement-group-configs 參數啟動具有多個主節點的叢集。

Amazon EMR API
範例 – 使用 Amazon EMR API 啟動具有多個主節點但沒有放置群組策略的叢集。

使用此 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" }
  • ha-cluster 取代為您的高可用性叢集名稱。

  • subnet-22XXXX01 取代為您的子網路 ID。

  • ec2_key_pair_name 取代為此叢集的 EC2 金鑰對名稱。EC2 金鑰對是選用的,且只有在您想要使用 SSH 存取叢集時才需要。

Amazon EMR CLI
範例 – 使用 Amazon EMR CLI 啟動具有多個主節點但沒有放置群組策略的叢集。

使用此 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
  • ha-cluster 取代為您的高可用性叢集名稱。

  • subnet-22XXXX01 取代為您的子網路 ID。

  • ec2_key_pair_name 取代為此叢集的 EC2 金鑰對名稱。EC2 金鑰對是選用的,且只有在您想要使用 SSH 存取叢集時才需要。

檢查附接至具有多個主節點的叢集的放置群組策略組態

您可以使用 Amazon EMR 描述叢集 API 來查看附接至具有多個主節點的叢集的放置群組策略組態。

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