翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタムポリシーによる自動スケーリングをインスタンスグループに使用する
Amazon EMR リリース 4.0 以降のカスタムポリシーによる自動スケーリングにより、コアノードとタスクノードを基にプログラム的にスケールアウトおよびスケールインできます。CloudWatchで指定するメトリックとその他のパラメータスケーリングポリシー。カスタムポリシーによる自動スケーリングは、インスタンスグループ設定を使用するときに利用できます。インスタンスフリートを使用するときには利用できません。インスタンスグループとインスタンスフリートの詳細については、「インスタンスフリートまたはユニフォームインスタンスグループでクラスターを作成する」を参照してください。
注記
Amazon EMR でカスタムポリシー機能による自動スケーリングを使用するには、クラスターの作成時に VisibleToAllUsers
パラメータに true
を設定する必要があります。詳細については、を参照してください。SetVisibleToAllUsers。
スケーリングポリシーは、インスタンスグループ設定の一部です。インスタンスグループの初期設定時にポリシーを指定するか、インスタンスグループがアクティブになった後でも、既存のクラスターのインスタンスグループを変更して、ポリシーを指定できます。プライマリインスタンスグループを除くクラスター内の各インスタンスグループには、スケールアウトとスケールインのルールで構成される独自のスケーリングポリシーを設定できます。スケールアウトルールとスケールインルールは、それぞれに異なるパラメータを用いて、個別に設定できます。
でスケーリングポリシーを設定できますAWS Management Console、AWS CLI、または Amazon EMR API。AWS CLI または Amazon EMR API を使用する場合は、スケーリングポリシーを JSON 形式で指定します。また、と一緒にAWS CLIまたは Amazon EMR API では、カスタムを指定できます。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
) を作成して、クラスター作成時に指定することもできます。カスタマイズされた自動スケーリングロールを Amazon EMR 向けに作成する場合は、管理ポリシーに基づいたカスタムロールのアクセス許可ポリシーをベースにすることをお勧めします。詳細については、「AWS のサービスおよびリソースへのアクセス許可を Amazon EMR に付与する IAM サービスロールの設定」を参照してください。MyEMRAutoScalingRole
自動スケーリングルールについて
スケールアウトルールがインスタンスグループのスケーリングをトリガーするときに、ルールに従って Amazon EC2 インスタンスがインスタンスグループに追加されます。Amazon EC2 インスタンスが InService
状態になるとすぐに、Apache Spark、Apache Hive、Presto などのアプリケーションで新しいノードを使用できます。インスタンスを終了し、ノードを削除するスケールインルールを設定することもできます。自動的にスケーリングする Amazon EC2 インスタンスのライフサイクルの詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Auto Scaling のライフサイクル」を参照してください。
クラスターが Amazon EC2 インスタンスを削除する方法を設定できます。請求の Amazon EC2 インスタンス時間の境界と、タスクの完了時のどちらで削除するかを選択できます。この設定は自動スケーリングと手動でのサイズ変更オペレーションの両方に適用されます。この設定の詳細については、「クラスターのスケールダウン」を参照してください。
ポリシー内の各ルールのうち、次のパラメータで自動スケーリングの動作を決定します。
注記
ここに記載されたパラメータは、Amazon EMR の AWS Management Console に基づいています。AWS CLI または Amazon EMR API を使用すると、追加の詳細設定オプションを使用できます。詳細オプションの詳細については、を参照してください。SimpleScalingPolicyConfigurationにアマゾン EMR API リファレンス。
-
最大インスタンスおよび最小インスタンス。[最大インスタンス] という制約は、インスタンスグループに含めることができる Amazon EC2 インスタンスの最大数を指定します。これはすべてのスケールアウトルールに適用されます。同様に、[最小インスタンス] という制約は、Amazon EC2 インスタンスの最小数を指定します。これはすべてのスケールインルールに適用されます。
-
ルール名は、ポリシー内で一意である必要があります。
-
スケーリング調整は、ルールによりトリガーされた規模の拡大や縮小の間に追加 (スケールアウトルールの場合)、または終了 (スケールインルールの場合) する EC2 インスタンスの数を決定します。
-
ザ・CloudWatchメトリック、アラーム状態が発生していないかを監視します。
-
ある比較演算子、これを使用して比較しますCloudWatchメトリックからしきい値値を設定し、トリガー条件を決定します。
-
アン評価期間、5 分刻みで、これに対してCloudWatchスケーリングアクティビティがトリガーされる前に、メトリックがトリガー条件になっている必要があります。
-
クールダウン期間 (秒単位) は、何らかのルールによって開始されるスケーリングアクティビティと、次に開始されるスケーリングアクティビティとの間で経過する必要がある時間です。インスタンスグループが規模の拡大や縮小を完了し、スケーリング後の状態に達した際、クールダウンすることで、後続の規模の拡大や縮小をトリガーする可能性のある CloudWatch メトリクスが安定する機会が与えられます。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Auto Scaling のクールダウン」を参照してください。
考慮事項と制約事項
-
アマゾンCloudWatchAmazon EMR の自動スケーリングが機能するためには、メトリックスが不可欠です。Amazon を注意深く監視することをお勧めします。CloudWatchデータが欠落していないことを確認するための指標。Amazon の設定方法の詳細についてはCloudWatch欠落しているメトリックを検出するアラーム、を参照してくださいアマゾンを使うCloudWatchアラーム。
-
EBS ボリュームの使用率が高すぎると、マネージドスケーリングの問題が発生する可能性があります。EBS ボリュームの使用率を注意深く監視して、EBS ボリュームの使用率が 90% 未満であることを確認することをお勧めします。追加の EBS ボリュームを指定する方法については、「インスタンスストレージ」を参照してください。
-
Amazon EMR リリース 5.18 ~ 5.28 のカスタムポリシーによる自動スケーリングでは、Amazon で断続的にデータが欠落しているためにスケーリングが失敗する可能性があります。CloudWatch指標。自動スケーリングを向上させるために、最新の Amazon EMR バージョンを使用することをお勧めします。お問い合わせいただくこともできますAWSサポート
5.18 から 5.28 の間の Amazon EMR リリースを使用する必要がある場合のパッチ用。
AWS Management Console を使用して自動スケーリングを設定する
クラスターを作成するときは、高度なクラスター設定オプションを使用してインスタンスグループのスケーリングポリシーを設定します。既存のクラスターのハードウェア設定でインスタンスグループを変更することにより、実行中のインスタンスグループのスケーリングポリシーを作成または変更することもできます。
注記
新しい Amazon EMR コンソール (https://console.aws.amazon.com/emr
新しい Amazon EMR コンソールに移動して、古いコンソールに切り替えるサイドナビゲーションから。古いコンソールに切り替えたときに何が起こるかについての詳細は、以下を参照してください。古いコンソールを使用する。
-
クラスターを作成する場合、Amazon EMR コンソールで、[クラスターの作成] を選択し、[詳細オプションに移動する] を選択します。次に、[ステップ 1: ソフトウェアおよびステップ] のオプションを選択し、[ステップ 2: ハードウェア構成] に移動します。
-または-
実行中のクラスターのインスタンスグループを変更する場合、クラスターリストからクラスターを選択し、その後 [ハードウェア] セクションを展開します。
-
にクラスタのスケーリングとプロビジョニングのオプションセクション、選択クラスタースケーリングを有効にする。次に、[Create a custom Auto Scaling policy (カスタムの自動スケーリングポリシーを作成する)] を選択します。
[Custom automatic scaling policies (カスタムの自動スケーリングポリシー)] の表で、設定するインスタンスグループの行に表示されている鉛筆アイコンをクリックします。Auto Scaling ルールの画面が開きます。
-
インスタンスグループをスケールアウトした後に含める最大インスタンスを入力するか、インスタンスグループをスケールインした後に含める最小インスタンスを入力します。
-
ルールのパラメータを編集するには鉛筆をクリックします。ポリシーからルールを削除するには [X] を、ルールを追加するには [Add rule] をクリックします。
-
このトピックで先に記載したとおり、ルールのパラメータを選択します。入手可能なものの説明についてはCloudWatchAmazon EMR のメトリックスについては、を参照してくださいAmazon EMR のメトリックスとディメンションにアマゾンCloudWatchユーザーガイド。
AWS CLI を使用して自動スケーリングを設定する
Amazon EMR の AWS CLI コマンドを使用して、クラスターの作成時とインスタンスグループの作成時に自動スケーリングを設定できます。短縮構文を使用して、関連コマンドのインラインで JSON 設定を指定したり、設定 JSON を含むファイルを参照したりできます。既存のインスタンスグループに自動スケーリングポリシーを適用したり、以前適用されていた自動スケーリングポリシーを削除することもできます。さらに、スケーリングポリシーの詳細設定を実行中のクラスターから取得できます。
重要
自動スケーリングポリシーのあるクラスターを作成する場合は、--auto-scaling-role
コマンドを使用して、自動スケーリングの IAM ロールを指定します。デフォルトロールは、MyAutoScalingRole
で、EMR_AutoScaling_DefaultRole
create-default-roles
コマンドを使用して作成できます。ロールはクラスターが作成された後にのみ追加でき、既存のクラスターには追加できません。
自動スケーリングポリシーを設定する際に使用できるパラメータの詳細については、を参照してください。PutAutoScalingPolicyにアマゾン EMR API リファレンス。
インスタンスグループに適用する自動スケーリングポリシーを持つクラスターを作成する
aws emr
create-cluster
コマンドの --instance-groups
オプション内で自動スケーリング設定を指定できます。次の例は、create-cluster コマンドを示しています。このコマンドには、インラインにコアインスタンスグループの自動スケーリングポリシーがあります。このコマンドは、を使用して自動スケーリングポリシーを作成したときに表示されるデフォルトのスケールアウトポリシーと同等のスケーリング設定を作成します。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-idig-3PLUZBA6WLS07
--auto-scaling-policyfile://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-idig-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." } } } }