Redimensionnement manuel d'un cluster en cours d'exécution - Amazon EMR

Redimensionnement manuel d'un cluster en cours d'exécution

Vous pouvez ajouter et supprimer des instances dans les groupes d'instances principaux et de tâches, et des flottes d'instances dans un cluster en cours d'exécution à l'aide de la AWS Management Console, de l'interface AWS CLI ou de l'API Amazon EMR. Si un cluster utilise des groupes d'instances, vous devez modifier explicitement le nombre d'instances. Si le cluster utilise des parcs d'instances, vous pouvez modifier les unités cibles pour les instances à la demande et les instances Spot. Le parc d'instances ajoute et supprime ensuite des instances afin de répondre à la nouvelle cible. Pour de plus amples informations, veuillez consulter Options de parc d'instances. Des applications peuvent utiliser les instances Amazon EC2 nouvellement allouées pour héberger des nœuds dès qu'elles deviennent disponibles. Lorsque les instances sont supprimées, Amazon EMR met fin aux tâches sans interrompre les autres, et prévient la perte de données. Pour de plus amples informations, veuillez consulter Mise hors service lors de l'achèvement de la tâche.

Redimensionnement d'un cluster à l'aide de la console

Vous pouvez utiliser la console Amazon EMR pour redimensionner un cluster en cours d'exécution.

Note

Nous avons repensé la console Amazon EMR pour en faciliter l'utilisation. Consultez Nouveautés de la console pour en savoir plus sur les différences entre l'ancienne et la nouvelle expérience console.

New console
Modifier le nombre d'instances d'un cluster existant à l'aide de la nouvelle console
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon EMR à l'adresse https://console.aws.amazon.com/emr.

  2. Sous EMR sur EC2, dans le volet de navigation de gauche, choisissez Clusters, puis sélectionnez le cluster que vous souhaitez mettre à jour. Le cluster doit être en cours d'exécution ; vous ne pouvez pas redimensionner un cluster de en cours de mise en service ou un cluster arrêté.

  3. Dans l'onglet Instances de la page de détails du cluster, consultez le panneau Groupes d'instances.

  4. Pour redimensionner un groupe d'instances existant, sélectionnez le bouton radio à côté du groupe d'instances principal ou de tâches que vous souhaitez redimensionner, puis choisissez Redimensionner le groupe d'instances. Spécifiez le nouveau nombre d'instances pour le groupe d'instances, puis sélectionnez Redimensionner.

    Note

    Si vous choisissez de réduire la taille d'un groupe d'instances en cours d'exécution, Amazon EMR sélectionnera intelligemment les instances à supprimer du groupe afin de minimiser les pertes de données. Pour un contrôle plus précis de votre action de redimensionnement, vous pouvez sélectionner l'ID du groupe d'instances, choisir les instances que vous souhaitez supprimer, puis utiliser l'option Terminer. Pour plus d'informations sur le comportement intelligent de réduction, consultez Réduction de capacité des clusters.

  5. Si vous souhaitez annuler l'action de redimensionnement, vous pouvez sélectionner le bouton radio correspondant à un groupe d'instances ayant le statut Redimensionner, puis choisir Arrêter le redimensionnement dans la liste des actions.

  6. Pour ajouter un ou plusieurs groupes d'instances de tâches à votre cluster en réponse à l'augmentation de la charge de travail, choisissez Ajouter un groupe d'instances de tâches dans la liste des actions. Choisissez le type d'instance Amazon EC2, entrez le nombre d'instances pour le groupe de tâches, puis sélectionnez Ajouter un groupe d'instances de tâches pour revenir au panneau Groupes d'instances de votre cluster.

