為您的 Amazon EMR叢集設定統一執行個體群組 - Amazon EMR

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

為您的 Amazon EMR叢集設定統一執行個體群組

使用執行個體群組組態,每個節點類型 (主要、核心或任務) 包含相同的執行個體類型和適用於以下執行個體的相同購買選項:隨需或 Spot。您建立執行個體群組時,您會指定這些設定。這些設定稍後無法變更。不過,您可以將相同類型的執行個體和購買選項新增到核心和任務執行個體群組。您也可以移除執行個體。

如果叢集的隨需執行個體與您帳戶中可用的開放容量保留 (執行個體類型、平台、租用和可用區域) 的屬性相符,則會自動套用容量保留。您可以針對主要、核心和任務節點使用開放容量保留。但是,在使用執行個體群組佈建叢集時,您無法使用目標容量保留,或防止執行個體在具有相符屬性的開放容量保留中啟動。如果您想要使用目標容量保留或防止執行個體在開放容量保留中啟動,請改用執行個體機群。如需詳細資訊,請參閱在 Amazon 中使用容量保留與執行個體機群 EMR

若要在叢集建立後新增不同的執行個體類型,您可以新增額外的任務執行個體群組。您可以選擇適用於每個執行個體群組的不同執行個體類型與購買選項。如需詳細資訊,請參閱使用 Amazon EMR叢集擴展來調整不斷變化的工作負載

在啟動執行個體時,隨需執行個體的容量保留偏好設定會預設為 open,可讓它在任何具有相符屬性 (執行個體類型、平台、可用區域) 的開放容量保留中執行。如需有關隨需容量保留的詳細資訊,請參閱 在 Amazon 中使用容量保留與執行個體機群 EMR

這個區段涵蓋建立含統一執行個體群組的叢集。如需透過手動新增或移除執行個體或透過自動擴展來修改現有執行個體群組的更多資訊,請參閱 管理 Amazon EMR叢集

使用主控台設定統一執行個體群組

Console
使用新主控台建立具有執行個體群組的叢集
  1. 登入 AWS Management Console,並在 https://console.aws.amazon.com/emr 開啟 Amazon EMR主控台。

  2. 在左側導覽窗格中的 EMR EC2下,選擇叢集,然後選擇建立叢集

  3. 叢集組態下,選擇執行個體群組

  4. 節點群組下,每種類型的節點群組都有一個區段。對於主節點群組,如果您想要有 3 個主節點,請選取使用多個主節點核取方塊。如果您想要使用「Spot 購買」,請選取使用 Spot 購買選項核取方塊。

  5. 對於主節點和核心節點群組,請選取新增執行個體類型,然後選擇最多 5 個執行個體類型。對於任務群組,請選取新增執行個體類型,然後選擇最多 15 個執行個體類型。Amazon EMR可能會在啟動叢集時佈建這些執行個體類型的任何組合。

  6. 在每個節點群組類型下,選擇每個執行個體旁邊的動作下拉式功能表,以變更以下設定:

    新增EBS磁碟區

    在 Amazon EMR佈建之後,指定要連接到執行個體類型的EBS磁碟區。

    編輯 Spot 價格上限

    為機群中的每種執行個體類型指定最高 Spot 價格。您可以依隨需價格的百分比或特定的金額來設定此價格。如果可用區域中目前的 Spot 價格低於 Spot 價格上限,Amazon 會EMR佈建 Spot 執行個體。您僅需支付該 Spot 價格。

  7. 或者,展開節點組態以輸入JSON組態或從 Amazon S3 JSON 載入。

  8. 選擇適用於您的叢集的任何其他選項。

  9. 若要啟動您的叢集,請選擇建立叢集

使用 AWS CLI 建立具有統一執行個體群組的叢集

若要使用 AWS CLI指定叢集的執行個體群組組態,請使用 create-cluster 命令和 --instance-groups 參數。除非您為執行個體群組指定BidPrice引數,否則 Amazon 會EMR擔任隨需執行個體選項。如需 create-cluster 命令的範例,該命令會啟動含隨需執行個體的統一執行個體群組與各種叢集選項,請在命令列中鍵入 aws emr create-cluster help 或參閱《AWS CLI 命令參考》中的 create-cluster

您可以使用 AWS CLI ,在使用 Spot 執行個體的叢集中建立統一執行個體群組。提供的 Spot 價格取決於可用區域。使用 CLI或 時API,您可以使用 AvailabilityZone引數 (如果您使用的是 EC2-classic 網路) 或 --ec2-attributes 參數的SubnetID 引數來指定可用區域。您選擇的可用區域或子網路會套用至叢集,因此會將其用於所有執行個體群組。如果您未明確指定可用區域或子網路,Amazon 會在啟動叢集時以最低 Spot 價格EMR選取可用區域。

以下範例示範 create-cluster 命令,該命令會建立主要、核心和兩個任務執行個體群組,而這些群組都使用 Spot 執行個體。myKey 將 取代為 Amazon EC2金鑰對的名稱。

注意

包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。

aws emr create-cluster --name "MySpotCluster" \ --release-label emr-7.5.0 \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-groups \ InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1,BidPrice=0.25 \ InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=2,BidPrice=0.03 \ InstanceGroupType=TASK,InstanceType=m5.xlarge,InstanceCount=4,BidPrice=0.03 \ InstanceGroupType=TASK,InstanceType=m5.xlarge,InstanceCount=2,BidPrice=0.04

您可以使用 CLI建立統一執行個體群組叢集,AMI為執行個體群組中的每個執行個體類型指定唯一的自訂。這可讓您在相同執行個體群組中使用不同的執行個體架構。每個執行個體類型都必須使用AMI具有相符架構的自訂。例如,您會使用 x86_64 架構自訂 設定 m5.xlarge 執行個體類型AMI,並使用對應的 AWS AARCH64(ARM) 架構自訂 設定 m6g.xlarge 執行個體類型AMI。

下列範例顯示使用兩種執行個體類型建立的統一執行個體群組叢集,每個叢集都有自己的自訂 AMI。請注意,自訂僅在執行個體類型層級AMIs指定,而不是在叢集層級指定。這是為了避免執行個體類型AMIs與叢集層級AMI的 衝突,這會導致叢集啟動失敗。

aws emr create-cluster --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-groups \ InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 \ InstanceGroupType=CORE,InstanceType=m6g.xlarge,InstanceCount=1,CustomAmiId=ami-234567

您可以將多個自訂AMIs新增至新增至執行中叢集的執行個體群組。CustomAmiId 引數可以與 add-instance-groups 命令搭配使用,如下列範例所示。

aws emr add-instance-groups --cluster-id j-123456 \ --instance-groups \ InstanceGroupType=Task,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456

使用 Java SDK 建立執行個體群組

您會將 InstanceGroupConfig 物件個體化,該物件會指定叢集的執行個體群組組態。若要使用 Spot 執行個體,您會針對 withBidPrice 物件設定 withMarketInstanceGroupConfig 屬性。下列程式碼顯示如何定義執行 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");