針對執行個體群組,搭配使用自動擴展與自訂政策 - Amazon EMR

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

針對執行個體群組,搭配使用自動擴展與自訂政策

使用 Amazon 4.0 及更高EMR版本中的自訂政策自動擴展,可讓您根據您在擴展政策中指定的指 CloudWatch 標和其他參數,以程式設計方式在核心節點和任務節點中擴展和擴展。自動擴展和自訂政策,可搭配執行個體群組設定,但在使用執行個體機群時不能搭配使用。如需執行個體群組和執行個體機群的詳細資訊,請參閱 使用執行個體機群或統一執行個體群組建立叢集

注意

若要在 Amazon 中搭配自訂政策功能使用自動擴展EMR,您必須在建立叢集時trueVisibleToAllUsers參數設定。如需詳細資訊,請參閱SetVisibleToAllUsers

擴展政策屬於執行個體群組設定的一部分。您可以在初次設定執行個體群組時指定政策,或是修改既有叢集中的執行個體群組,即使執行個體群組處於使用中的狀態也無妨。除了主要執行個體群組外,叢集中的每個執行個體群組均擁有自己的擴展政策,包含橫向擴展和縮減規則。橫向擴充和縮減的規則可分開設定,每項規則均有不同的參數。

您可以使用 AWS Management Console、或 Amazon 來設定擴展政策EMRAPI。 AWS CLI當您使用 AWS CLI 或 Amazon 時 EMRAPI,請以JSON格式指定擴展政策。此外,使用 AWS CLI 或 Amazon 時 EMRAPI,您可以指定自訂指 CloudWatch 標。使用 AWS Management Console時無法選取自訂指標。初次使用主控台建立擴展政策時,系統會預先設定好多數應用程式適用的預設政策,以協助您開始使用。這些預設規則均可刪除或修改。

雖然自動調整可讓您調整EMR叢集容量 on-the-fly,但您仍應該考慮基準工作負載需求,並規劃節點和執行個體群組組態。如需詳細資訊,請參閱叢集組態指導方針

注意

對於大多數的工作負載而言,最好橫向縮減和橫向擴充兩方規則均要設定,以達到最佳的資源使用效果。若設定規則時少了其中一項,即代表必須在擴展活動後再手動重新調整執行個體的數量。換言之,如此設定的是「單向」的自動橫向擴展或縮減政策,且需手動重新設定。

建立自動調整規模的IAM角色

在 Amazon 中自動擴展EMR需要具有許可的IAM角色,才能在觸發擴展活動時新增和終止執行個體。預設角色 EMR_AutoScaling_DefaultRole 已設定好合適的角色政策和信任政策,可用於此目的。當您第一次使用擴展政策建立叢集時 AWS Management Console,Amazon EMR 會建立預設角色,並附加許可的預設受管政策AmazonElasticMapReduceforAutoScalingRole

使用自動調整規模政策建立叢集時 AWS CLI,必須先確定預設IAM角色存在,或者您擁有的自訂IAM角色,其中附加了提供適當權限的原則。若要建立預設角色,可在建立叢集前先執行 create-default-roles 命令。也可以在建立叢集時指定 --auto-scaling-role EMR_AutoScaling_DefaultRole 選項。或者可以建議自訂的自動調整規模角色,再於建立叢集時指定該角色,例如 --auto-scaling-role MyEMRAutoScalingRole。如果您為 Amazon 建立自訂的自動擴展角色EMR,建議您根據受管政策為自訂角色建立許可政策。如需詳細資訊,請參閱為IAM服務和資源的 Amazon EMR 許可設定 AWS 服務角色

了解自動擴展規則

當向外擴充規則觸發執行個體群組的擴展活動時,Amazon EC2 執行個體就會根據您的規則新增至執行個體群組。一旦 Amazon EC2 執行個體進入InService狀態,就可以由 Apache Spark、Apache Hive 和普雷斯托等應用程式使用新節點。您也可以設定橫向縮減規則,用於終止執行個體和移除節點。如需有關自動擴展之 Amazon EC2 執行個體生命週期的詳細資訊,請參閱 Amazon Auto Scaling 使用者指南中的自動 EC2 Auto Scaling 生命週期

您可以設定叢集終止 Amazon EC2 執行個體的方式。您可以選擇在 Amazon EC2 執行個體小時界限終止帳單,或在任務完成時終止。此設定會套用至自動調整規模和手動重新調整兩邊的操作上。如需此組態的詳細資訊,請參閱「叢集縮減規模」。

以下是政策中每條規則用於決定自動調整規模行為的參數。

注意

