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