カスタムポリシーによる自動スケーリングをインスタンスグループに使用する - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタムポリシーによる自動スケーリングをインスタンスグループに使用する

Amazon EMRリリース 4.0 以降のカスタムポリシーを使用した自動スケーリングでは、スケーリングポリシー で指定した CloudWatch メトリクスやその他のパラメータに基づいて、コアノードとタスクノードをプログラムでスケールアウトおよびスケールインできます。カスタムポリシーによる自動スケーリングは、インスタンスグループ設定を使用するときに利用できます。インスタンスフリートを使用するときには利用できません。インスタンスグループとインスタンスフリートの詳細については、「インスタンスフリートまたはユニフォームインスタンスグループでクラスターを作成する」を参照してください。

注記

Amazon のカスタムポリシー機能で自動スケーリングを使用するにはEMR、クラスターの作成時に VisibleToAllUsersパラメータtrueに を設定する必要があります。詳細については、「」を参照してくださいSetVisibleToAllUsers

スケーリングポリシーは、インスタンスグループ設定の一部です。インスタンスグループの初期設定時にポリシーを指定するか、インスタンスグループがアクティブになった後でも、既存のクラスターのインスタンスグループを変更して、ポリシーを指定できます。プライマリインスタンスグループを除くクラスター内の各インスタンスグループは、独自のスケーリングポリシーを持つことができます。スケーリングポリシーはスケールアウトルールとスケールインルールで構成されます。スケールアウトルールとスケールインルールは、それぞれに異なるパラメータを用いて、個別に設定できます。

スケーリングポリシーは、 AWS Management Console、、 AWS CLIまたは Amazon で設定できますEMRAPI。 AWS CLI または Amazon EMR を使用する場合はAPI、スケーリングポリシーを JSON 形式で指定します。さらに、 AWS CLI または Amazon EMR を使用する場合API、カスタム CloudWatch メトリクスを指定できます。カスタムのメトリクスは、 AWS Management Consoleでの選択には使用できません。最初にコンソールを使用してスケーリングポリシーを作成する場合は、まず、多数のアプリケーションが事前設定されているデフォルトのポリシーが適しています。デフォルトのルールは削除したり変更できます。

自動スケーリングではEMRクラスター容量 を調整できますが on-the-fly、ベースラインワークロード要件を検討し、ノードとインスタンスグループの設定を計画する必要があります。詳細については、「クラスター設定のガイドライン」を参照してください。

注記

ほとんどのワークロードで、リソースの活用を最適化するには、スケールイン、スケールアウトの両方のルールを設定することが理想となります。一方を設定せずにどちらかのルールのみを設定すると、規模の拡大や縮小の後に、インスタンスカウントを手動でサイズ調整する必要があります。つまりこの方法では、手動でのリセットを伴う「一方通行の」自動スケールアウトまたはスケールインポリシーを設定することになります。

自動スケーリング用のIAMロールの作成

Amazon の自動スケーリングには、スケーリングアクティビティがトリガーされたときにインスタンスを追加および終了するアクセス許可を持つ IAMロールEMRが必要です。デフォルトロールである 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、Presto などのアプリケーションで使用できます。インスタンスを終了し、ノードを削除するスケールインルールを設定することもできます。自動的にスケーリングする Amazon EC2インスタンスのライフサイクルの詳細については、「Amazon Auto Scaling ユーザーガイド」のEC2Auto Scaling」を参照してください。

クラスターが Amazon EC2インスタンスを終了する方法を設定できます。請求の Amazon EC2インスタンス時間境界で終了するか、タスクの完了時に終了するかを選択できます。この設定は自動スケーリングと手動でのサイズ変更オペレーションの両方に適用されます。この設定の詳細については、「クラスターのスケールダウン」を参照してください。

ポリシー内の各ルールのうち、次のパラメータで自動スケーリングの動作を決定します。

注記

ここに記載されているパラメータは、Amazon AWS Management Console の に基づいていますEMR。 AWS CLI または Amazon EMR を使用する場合API、追加の詳細設定オプションを使用できます。詳細オプションの詳細については、「Amazon EMRAPIリファレンスSimpleScalingPolicyConfiguration」の「」を参照してください。

  • 最大インスタンスおよび最小インスタンス。最大インスタンス制約は、EC2インスタンスグループに含めることができる Amazon インスタンスの最大数を指定し、すべてのスケールアウトルールに適用されます。同様に、最小インスタンス制約は Amazon EC2インスタンスの最小数を指定し、すべてのスケールインルールに適用されます。

  • ルール名は、ポリシー内で一意である必要があります。

  • スケーリング調整 は、ルールによってトリガーされるスケーリングアクティビティ中に追加 (スケールアウトルールの場合) または終了 (スケールインルールの場合) するEC2インスタンスの数を決定します。

  • アラーム状態を監視されるCloudWatch メトリクス

  • 比較演算子 。CloudWatch メトリクスをしきい値と比較し、トリガー条件を決定するために使用されます。

  • 5 分単位での評価期間 。スケーリングアクティビティがトリガーされる前に、 CloudWatch メトリクスがトリガー条件である必要があります。

  • クールダウン期間 (秒単位) は、何らかのルールによって開始されるスケーリングアクティビティと、次に開始されるスケーリングアクティビティとの間で経過する必要がある時間です。インスタンスグループがスケーリングアクティビティを完了し、スケーリング後の状態に達すると、クールダウン期間は、後続のスケーリングアクティビティを安定させる可能性のある CloudWatch メトリクスの機会を提供します。詳細については、「Amazon Auto Scaling ユーザーガイド」の「Auto Scaling のクールダウン」を参照してください。 EC2 Auto Scaling

    AWS Management Console Amazon の自動スケーリングルールパラメータEMR。

