Utilisation de la mise à l'échelle automatique avec une politique personnalisée pour les groupes d'instances - Amazon EMR

Utilisation de la mise à l'échelle automatique avec une politique personnalisée pour les groupes d'instances

Dans les versions 4.0 et ultérieures d'Amazon EMR, la mise à l'échelle automatique avec une politique personnalisée vous permet de programmer la mise à l'échelle des nœuds principaux et des nœuds de tâches. Cette mise à l'échelle s'effectue en fonction d'une métrique CloudWatch et d'autres paramètres que vous spécifiez dans une politique de mise à l'échelle. Le dimensionnement automatique avec une stratégie personnalisée est disponible avec la configuration des groupes d'instances. Il ne l'est pas lorsque vous utilisez des parcs d'instances. Pour plus d'informations sur les groupes d'instances et sur les parcs d'instances, consultez Création d'un cluster avec des parcs d'instances ou des groupes d'instances uniformes.

Note

Pour utiliser la fonctionnalité de mise à l'échelle automatique avec une politique personnalisée dans Amazon EMR, vous devez définir true pour le paramètre VisibleToAllUsers lorsque vous créez un cluster. Pour plus d'informations, consultez SetVisibleToAllUsers.

La stratégie de dimensionnement fait partie de la configuration du groupe d'instances. Vous pouvez spécifier une stratégie lors de la configuration initiale d'un groupe d'instances, ou en modifiant un groupe d'instances dans un cluster existant, même quand ce groupe d'instances est actif. Chaque groupe d'instances d'un cluster, à l'exception du groupe d'instances principal, peut avoir sa propre politique de mise à l'échelle, qui consiste en des règles de mise à l'échelle (monter en puissance) et de mise à l'échelle (mise à l'échelle horizontale). Les règles de dimensionnement (augmentation et diminution) peuvent être configurées indépendamment, avec des paramètres différents pour chaque règle.

Vous pouvez configurer les politiques de mise à l'échelle à l'aide de AWS Management Console, de AWS CLI, ou de l'API Amazon EMR. Lorsque vous utilisez l'interface AWS CLI ou l'API Amazon EMR, vous spécifiez la politique de mise à l'échelle au format JSON. En outre, lorsque vous utilisez l'interface AWS CLI ou l'API Amazon EMR, vous pouvez spécifier des métriques CloudWatch personnalisées. Les métriques personnalisées ne sont pas disponibles pour la sélection avec la AWS Management Console. Lorsque vous créez une politique de mise à l'échelle avec la console, une politique par défaut adaptée à de nombreuses applications est préconfigurée pour vous aider à démarrer. Vous pouvez supprimer ou modifier les règles par défaut.

Même si le dimensionnement automatique vous permet d'ajuster la capacité d'un cluster EMR à la volée, vous devez toujours prendre en compte les exigences de charge de travail de base et planifier les configurations du groupe d'instances et du groupe de nœuds. Pour plus d'informations, consultez Consignes pour la configuration de cluster.

Note

Pour la plupart des charges de travail, il est conseillé de configurer les règles de dimensionnement (diminution et augmentation) pour optimiser l'utilisation des ressources. La configuration d'une seule de ces deux règles implique le redimensionnement manuel du nombre d'instances après une activité de dimensionnement. En d'autres termes, cela met en place une stratégie « unidirectionnelle » d'augmentation ou de diminution avec une réinitialisation manuelle.

Création du rôle IAM pour la mise à l'échelle automatique

La mise à l'échelle automatique dans Amazon EMR nécessite un rôle IAM avec des autorisations pour ajouter et supprimer des instances lorsque les activités de mise à l'échelle sont déclenchées. Un rôle par défaut configuré avec la stratégie d'approbation et la stratégie de rôle appropriées, EMR_AutoScaling_DefaultRole, est disponible à cette fin. Lorsque vous créez un cluster avec une politique de mise à l'échelle pour la première fois avec la AWS Management Console, Amazon EMR crée le rôle par défaut et rattache la politique gérée par défaut pour les autorisations, AmazonElasticMapReduceforAutoScalingRole.

Lorsque vous créez un cluster avec une politique de mise à l'échelle automatique avec l'interface AWS CLI, vous devez d'abord vous assurer que le rôle IAM par défaut existe, ou que vous avez un rôle IAM personnalisé avec une politique rattachée qui fournit les autorisations appropriées. Pour créer le rôle par défaut, vous pouvez exécuter la commande create-default-roles avant de créer un cluster. Vous pouvez alors spécifier l'option --auto-scaling-role EMR_AutoScaling_DefaultRole lorsque vous créez un cluster. Autrement, vous pouvez créer un rôle de dimensionnement automatique personnalisé, puis le spécifier lors de la création d'un cluster, par exemple --auto-scaling-role MyEMRAutoScalingRole. Si vous créez un rôle personnalisé de mise à l'échelle automatique pour Amazon EMR, nous vous recommandons de baser les politiques d'autorisation de votre rôle personnalisé sur la politique gérée. Pour de plus amples informations, veuillez consulter Configuration des rôles de service IAM pour les autorisations Amazon EMR aux services et ressources AWS..

Présentation des règles de dimensionnement automatique

Lorsqu'une règle de mise à l'échelle déclenche une activité de mise à l'échelle pour un groupe d'instances, des instances Amazon EC2 sont ajoutées au groupe d'instances conformément à vos règles. Des applications comme Apache Spark, Apache Hive et Presto peuvent utiliser de nouveaux nœuds dès que l'instance Amazon EC2 passe à l'état InService. Vous pouvez également configurer une règle de dimensionnement (diminution) qui met des instances hors service et supprime des nœuds. Pour plus d'informations sur le cycle de vie des instances Amazon EC2 qui sont mises à l'échelle automatiquement, consultez Cycle de vie de l'autoscaling dans le Guide de l'utilisateur Amazon EC2 Auto Scaling.

Vous pouvez configurer la façon dont un cluster met des instances Amazon EC2 hors service. Pour la facturation, vous pouvez choisir de mettre hors service à l'échéance horaire de l'instance Amazon EC2 ou lorsque la tâche est terminée. Ce paramètre s'applique aux opérations de dimensionnement automatique et de redimensionnement manuel. Pour en savoir plus sur cette configuration, consultez Réduction de capacité des clusters.

Les paramètres suivants déterminent le comportement de dimensionnement automatique pour chaque règle d'une stratégie.

Note

Les paramètres répertoriés ici sont basés sur la AWS Management Console pour Amazon EMR. Des options de configuration avancées supplémentaires sont disponibles lorsque vous utilisez l'interface AWS CLI ou l'API Amazon EMR. Pour plus d'informations sur les options avancées, consultez SimpleScalingPolicyConfiguration dans la Référence d'API Amazon EMR.

  • Nombre minimal et nombre maximal d'instances. La contrainte Nombre maximal d'instances spécifie le nombre maximal d'instances Amazon EC2 qui peut figurer dans le groupe d'instances et s'applique à toutes les règles de mise à l'échelle (monter en puissance) De même, la contrainte Nombre minimal d'instances spécifie le nombre minimal d'instances Amazon EC2 et s'applique à toutes les règles de mise à l'échelle (mise à l'échelle horizontale).

  • Le Nom de la règle qui doit être unique dans la stratégie.

  • L'ajustement de dimensionnement qui détermine le nombre d'instances EC2 à ajouter (pour les règles de dimensionnement d'augmentation) ou à résilier (pour les règles de dimensionnement de diminution).

  • La métrique CloudWatch qui est surveillée pour détecter une éventuelle condition d'alarme.

  • Un opérateur de comparaison qui est utilisé pour comparer la métrique CloudWatch à la valeur du seuil et déterminer une condition de déclenchement.

  • Une période d'évaluation, par incrément de cinq minutes, pour laquelle la métrique CloudWatch doit être dans une condition de déclenchement avant le lancement de l'activité de dimensionnement.

  • Un temps de stabilisation qui détermine la durée qui doit s'écouler entre une activité de dimensionnement déclenchée par une règle et le début de l'activité de dimensionnement suivante, quelle que soit la règle qui la déclenche. Lorsqu'un groupe d'instances a terminé une activité de mise à l'échelle et atteint son état de post-mise à l'échelle, le temps de stabilisation permet aux métriques CloudWatch susceptibles de déclencher des activités de mise à l'échelle ultérieures de se stabiliser. Pour de plus amples informations, consultez Temps de stabilisation de l'autoscaling dans le Guide de l'utilisateur pour Amazon EC2 Auto Scaling.

    
							Paramètres de la règle de mise à l'échelle automatique de la AWS Management Console pour Amazon EMR.

Considérations et restrictions

  • Les métriques Amazon CloudWatch sont essentielles au bon fonctionnement de l'autoscaling Amazon EMR. Nous vous recommandons de suivre de près les métriques Amazon CloudWatch pour vous assurer que les données ne sont pas manquantes. Pour plus d'informations sur la façon dont vous pouvez configurer les alarmes Amazon CloudWatch afin de détecter les métriques manquantes, consultez Utilisation des alarmes Amazon CloudWatch.

  • La surutilisation des volumes EBS peut entraîner des problèmes de mise à l'échelle gérée. Nous vous recommandons de surveiller de près l'utilisation du volume EBS pour vous assurer que le volume EBS est inférieur à 90 % d'utilisation. Consultez Stockage d'instance pour plus d'informations sur la spécification de volumes EBS supplémentaires.

  • L'autoscaling avec une politique personnalisée dans les versions 5.18 à 5.28 d'Amazon EMR peut échouer en raison de l'absence intermittente de données dans les métriques Amazon CloudWatch. Pour une mise à l'échelle automatique améliorée, nous vous recommandons d'utiliser les versions les plus récentes d'Amazon EMR. Si vous avez besoin d'utiliser une version d'Amazon EMR comprise entre 5.18 et 5.28, vous pouvez contacter l'AWSAssistance pour obtenir un correctif.

Utilisation de la AWS Management Console pour configurer la mise à l'échelle automatique

Lorsque vous créez un cluster, vous configurez une politique de mise à l'échelle pour les groupes d'instances à l'aide des options de configuration avancée du cluster. Vous pouvez également créer ou modifier une stratégie de dimensionnement pour un groupe d'instances en service en modifiant les groupes d'instances dans les paramètres Hardware (Matériel) d'un cluster existant.

Note

La nouvelle console Amazon EMR (https://console.aws.amazon.com/emr) utilise la mise à l'échelle gérée au lieu de l'autoscaling. Pour utiliser l'autoscaling, assurez-vous d'être connecté à l'ancienne console à l'adresse https://console.aws.amazon.com/elasticmapreduce.

  1. Accédez à la nouvelle console Amazon EMR et sélectionnez Basculer vers l'ancienne console depuis le menu latéral. Pour plus d'informations sur ce qui vous attend lorsque vous passez à l'ancienne console, consultez la rubrique Utilisation de l'ancienne console.

  2. Si vous créez un cluster, dans la console Amazon EMR, sélectionnez Créer un cluster, sélectionnez Accéder aux options avancées, choisissez des options pour Étape 1 : Logiciel et étapes, puis accédez à Étape 2 : Configuration matérielle.

    - ou -

    Si vous modifiez un groupe d'instances dans un cluster en cours d'exécution, sélectionnez votre cluster dans la liste, puis développez la section Hardware (Matériel).

  3. Dans l'option de mise à l'échelle et mise en service du cluster, sélectionnez Activer la mise à l'échelle du cluster. Sélectionnez ensuite Create a custom automatic scaling policy (Créer une stratégie de dimensionnement automatique personnalisée).

    Dans le tableau des stratégies de dimensionnement automatique personnalisées, cliquez sur l'icône représentant un crayon qui apparaît dans la ligne du groupe d'instances que vous souhaitez configurer. L'écran des règles d'autoscaling s'ouvre.

  4. Saisissez le nombre d'Maximum instances (Instances maximales) que le groupe d'instances doit contenir après avoir été augmenté, puis entrez le nombre d'Minimum instances (Instances minimales) que le groupe d'instances doit contenir après avoir été diminué.

  5. Cliquez sur le crayon pour modifier les paramètres de règle, cliquez sur X pour supprimer une règle de la stratégie et cliquez sur Add rule (Ajouter une règle) pour ajouter des règles supplémentaires.

  6. Choisissez les paramètres de règle comme indiqué précédemment dans cette rubrique. Pour obtenir une description des métriques CloudWatch disponibles pour Amazon EMR, consultez Métriques et dimensions Amazon EMR dans le Guide de l'utilisateur Amazon CloudWatch.

Utilisation de la AWS CLI pour configurer la mise à l'échelle automatique

Lorsque vous créez un cluster ou un groupe d'instances, vous pouvez utiliser les commandes AWS CLI d'Amazon EMR pour configurer la mise à l'échelle automatique. Vous pouvez utiliser une syntaxe raccourcie, en spécifiant la configuration JSON compatible avec les commandes adéquates, ou vous pouvez indiquer un fichier contenant la configuration JSON. Vous pouvez également appliquer une stratégie de dimensionnement automatique à un groupe d'instances existant et supprimer une stratégie de dimensionnement automatique qui a été précédemment appliquée. En outre, vous pouvez récupérer les détails de configuration d'une stratégie de dimensionnement à partir d'un cluster en cours d'exécution.

Important

Lorsque vous créez un cluster doté d'une politique de mise à l'échelle automatique, vous devez utiliser la commande --auto-scaling-role MyAutoScalingRole pour spécifier le rôle IAM pour la mise à l'échelle automatique. Le rôle par défaut est EMR_AutoScaling_DefaultRole et peut être créé à l'aide de la commande create-default-roles. Le rôle ne peut être ajouté qu'au moment de la création du cluster ; il ne peut pas être ajouté à un cluster existant.

Pour une description détaillée des paramètres disponibles lors de la configuration d'une politique de mise à l'échelle automatique, consultez PutAutoScalingPolicy dans la Référence d'API Amazon EMR.

Création d'un cluster avec une politique de mise à l'échelle automatique appliquée à un groupe d'instances

Vous pouvez spécifier une configuration de dimensionnement automatique au sein de l'option --instance-groups de la commande aws emr create-cluster. L'exemple suivant illustre une commande create-cluster où une stratégie de dimensionnement automatique pour le groupe d'instances principal est fournie en ligne. La commande crée une configuration de mise à l'échelle équivalente à la politique de mise à l'échelle par défaut qui apparaît lorsque vous créez une politique de montée en puissance automatique avec la AWS Management Console pour Amazon EMR. Pour des raisons de concision, une stratégie de diminution n'apparaît pas. Nous vous déconseillons de créer une règle d'augmentation sans définir une règle de diminution.

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}"}]}}}]}'

La commande suivante illustre comment utiliser la ligne de commande pour fournir la définition de la politique de mise à l'échelle automatique dans le cadre d'un fichier de configuration de groupe d'instances nommé 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

Avec le contenu du fichier de configuration comme suit :

[ { "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}" } ] } } } ] } } ]