這裡列出的參數是基 AWS Management Console 於 Amazon 的EMR。當您使用 AWS CLI 或 Amazon 時 EMRAPI,可以使用其他進階組態選項。如需進階選項的詳細資訊,請參閱 Amazon EMR API 參考SimpleScalingPolicyConfiguration中的。

  • 執行個體上限與執行個體下限。最大執行個體限制可指定執行個體群組中可以存在的 Amazon EC2 執行個體數量上限,並套用至所有向外延展規則。同樣地,最小執行個體限制可指定 Amazon EC2 執行個體的最小數量,並適用於所有擴充規則。

  • Rule name (規則名稱),在政策內必須是唯一的。

  • 縮放調整,決定在規則觸發的縮放活動期間,要新增 (針對向外延展規則) 或終止 (適用於縮放規則) 的EC2執行個體數目。

  • CloudWatch 標,監視警報狀況。

  • 比較運算子,用來比較CloudWatch 測量結果與「臨界值」值,以及判斷觸發條件。

  • 評估期間 (以五分鐘為增量),在觸發調整活動之前, CloudWatch 量度必須處於觸發條件中。

  • Cooldown period (冷卻時間) 會決定在某條規則觸發擴展活動後,需經過多久才可開始下一次的觸發活動,不論活動是由哪一條規則觸發。當執行個體群組完成擴展活動並達到規模後的狀態時,冷卻時間會為可能觸發後續擴展活動穩定的 CloudWatch 指標提供機會。如需詳細資訊,請參閱 Amazon Auto Scaling 使用者指南中的 EC2 Auto Scaling 冷卻時間

    AWS Management Console Amazon 的自動擴展規則參數EMR。

考量與限制

  • Amazon CloudWatch 指標對於 Amazon EMR 自動擴展操作至關重要。我們建議您密切監控 Amazon CloudWatch 指標,以確保資料不會遺失。如需如何設定 Amazon CloudWatch 警示以偵測遺失指標的詳細資訊,請參閱使用 Amazon CloudWatch 警示

  • EBS磁碟區過度使用可能會導致受管擴展問題。建議您密切監控EBS磁碟區使用情況,以確保EBS磁碟區使用率低於 90%。請參閱執行個體儲存以取得有關指定其他EBS磁碟區

  • Amazon 5.18 至 5.28 EMR 版中的自訂政策自動擴展可能會因 Amazon 指標中的資料間歇性遺失而導致擴展失敗。 CloudWatch我們建議您使用最新的 Amazon EMR 版本來改善自動調度資源。如果您需要在 5.18 到 5.28 之間使用 Amazon EMR 版本,也可以聯絡 Sup AWS port 部門以取得修補程式。

使用 AWS Management Console 來設定自動調整比例

當您建立叢集時,可使用進階叢集設定選項來設定執行個體群組的擴展政策。您也可以在既有叢集的 Hardware (硬體) 設定中修改執行個體群組,藉此建立或修改服務中的執行個體群組的擴展政策。

  1. 導覽至新的 Amazon EMR 主控台,然後從側邊導覽選取「切換至舊主控台」。如需有關切換至舊主控台時預期情況的詳細資訊,請參閱使用舊主控台

  2. 如果要建立叢集,請在 Amazon EMR 主控台中選取建立叢集,選取移至進階選項,選擇步驟 1:軟體和步驟的選項,然後移至步驟 2:硬體組態

    - 或 -

    若您要修改執行中叢集內的執行個體群組,請在叢集清單中選取您的叢集,再展開 Hardware (硬體) 區段。

  3. 叢集擴展和佈建選項區段中,選取啟用叢集擴展。然後選取 Create a custom automatic scaling policy (建立自訂自動擴展政策)

    Custom automatic scaling policies (自訂自動擴展政策) 表格中,按一下出現在所要設定執行個體群組資料列中的鉛筆圖示。「Auto Scaling 規則」畫面開啟。

  4. 請輸入您希望執行個體群組在向外擴展完畢後的 Maximum instances (執行個體上限),以及在向內擴展後的 Minimum instances (執行個體下限)

  5. 請按一下鉛筆圖示以編輯規則參數,按一下 X 可從政策中移除該條規則,按一下 Add rule (新增規則) 則可增加更多規則。

  6. 按本主題之前的說明,選擇規則參數。如需 Amazon 可用指 CloudWatch 標的說明EMR,請參閱 Amazon CloudWatch 使用者指南中的 Amazon 指EMR標和維度。

使用 AWS CLI 來設定自動調整比例

您可以在建立叢集和建立執行個體群組時,使用 Amazon 的 AWS CLI 命令EMR來設定自動擴展。您可以使用速記語法,在相關命令中以內嵌方式指定JSON組態,也可以參考包含組態的檔案。JSON您也可以將自動調整規模的政策套用到既有的執行個體群組上,並移除先前套用的自動調整規模政策。此外還能從執行中的叢集上擷取調整規模政策組態的詳細資訊。

重要