Old console
Modifier le nombre d'instances d'un cluster existant à l'aide de l'ancienne console
  1. Dans la page Liste de clusters, choisissez un cluster à redimensionner.

  2. Dans la page Détails du cluster, choisissez Matériel.

  3. Si votre cluster utilise des groupes d'instances, choisissez Redimensionner dans la colonne Nombre d'instances du groupe d'instances que vous souhaitez redimensionner, saisissez un nouveau nombre, puis sélectionnez la coche verte.

    –OU–

    Si votre cluster utilise des flottes d'instances, choisissez Redimensionner dans la colonne Capacité allouée, saisissez de nouvelles valeurs pour les unités à la demande et les unités Spot, puis choisissez Redimensionner.

Lorsque vous modifiez le nombre de nœuds, le Statut du groupe d'instances est mis à jour. Lorsque la modification est terminée, le Statut est En cours d'exécution.

Redimensionner un cluster à l'aide de AWS CLI

Vous pouvez utiliser l'AWS CLI pour redimensionner un cluster en cours d'exécution. Vous pouvez augmenter ou diminuer le nombre de nœuds de tâches, et vous pouvez augmenter le nombre de nœuds principaux dans un cluster en cours d'exécution. Il est également possible d'arrêter une instance dans le groupe d'instances principal à l'aide de l'interface AWS CLI ou de l'API. Cela doit être effectué avec précautions. L'arrêt d'une instance dans le groupe d'instances principal entraîne un risque de perte de données, et l'instance n'est pas automatiquement remplacée.

Outre le redimensionnement des groupes principaux et de tâches, vous pouvez ajouter un ou plusieurs groupes d'instances de tâches à un cluster en cours d'exécution à l'aide de l'interface AWS CLI.

Redimensionner un cluster en modifiant le nombre d'instances à l'aide de l'interface AWS CLI

Vous pouvez ajouter des instances au groupe principal ou au groupe de tâches, et vous pouvez supprimer des instances du groupe de tâches à l'aide de la sous-commande modify-instance-groups de l'interface AWS CLI avec le paramètre InstanceCount. Pour ajouter des instances aux groupes principaux ou de tâches, augmentez la valeur InstanceCount. Pour réduire le nombre d'instances dans le groupe de tâches, diminuez la valeur InstanceCount. La mise à zéro du nombre d'instances du groupe de tâches supprime toutes les instances mais pas le groupe d'instances.

  • Pour augmenter le nombre d'instances du groupe d'instances de tâches de 3 à 4, tapez la commande suivante et remplacez ig-31JXXXXXXBTO par l'ID du groupe d'instances.

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-31JXXXXXXBTO,InstanceCount=4

    Pour récupérer le InstanceGroupId, utilisez la sous-commande describe-cluster. Le résultat est un objet JSON appelé Cluster qui contient l'ID de chaque groupe d'instances. Pour utiliser cette commande, vous avez besoin de l'ID du cluster (que vous pouvez récupérer à l'aide de la commande aws emr list-clusters ou de la console). Pour récupérer l'ID de groupe d'instances, tapez la commande suivante et remplacez j-2AXXXXXXGAPLF par l'ID du cluster.

    aws emr describe-cluster --cluster-id j-2AXXXXXXGAPLF

    Dans l'interface AWS CLI, vous pouvez également arrêter une instance dans le groupe d'instances principal à l'aide de la sous-commande --modify-instance-groups.

    Avertissement

    La spécification de EC2InstanceIdsToTerminate doit s'effectuer avec précaution. Les instances sont résiliées immédiatement, quel que soit le statut des applications qui s'y exécutent, et l'instance n'est pas automatiquement remplacée. Cela est vrai quelle que soit la configuration Comportement de dimensionnement à la baisse du cluster. Une telle résiliation d'une instance peut entraîner une perte des données et un comportement du cluster imprévisible.

    Pour arrêter une instance spécifique, vous avez besoin de l'ID du groupe d'instances (retourné par la sous-commande aws emr describe-cluster --cluster-id) et de l'ID d'instance (renvoyé par la sous-commande aws emr list-instances --cluster-id). Tapez la commande suivante, remplacez ig-6RXXXXXX07SA par l'ID du groupe d'instances et remplacez i-f9XXXXf2 par l'ID d'instance.

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-6RXXXXXX07SA,EC2InstanceIdsToTerminate=i-f9XXXXf2

    Pour plus d'informations sur l'utilisation des commandes Amazon EMR dans l'interface AWS CLI, consultez https://docs.aws.amazon.com/cli/latest/reference/emr.