Ajout d'un groupe d'instances avec une politique de mise à l'échelle automatique à un cluster

Vous pouvez spécifier une configuration de la politique de mise à l'échelle à l'aide de l'option --instance-groups avec la commande add-instance-groups de la même manière que lorsque vous utilisez create-cluster. L'exemple suivant utilise une référence à un fichier JSON, instancegroupconfig.json, avec la configuration du groupe d'instances.

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

Application d'une politique de mise à l'échelle automatique à un groupe d'instances existant ou modification d'une politique appliquée

Utilisez la commande aws emr put-auto-scaling-policy pour appliquer une stratégie de dimensionnement automatique à un groupe d'instances existant. Le groupe d'instances doit faire partie d'un cluster qui utilise le rôle IAM de mise à l'échelle automatique. L'exemple suivant utilise une référence à un fichier JSON, autoscaleconfig.json, qui spécifie la configuration de stratégie de dimensionnement automatique.

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

Le contenu du fichier autoscaleconfig.json qui définit la même règle d'augmentation comme illustré dans l'exemple précédent, est présenté ci-dessous.

{ "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" } } }] }

Suppression d'une politique de mise à l'échelle automatique d'un groupe d'instances

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

Récupération de la configuration d'une politique de mise à l'échelle automatique

La commande describe-cluster récupère la configuration de la stratégie dans le bloc InstanceGroup. Par exemple, la commande suivante extrait la configuration pour le cluster avec un ID de cluster de j-1CWOHP4PI30VJ.

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

La commande produit l'exemple de résultat suivant.

{ "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." } } } }