當您建立具有自動調整資源調整規模政策的叢集時,必須使用命--auto-scaling-role MyAutoScalingRole令來指定自動調整資源調整的IAM角色。預設角色為 EMR_AutoScaling_DefaultRole,可由 create-default-roles 命令建立。該角色只能在建立叢集時新增,且無法新增至既有的叢集。

如需設定自動擴展政策時可用參數的詳細說明,請參閱 Amazon 參EMRAPI考PutAutoScalingPolicy中的。

使用套用至執行個體群組的自動擴展政策來建立叢集

也可以在 --instance-groups 命令的 aws emr create-cluster 選項中指定自動調整規模的設定。以下範例所說明的建立叢集命令中,是以內嵌方式提供核心執行個體群組的自動調整規模政策。此命令會建立與您使用 for Amazon 建立自動擴展政策時所顯示的預設向外擴展政策相當的 AWS Management Console 擴展組態。EMR為了簡潔之故,不會顯示縮減政策。不建議建立不含縮減規則的橫向擴展規則。

aws emr create-cluster --release-label emr-5.2.0 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --auto-scaling-role EMR_AutoScaling_DefaultRole --instance-groups Name=MyMasterIG,InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1 'Name=MyCoreIG,InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=2,AutoScalingPolicy={Constraints={MinCapacity=2,MaxCapacity=10},Rules=[{Name=Default-scale-out,Description=Replicates the default scale-out rule in the console.,Action={SimpleScalingPolicyConfiguration={AdjustmentType=CHANGE_IN_CAPACITY,ScalingAdjustment=1,CoolDown=300}},Trigger={CloudWatchAlarmDefinition={ComparisonOperator=LESS_THAN,EvaluationPeriods=1,MetricName=YARNMemoryAvailablePercentage,Namespace=AWS/ElasticMapReduce,Period=300,Statistic=AVERAGE,Threshold=15,Unit=PERCENT,Dimensions=[{Key=JobFlowId,Value="${emr.clusterId}"}]}}}]}'

以下命令說明如何使用命令列提供自動擴展政策定義,作為執行個體群組組態檔案 (名稱為 instancegroupconfig.json) 的一部分。

aws emr create-cluster --release-label emr-5.2.0 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --instance-groups file://your/path/to/instancegroupconfig.json --auto-scaling-role EMR_AutoScaling_DefaultRole

組態檔案的內容如下所示:

[ { "InstanceCount": 1, "Name": "MyMasterIG", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge" }, { "InstanceCount": 2, "Name": "MyCoreIG", "InstanceGroupType": "CORE", "InstanceType": "m5.xlarge", "AutoScalingPolicy": { "Constraints": { "MinCapacity": 2, "MaxCapacity": 10 }, "Rules": [ { "Name": "Default-scale-out", "Description": "Replicates the default scale-out rule in the console for YARN memory.", "Action":{ "SimpleScalingPolicyConfiguration":{ "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1, "CoolDown": 300 } }, "Trigger":{ "CloudWatchAlarmDefinition":{ "ComparisonOperator": "LESS_THAN", "EvaluationPeriods": 1, "MetricName": "YARNMemoryAvailablePercentage", "Namespace": "AWS/ElasticMapReduce", "Period": 300, "Threshold": 15, "Statistic": "AVERAGE", "Unit": "PERCENT", "Dimensions":[ { "Key" : "JobFlowId", "Value" : "${emr.clusterId}" } ] } } } ] } } ]

將含有自動擴展政策的執行個體群組新增至叢集

可以使用 --instance-groups 選項搭配 add-instance-groups 命令來指定擴展政策組態,方式與使用 create-cluster 時相同。下列範例會使用具有執行個體群組組態的JSON檔案參照。instancegroupconfig.json

aws emr add-instance-groups --cluster-id j-1EKZ3TYEVF1S2 --instance-groups file://your/path/to/instancegroupconfig.json

將自動擴展政策套用到既有的執行個體群組上,或修改所套用的政策

請使用 aws emr put-auto-scaling-policy 指定將自動調整規模政策套用到既有的執行個體群組上。執行個體群組必須是使用自動調整資源調整IAM角色的叢集的一部分。下列範例使用指定自動資源調整規模原則組態的JSON檔案參照。autoscaleconfig.json

aws emr put-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07 --auto-scaling-policy file://your/path/to/autoscaleconfig.json

autoscaleconfig.json 檔案的內容所定義的橫向擴展規則與上個範例相同,如下所示。