Redimensionner un cluster en ajoutant des groupes d'instances de tâches à l'aide de l'interface AWS CLI

Dans l'interface AWS CLI, vous pouvez ajouter entre 1 et 48 groupes d'instances de tâches à un cluster avec la sous-commande --add-instance-groups. Les groupes d'instances de tâches peuvent uniquement être ajoutés à un cluster contenant un groupe d'instances primaire et un groupe d'instances principal. Lorsque vous utilisez l'interface AWS CLI, vous pouvez ajouter jusqu'à cinq groupes d'instances de tâches chaque fois que vous utilisez la sous-commande --add-instance-groups.

  1. Pour ajouter un groupe d'instances de tâches unique à un cluster, tapez la commande suivante et remplacez j-JXBXXXXXX37R par l'ID du cluster.

    aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m5.xlarge
  2. Pour ajouter plusieurs groupes d'instances de tâches à un cluster, tapez la commande suivante et remplacez j-JXBXXXXXX37R par l'ID du cluster. Vous pouvez ajouter jusqu'à cinq groupes d'instances de tâches dans une seule commande.

    aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m5.xlarge InstanceCount=10,InstanceGroupType=task,InstanceType=m5.xlarge

    Pour plus d'informations sur l'utilisation des commandes Amazon EMR dans l'interface AWS CLI, consultez https://docs.aws.amazon.com/cli/latest/reference/emr.

Interruption d'un redimensionnement

Avec Amazon EMR version 4.1.0 ou ultérieure, vous pouvez émettre un redimensionnement au milieu d'une opération de redimensionnement existante. En outre, vous pouvez arrêter une demande de redimensionnement déjà soumise ou soumettre une nouvelle demande pour remplacer une demande précédente sans attendre qu'elle se termine. Vous pouvez également arrêter un redimensionnement existant à partir de la console ou à l'aide de l'appel d'API ModifyInstanceGroups avec le nombre actuel comme nombre cible du cluster.

La capture d'écran suivante illustre un groupe d'instances de tâches qui est en cours de redimensionnement, mais qui peut être arrêté en choisissant Arrêter.

Interrompre un redimensionnement à l'aide de l'interface AWS CLI

Vous pouvez utiliser l'interface AWS CLI pour arrêter un redimensionnement à l'aide de la sous-commande modify-instance-groups. Supposez vous avez six instances dans votre groupe d'instances et que vous voulez passer à 10 instances. Vous décidez plus tard d'annuler cette demande :

  • Demande initiale :

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-myInstanceGroupId,InstanceCount=10

    Seconde demande visant à arrêter la première demande :

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-myInstanceGroupId,InstanceCount=6
Note

Comme ce processus est asynchrone, vous pouvez voir les nombres d'instances changer en fonction des demandes d'API précédentes avant que les demandes suivantes soient honorées. Dans le cas d'une réduction, si vous avez du travail en cours d'exécution sur les nœuds, il est possible que le groupe d'instances ne soit pas réduit tant que les nœuds n'ont pas terminé leur travail.

État Interrompu

Un groupe d'instances passe à l'état interrompu s'il rencontre trop d'erreurs en essayant de démarrer les nouveaux nœuds du cluster. Par exemple, si les nouveaux nœuds échouent lors de la réalisation d'actions d'amorçage, le groupe d'instances passe à l'état INTERROMPU au lieu de mettre en service en permanence de nouveaux nœuds. Une fois que vous avez résolu le problème sous-jacent, réinitialisez le nombre voulu de nœuds sur le groupe d'instances du cluster, puis le groupe d'instances reprend l'allocation des nœuds. La modification d'un groupe d'instances indique à Amazon EMR d'essayer de mettre de nouveau en service des nœuds. Aucun nœud en cours d'exécution n'est redémarré ou arrêté.