考慮事項と制約事項

  • Amazon CloudWatch メトリクスは、Amazon EMR 自動スケーリングを運用するために不可欠です。Amazon CloudWatch メトリクスを注意深くモニタリングして、データが欠落していないことを確認することをお勧めします。欠落しているメトリクスを検出するように Amazon CloudWatch アラームを設定する方法の詳細については、「Amazon CloudWatch アラームの使用」を参照してください。

  • EBS ボリュームを過剰に使用すると、 Managed Scaling の問題が発生する可能性があります。EBS ボリュームの使用状況を注意深くモニタリングして、EBSボリュームの使用率が 90% 未満であることを確認することをお勧めします。追加EBSボリュームの指定については、「インスタンスストレージ」を参照してください。

  • Amazon EMRリリース 5.18 から 5.28 のカスタムポリシーを使用した自動スケーリングでは、Amazon CloudWatch メトリクスにデータが断続的に欠落しているためにスケーリングが失敗することがあります。自動スケーリングを改善するには、最新の Amazon EMRバージョンを使用することをお勧めします。5.18 から 5.28 までの Amazon EMRリリースを使用する必要がある場合は、 AWS Support に連絡してパッチを依頼することもできます。

AWS Management Console を使用した自動スケーリングの設定

クラスターを作成する際、高度なクラスター設定オプションを使用して、インスタンスグループにスケーリングポリシーを設定します。既存のクラスターのハードウェア設定でインスタンスグループを変更することにより、実行中のインスタンスグループのスケーリングポリシーを作成または変更することもできます。

  1. 新しい Amazon EMRコンソールに移動し、サイドナビゲーションから古いコンソールに切り替えるを選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. クラスターを作成する場合は、Amazon EMRコンソールでクラスターの作成 を選択し、詳細オプション に移動 を選択しステップ 1: ソフトウェアとステップ のオプションを選択し、ステップ 2: ハードウェア設定 に進みます。

    - または -

    実行中のクラスターのインスタンスグループを変更する場合、クラスターリストからクラスターを選択し、その後 [ハードウェア] セクションを展開します。

  3. [クラスターのスケーリングとプロビジョニングのオプション] セクションで [クラスタースケーリングを有効にする] を選択します。次に、[Create a custom Auto Scaling policy (カスタムの自動スケーリングポリシーを作成する)] を選択します。

    [Custom automatic scaling policies (カスタムの自動スケーリングポリシー)] の表で、設定するインスタンスグループの行に表示されている鉛筆アイコンをクリックします。Auto Scaling ルールの画面が開きます。

  4. インスタンスグループをスケールアウトした後に含める最大インスタンスを入力するか、インスタンスグループをスケールインした後に含める最小インスタンスを入力します。

  5. ルールのパラメータを編集するには鉛筆をクリックします。ポリシーからルールを削除するには [X] を、ルールを追加するには [Add rule] をクリックします。

  6. このトピックで先に記載したとおり、ルールのパラメータを選択します。Amazon で使用できる CloudWatch メトリクスの詳細についてはEMR、「Amazon ユーザーガイド」の「Amazon EMRメトリクスとディメンション」を参照してください。 CloudWatch

AWS CLI を使用した自動スケーリングの設定

Amazon の AWS CLI コマンドを使用してEMR、クラスターの作成時およびインスタンスグループの作成時に自動スケーリングを設定できます。短縮構文を使用して、関連するコマンド内でJSON設定をインラインで指定することも、設定 を含むファイルを参照することもできますJSON。既存のインスタンスグループに自動スケーリングポリシーを適用したり、以前適用されていた自動スケーリングポリシーを削除することもできます。さらに、スケーリングポリシーの詳細設定を実行中のクラスターから取得できます。

重要

自動スケーリングポリシーを持つクラスターを作成するときは、 --auto-scaling-role MyAutoScalingRole コマンドを使用して自動スケーリングのIAMロールを指定する必要があります。デフォルトロールは、EMR_AutoScaling_DefaultRole で、create-default-roles コマンドを使用して作成できます。ロールはクラスターが作成された後にのみ追加でき、既存のクラスターには追加できません。

自動スケーリングポリシーを設定するときに使用できるパラメータの詳細な説明については、「Amazon EMRAPIリファレンスPutAutoScalingPolicy」の「」を参照してください。

インスタンスグループに適用する自動スケーリングポリシーを持つクラスターを作成する

aws emr create-cluster コマンドの --instance-groups オプション内で自動スケーリング設定を指定できます。次の例は、create-cluster コマンドを示しています。このコマンドには、インラインにコアインスタンスグループの自動スケーリングポリシーがあります。コマンドは、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}" } ] } } } ] } } ]

自動スケーリングポリシーを持つインスタンスグループをクラスターに追加する

create-cluster を使用するときと同じ方法で、--instance-groups オプションを使用して、add-instance-groups コマンドでスケーリングポリシーの設定を指定できます。次の例では、インスタンスグループ設定で 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." } } } }