{ "Constraints": { "MaxCapacity": 10, "MinCapacity": 2 }, "Rules": [{ "Action": { "SimpleScalingPolicyConfiguration": { "AdjustmentType": "CHANGE_IN_CAPACITY", "CoolDown": 300, "ScalingAdjustment": 1 } }, "Description": "Replicates the default scale-out rule in the console for YARN memory", "Name": "Default-scale-out", "Trigger": { "CloudWatchAlarmDefinition": { "ComparisonOperator": "LESS_THAN", "Dimensions": [{ "Key": "JobFlowId", "Value": "${emr.clusterID}" }], "EvaluationPeriods": 1, "MetricName": "YARNMemoryAvailablePercentage", "Namespace": "AWS/ElasticMapReduce", "Period": 300, "Statistic": "AVERAGE", "Threshold": 15, "Unit": "PERCENT" } } }] }

從執行個體群組中移除自動擴展政策

aws emr remove-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07

擷取自動擴展政策組態

describe-cluster令會擷取 InstanceGroup 區塊中的原則組態。舉例而言,以下命令會擷取叢集 ID 為 j-1CWOHP4PI30VJ 的叢集的組態。

aws emr describe-cluster --cluster-id j-1CWOHP4PI30VJ

該命令會產生以下的輸出範例。

{ "Cluster": { "Configurations": [], "Id": "j-1CWOHP4PI30VJ", "NormalizedInstanceHours": 48, "Name": "Auto Scaling Cluster", "ReleaseLabel": "emr-5.2.0", "ServiceRole": "EMR_DefaultRole", "AutoTerminate": false, "TerminationProtected": true, "MasterPublicDnsName": "ec2-54-167-31-38.compute-1.amazonaws.com", "LogUri": "s3n://aws-logs-232939870606-us-east-1/elasticmapreduce/", "Ec2InstanceAttributes": { "Ec2KeyName": "performance", "AdditionalMasterSecurityGroups": [], "AdditionalSlaveSecurityGroups": [], "EmrManagedSlaveSecurityGroup": "sg-09fc9362", "Ec2AvailabilityZone": "us-east-1d", "EmrManagedMasterSecurityGroup": "sg-0bfc9360", "IamInstanceProfile": "EMR_EC2_DefaultRole" }, "Applications": [ { "Name": "Hadoop", "Version": "2.7.3" } ], "InstanceGroups": [ { "AutoScalingPolicy": { "Status": { "State": "ATTACHED", "StateChangeReason": { "Message": "" } }, "Constraints": { "MaxCapacity": 10, "MinCapacity": 2 }, "Rules": [ { "Name": "Default-scale-out", "Trigger": { "CloudWatchAlarmDefinition": { "MetricName": "YARNMemoryAvailablePercentage", "Unit": "PERCENT", "Namespace": "AWS/ElasticMapReduce", "Threshold": 15, "Dimensions": [ { "Key": "JobFlowId", "Value": "j-1CWOHP4PI30VJ" } ], "EvaluationPeriods": 1, "Period": 300, "ComparisonOperator": "LESS_THAN", "Statistic": "AVERAGE" } }, "Description": "", "Action": { "SimpleScalingPolicyConfiguration": { "CoolDown": 300, "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1 } } }, { "Name": "Default-scale-in", "Trigger": { "CloudWatchAlarmDefinition": { "MetricName": "YARNMemoryAvailablePercentage", "Unit": "PERCENT", "Namespace": "AWS/ElasticMapReduce", "Threshold": 75, "Dimensions": [ { "Key": "JobFlowId", "Value": "j-1CWOHP4PI30VJ" } ], "EvaluationPeriods": 1, "Period": 300, "ComparisonOperator": "GREATER_THAN", "Statistic": "AVERAGE" } }, "Description": "", "Action": { "SimpleScalingPolicyConfiguration": { "CoolDown": 300, "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": -1 } } } ] }, "Configurations": [], "InstanceType": "m5.xlarge", "Market": "ON_DEMAND", "Name": "Core - 2", "ShrinkPolicy": {}, "Status": { "Timeline": { "CreationDateTime": 1479413437.342, "ReadyDateTime": 1479413864.615 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "RunningInstanceCount": 2, "Id": "ig-3M16XBE8C3PH1", "InstanceGroupType": "CORE", "RequestedInstanceCount": 2, "EbsBlockDevices": [] }, { "Configurations": [], "Id": "ig-OP62I28NSE8M", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge", "Market": "ON_DEMAND", "Name": "Master - 1", "ShrinkPolicy": {}, "EbsBlockDevices": [], "RequestedInstanceCount": 1, "Status": { "Timeline": { "CreationDateTime": 1479413437.342, "ReadyDateTime": 1479413752.088 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "RunningInstanceCount": 1 } ], "AutoScalingRole": "EMR_AutoScaling_DefaultRole", "Tags": [], "BootstrapActions": [], "Status": { "Timeline": { "CreationDateTime": 1479413437.339, "ReadyDateTime": 1479413863.666 }, "State": "WAITING", "StateChangeReason": { "Message": "Cluster ready after last step completed." } } } }