Dans l'AWS CLI, la sous-commande list-instances retourne toutes les instances et leurs états, comme la sous-commande describe-cluster. Si Amazon EMR détecte un défaut avec un groupe d'instances, il change l'état du groupe en spécifiant SUSPENDED.

Remettre un cluster dans un état SUSPENDU à l'aide de l'interface AWS CLI

Tapez la sous-commande describe-cluster avec le paramètre --cluster-id afin d'afficher l'état des instances figurant dans votre cluster.

  • Pour afficher des informations sur toutes les instances et les groupes d'instances d'un cluster, tapez la commande suivante et remplacez j-3KVXXXXXXY7UG par l'ID du cluster.

    aws emr describe-cluster --cluster-id j-3KVXXXXXXY7UG

    Les données de sortie affichent des informations sur vos groupes d'instances et l'état de ces instances :

    { "Cluster": { "Status": { "Timeline": { "ReadyDateTime": 1413187781.245, "CreationDateTime": 1413187405.356 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "Ec2InstanceAttributes": { "Ec2AvailabilityZone": "us-west-2b" }, "Name": "Development Cluster", "Tags": [], "TerminationProtected": false, "RunningAmiVersion": "3.2.1", "NormalizedInstanceHours": 16, "InstanceGroups": [ { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413187775.749, "CreationDateTime": 1413187405.357 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "Name": "MASTER", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge", "Id": "ig-3ETXXXXXXFYV8", "Market": "ON_DEMAND", "RunningInstanceCount": 1 }, { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413187781.301, "CreationDateTime": 1413187405.357 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "Name": "CORE", "InstanceGroupType": "CORE", "InstanceType": "m5.xlarge", "Id": "ig-3SUXXXXXXQ9ZM", "Market": "ON_DEMAND", "RunningInstanceCount": 1 } ... }

    Pour afficher les informations concernant un groupe d'instances particulier, tapez la sous-commande list-instances avec les paramètres --cluster-id et --instance-group-types. Vous pouvez consulter des informations pour les groupes primaires, principaux et de tâches.

    aws emr list-instances --cluster-id j-3KVXXXXXXY7UG --instance-group-types "CORE"

    Utilisez la sous-commande modify-instance-groups avec le paramètre --instance-groups pour réinitialiser un cluster dans l'état SUSPENDED. L'ID du groupe d'instances est renvoyé par la sous-commande describe-cluster.

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-3SUXXXXXXQ9ZM,InstanceCount=3

Considérations relatives à la réduction de la taille du cluster

Si vous choisissez de réduire la taille d'un cluster en cours d'exécution, tenez compte du comportement et des meilleures pratiques d'Amazon EMR suivantes :

  • Pour réduire l'impact sur les tâches en cours, Amazon EMR sélectionne intelligemment les instances à supprimer. Pour plus d'informations sur le comportement de réduction des clusters, consultez Mise hors service lors de l'achèvement de la tâche dans le Guide de gestion Amazon EMR.

  • Lorsque vous réduisez la taille d'un cluster, Amazon EMR copie les données des instances qu'il supprime vers les instances restantes. Assurez-vous que la capacité de stockage de ces données est suffisante dans les instances qui restent dans le groupe.

  • Amazon EMR tente de mettre hors service HDFS sur les instances du groupe. Avant de réduire la taille d'un cluster, nous vous recommandons de minimiser les E/S d'écriture HDFS.

  • Pour un contrôle plus précis lorsque vous réduisez la taille d'un cluster, vous pouvez afficher le cluster dans la console et accéder à l'onglet Instances. Sélectionnez l'ID du groupe d'instances que vous souhaitez redimensionner. Utilisez ensuite l'option Terminer pour les instances spécifiques que vous souhaitez supprimer.