Tous les produits
Search
Centre de documentation

:Create a custom auto scaling policy

Dernière mise à jour :Sep 21, 2026

Si vos charges de travail fluctuent et que vous en comprenez les schémas, vous pouvez activer la mise à l'échelle automatique en configurant des règles de mise à l'échelle. E-MapReduce (EMR) ajoute ou supprime automatiquement des nœuds de tâche en fonction des variations de charge pour garantir l'exécution des jobs et réduire les coûts. Cette rubrique explique comment configurer des politiques de mise à l'échelle automatique personnalisées.

Prérequis

  • Vous avez créé un cluster DataLake, Dataflow, OLAP, DataServing ou Custom. Pour plus d'informations, consultez la section Créer un cluster.

  • Vous avez créé un groupe de nœuds de tâche utilisant des instances avec paiement à l'utilisation ou préemptibles dans le cluster. Pour plus d'informations, consultez la section Créer un groupe de nœuds.

Limites

  • Pour réduire les échecs de montée en puissance dus à un inventaire ECS insuffisant, vous pouvez spécifier plusieurs types d'instance lors de la création d'un groupe de nœuds. Vous pouvez sélectionner jusqu'à 10 types d'instance ECS en alternative. Le système tente de provisionner des instances en commençant par le premier type de votre liste. Si un type d'instance est indisponible, le système passe automatiquement au suivant jusqu'à ce que la demande soit satisfaite. Les types d'instance réellement achetés peuvent varier en fonction des changements d'inventaire.

  • Seuls les clusters sur lesquels le service YARN est déployé prennent en charge les règles de mise à l'échelle basées sur la charge.

Notes d'utilisation

  • Lorsqu'une règle est déclenchée, le groupe de nœuds effectue automatiquement une mise à l'échelle selon la politique prédéfinie. Sans règles, aucune mise à l'échelle automatique ne se produit.

  • Le système recherche automatiquement les instances correspondantes aux types sélectionnés et les liste comme candidates. Vous devez sélectionner parmi ces candidates pour activer la mise à l'échelle avec ces types d'instance.

Remarque

Si plusieurs règles de mise à l'échelle sont déclenchées simultanément, le système les exécute selon les priorités suivantes :

  • Les règles de montée en puissance (scale-out) sont prioritaires sur les règles de réduction (scale-in).

  • Les règles basées sur le temps et sur la charge sont exécutées dans l'ordre de leur déclenchement.

  • Pour la mise à l'échelle basée sur la charge, les règles sont triées selon l'heure de déclenchement de la métrique.

  • Pour la mise à l'échelle basée sur la charge, les règles fondées sur la même métrique sont déclenchées dans l'ordre de leur création.

Procédure

Méthode 1 : Configurer des règles pour un cluster existant

  1. Accédez à la page Auto Scaling.

    1. Connectez-vous à la console EMR on ECS.

    2. Dans la barre de navigation supérieure, sélectionnez une région et resource group selon vos besoins.

    3. Cliquez sur le nom du cluster cible.

    4. Sur la page qui s'affiche, cliquez sur l'onglet Auto Scaling.

  2. Configurez les règles de mise à l'échelle.

    1. Dans l'onglet Configure Auto Scaling, section Configure Auto Scaling Rule, cliquez sur Custom Auto Scaling Rule, sélectionnez Reconfigure, puis cliquez sur Edit dans la colonne Actions pour le groupe de nœuds cible.

    2. Dans le panneau Configure Auto Scaling, configurez les paramètres.

      • Limits on Node Quantity of Current Node Group : contrôle le nombre de nœuds dans le groupe pour éviter qu'il ne devienne trop grand ou trop petit lors de la mise à l'échelle automatique. Pour modifier cette configuration, cliquez sur Modify Limit.

        • Maximum Number of Instances : nombre maximal de nœuds dans le groupe de nœuds actuel. Lorsque cette limite est atteinte, le groupe de nœuds arrête la montée en puissance.

        • Minimum Number of Instances : nombre minimal de nœuds dans le groupe de nœuds actuel. Lorsque cette limite est atteinte, le groupe de nœuds arrête la réduction.

      • Trigger Rule : affiche et permet de configurer les règles de mise à l'échelle pour le groupe de nœuds actuel.

        • Mise à l'échelle basée sur le temps

          Si la charge de calcul de votre cluster présente des pics et des creux prévisibles, vous pouvez définir une heure fixe quotidiennement, hebdomadairement ou mensuellement pour augmenter le nombre de nœuds de tâche. Cela ajoute des ressources de calcul lorsque nécessaire, contribuant à garantir l'exécution des jobs tout en économisant des coûts. Les règles de mise à l'échelle se divisent en règles de montée en puissance et de réduction.

          Important

          Pour éviter les conflits et assurer une mise à l'échelle fluide, ne définissez pas les heures d'exécution des règles de montée en puissance et de réduction de manière identique.

          Cette section utilise une règle de montée en puissance comme exemple.

          Paramètre

          Description

          Scale-out type

          Montée en puissance basée sur le temps.

          Rule Name

          Les noms des règles de mise à l'échelle doivent être uniques au sein d'un cluster.

          Frequency

          • Execute Repeatedly : l'action de mise à l'échelle s'exécute à une heure spécifique chaque jour, semaine ou mois.

          • Execute Only Once : l'action de mise à l'échelle s'exécute une fois à l'heure spécifiée.

          Execution Time

          L'heure à laquelle la règle est exécutée.

          Rule Expiration Time

          Si vous définissez Frequency sur Execute Repeatedly, vous pouvez définir une heure d'expiration pour la règle. La règle cesse de déclencher des activités de mise à l'échelle après cette heure.

          Retry Time Range

          Une action de mise à l'échelle peut ne pas s'exécuter à l'heure prévue pour diverses raisons. Si vous définissez une plage de temps de nouvelle tentative, le système réessaie l'action toutes les 30 secondes dans cette plage jusqu'à ce qu'elle réussisse. La valeur peut aller de 0 à 3 600 secondes.

          Par exemple, si l'action A est planifiée mais ne peut pas s'exécuter car une autre action B est en cours ou en période de temporisation, le système réessaiera l'action A toutes les 30 secondes pendant la plage de temps de nouvelle tentative spécifiée. L'action s'exécute dès que les conditions le permettent.

          Nodes for each scale-out

          Le nombre de nœuds à ajouter lorsque la règle est déclenchée.

          Best-effort Delivery

          Nous vous recommandons d'activer cette fonctionnalité. Après activation de la livraison au mieux, le système livre le nombre maximal possible de nœuds pour assurer la continuité des opérations métier.

          Par exemple, vous configurez le système pour augmenter de 100 nœuds à 00:00 chaque jour. Si seulement 90 nœuds sont en stock, le processus échouerait normalement. Avec cette fonctionnalité activée, les 90 nœuds disponibles sont livrés.

        • Mise à l'échelle basée sur la charge

          Remarque

          Cette fonctionnalité est prise en charge uniquement lorsque le service YARN est déployé dans le cluster.

          Si vous ne pouvez pas prédire avec précision les pics et les creux de votre charge de calcul Big Data, mais que vous comprenez bien votre modèle métier, vous pouvez utiliser la mise à l'échelle basée sur la charge. Les règles de mise à l'échelle se divisent en règles de montée en puissance et de réduction. Cette section utilise une règle de montée en puissance comme exemple.

          Paramètre

          Description

          Scale-out type

          Montée en puissance basée sur la charge.

          Rule Name

          Les noms des règles de mise à l'échelle doivent être uniques au sein d'un cluster.

          Load Metric-based Trigger Conditions

          Les conditions qui déclenchent la règle de mise à l'échelle basée sur la charge. Vous devez sélectionner une ou plusieurs métriques de charge prédéfinies par le système. Pour sélectionner plusieurs métriques, cliquez sur Add Metric. Les paramètres suivants sont inclus :

          • Métrique de charge : le nom d'une métrique de charge prise en charge par le système. Pour plus d'informations sur la correspondance entre les métriques de mise à l'échelle automatique E-MapReduce et les métriques du service YARN, consultez la section Correspondance entre les métriques de mise à l'échelle automatique E-MapReduce et les métriques du service YARN.

            Remarque

            Les métriques de charge prises en charge varient selon le type de cluster. Seules les métriques affichées dans la console font foi.

          • Méthode d'agrégation : la méthode (moyenne, maximum ou minimum) utilisée pour évaluer la métrique de charge par rapport à un seuil sur une période statistique. La règle est déclenchée si la valeur agrégée atteint le seuil.

          Multi-metric Relationship

          Vous pouvez sélectionner All Metrics Meet the Conditions ou Any Metric Meets the Condition.

          Statistical Period

          La fenêtre temporelle pour la collecte et l'agrégation des métriques. Une période plus courte rend la règle plus sensible aux variations de charge. Sélectionnez une période statistique raisonnable en fonction de vos besoins métier.

          Condition Repetition Threshold

          Le nombre de périodes statistiques consécutives pendant lesquelles la métrique doit dépasser le seuil avant que la règle ne soit déclenchée. Cela évite une mise à l'échelle due à des pics brefs.

          Nodes for each scale-out

          Le nombre de nœuds à ajouter lorsque la règle est déclenchée.

          Best-effort Delivery

          Si vous activez cette fonctionnalité, le système livre le nombre maximal possible de nœuds. Évaluez s'il convient d'activer cette fonctionnalité pour la mise à l'échelle basée sur la charge. Contrairement à la mise à l'échelle basée sur le temps où la capacité requise est connue, la mise à l'échelle basée sur la charge réagit aux métriques, et une satisfaction partielle peut ne pas être souhaitable.

          Cooldown Time

          L'intervalle entre le début d'une activité de mise à l'échelle automatique et le moment où une autre peut commencer. Pendant cette période, tous les déclencheurs de mise à l'échelle sont ignorés. Après la fin de la temporisation, le système ne répondra qu'aux nouveaux déclencheurs qui satisfont aux conditions de mise à l'échelle.

          Cette période de temporisation permet à la charge du système de se stabiliser après un événement de mise à l'échelle avant qu'un autre ne soit initié.

          Effective Time Period

          Un paramètre facultatif qui spécifie la plage horaire pendant laquelle une règle de mise à l'échelle basée sur la charge est active. Par défaut, la règle est active 24 h/24 et 7 j/7. Si vous définissez une plage horaire, les activités de mise à l'échelle ne sont déclenchées que dans cette plage.

    3. Une fois la configuration terminée, cliquez sur Save and Apply.

      Lorsque les conditions sont remplies, des activités de mise à l'échelle automatique sont déclenchées pour le groupe de nœuds.

Méthode 2 : Configurer des règles lors de la création d'un cluster

  1. Connectez-vous à la console EMR on ECS.

  2. Dans la barre de navigation supérieure, sélectionnez une région et resource group selon vos besoins.

  3. Cliquez sur CREATE_CLUSTER. Pour plus d'informations sur les paramètres, consultez la section Créer un cluster.

    Remarque

    Vous devez ajouter un groupe de nœuds de tâche avec paiement à l'utilisation au cluster avant de pouvoir configurer les règles correspondantes.

  4. Configurez Cluster Scaling.

    1. Sélectionnez Custom Auto Scaling Rule et cliquez sur Edit dans la colonne Actions du groupe de nœuds cible.

    2. Dans le panneau Configure Auto Scaling, configurez les paramètres. Pour plus d'informations, consultez la section Configurer des règles de mise à l'échelle.

    3. Une fois la configuration terminée, cliquez sur Save and Apply.

  5. Confirmez la commande et créez le cluster.

    Après la création du cluster, des activités de mise à l'échelle sont déclenchées pour le groupe de nœuds lorsque les conditions de la règle sont remplies.

Méthode 3 : Configurer des règles avec un SDK

Lors de la création d'un cluster ou d'un groupe de nœuds, vous pouvez configurer des règles de mise à l'échelle personnalisées pour le groupe de nœuds afin d'automatiser la création et la gestion des nœuds. Pour plus d'informations, consultez les sections Créer un cluster et Créer un groupe de nœuds. Vous pouvez également configurer des règles de mise à l'échelle personnalisées pour un groupe de nœuds existant. Pour plus d'informations, consultez la section Créer des politiques de mise à l'échelle automatique personnalisées.

Le code Java suivant fournit un exemple de configuration d'une règle de montée en puissance basée sur la charge.

Remarque

Nous vous recommandons d'utiliser la méthode STS, plus sécurisée, pour initialiser le client. Pour plus d'informations sur les méthodes d'authentification, consultez la section Gérer les identifiants d'accès.

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>Use an AccessKey pair to initialize the client.</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.emr20210320.Client createClient() throws Exception {
        // Leaking source code may cause the AccessKey pair to be leaked, posing a threat to the security of all your resources. The following code is for reference only.
        // We recommend that you use the more secure STS method for authentication.
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // For the endpoint, see https://api.alibabacloud.com/product/Emr.
        config.endpoint = "emr.eu-central-1.aliyuncs.com";
        return new com.aliyun.emr20210320.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.emr20210320.Client client = Sample.createClient();
        com.aliyun.emr20210320.models.ScalingConstraints scalingConstraints = new com.aliyun.emr20210320.models.ScalingConstraints()
                .setMaxCapacity(10)
                .setMinCapacity(0);
        com.aliyun.emr20210320.models.TriggerCondition scalingRule0MetricsTriggerTriggerCondition0 = new com.aliyun.emr20210320.models.TriggerCondition()
                .setMetricName("yarn_resourcemanager_queue_AvailableVCoresPercentage")
                .setStatistics("AVG")
                .setComparisonOperator("LE")
                .setThreshold(15D);
        com.aliyun.emr20210320.models.TriggerCondition scalingRule0MetricsTriggerTriggerCondition1 = new com.aliyun.emr20210320.models.TriggerCondition()
                .setMetricName("yarn_resourcemanager_queue_AvailableMBPercentage")
                .setStatistics("AVG")
                .setComparisonOperator("LE")
                .setThreshold(15D);
        com.aliyun.emr20210320.models.MetricsTrigger scalingRule0MetricsTrigger = new com.aliyun.emr20210320.models.MetricsTrigger()
                .setTimeWindow(300)
                .setEvaluationCount(1)
                .setCoolDownInterval(300)
                .setConditionLogicOperator("Or")
                .setConditions(java.util.Arrays.asList(
                    scalingRule0MetricsTriggerTriggerCondition0,
                    scalingRule0MetricsTriggerTriggerCondition1
                ));
        com.aliyun.emr20210320.models.ScalingRule scalingRule0 = new com.aliyun.emr20210320.models.ScalingRule()
                .setRuleName("default")
                .setTriggerType("METRICS_TRIGGER")
                .setActivityType("SCALE_OUT")
                .setAdjustmentValue(1)
                .setMetricsTrigger(scalingRule0MetricsTrigger);
        com.aliyun.emr20210320.models.PutAutoScalingPolicyRequest putAutoScalingPolicyRequest = new com.aliyun.emr20210320.models.PutAutoScalingPolicyRequest()
                .setRegionId("cn-hangzhou")
                .setClusterId("c-xxxx")
                .setNodeGroupId("ng-xxx")
                .setScalingRules(java.util.Arrays.asList(
                    scalingRule0
                ))
                .setConstraints(scalingConstraints);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // Print the API return values on your own.
            client.putAutoScalingPolicyWithOptions(putAutoScalingPolicyRequest, runtime);
        } catch (TeaException error) {
            // The following code is for demonstration purposes only. We recommend that you handle exceptions with caution and do not ignore them in your project.
            // Error message
            System.out.println(error.getMessage());
            // Diagnosis address
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception exception) {
            TeaException error = new TeaException(exception.getMessage(), exception);
            // The following code is for demonstration purposes only. We recommend that you handle exceptions with caution and do not ignore them in your project.
            // Error message
            System.out.println(error.getMessage());
            // Diagnosis address
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

Correspondance entre les métriques de mise à l'échelle automatique EMR et YARN

Remarque
  • Pour les métriques de mise à l'échelle automatique liées aux files d'attente, spécifiez le paramètre queue_name. La valeur par défaut est root. Les files d'attente personnalisées sont prises en charge.

  • Pour les métriques de mise à l'échelle automatique liées aux partitions, vous devez spécifier le paramètre partition_name.

Métrique EMR

Service

Description

yarn_resourcemanager_queue_AvailableVCores

YARN

Le nombre de cœurs de CPU virtuels disponibles dans la file d'attente spécifiée.

yarn_resourcemanager_queue_PendingVCores

YARN

Le nombre de cœurs de CPU virtuels en attente d'allocation dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AllocatedVCores

YARN

Le nombre de cœurs de CPU virtuels alloués dans la file d'attente spécifiée.

yarn_resourcemanager_queue_ReservedVCores

YARN

Le nombre de cœurs de CPU virtuels réservés dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AvailableMB

YARN

La quantité de mémoire disponible dans la file d'attente spécifiée.

yarn_resourcemanager_queue_PendingMB

YARN

La quantité de mémoire en attente d'allocation dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AllocatedMB

YARN

La quantité de mémoire allouée dans la file d'attente spécifiée.

yarn_resourcemanager_queue_ReservedMB

YARN

La quantité de mémoire réservée dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AppsRunning

YARN

Le nombre d'applications en cours d'exécution dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AppsPending

YARN

Le nombre d'applications en attente dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AppsKilled

YARN

Le nombre d'applications arrêtées dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AppsFailed

YARN

Le nombre d'applications ayant échoué dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AppsCompleted

YARN

Le nombre d'applications terminées dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AppsSubmitted

YARN

Le nombre d'applications soumises dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AllocatedContainers

YARN

Le nombre de conteneurs alloués dans la file d'attente spécifiée.

yarn_resourcemanager_queue_PendingContainers

YARN

Le nombre de conteneurs en attente d'allocation dans la file d'attente spécifiée.

yarn_resourcemanager_queue_ReservedContainers

YARN

Le nombre de conteneurs réservés dans la file d'attente spécifiée.

yarn_resourcemanager_queue_AvailableMBPercentage

YARN

Le pourcentage de ressources mémoire disponibles dans la file d'attente spécifiée. MemoryAvailablePercentage = AvailableMemory / TotalMemory.

Remarque

Cette métrique est prise en charge dans les versions EMR-3.43.0 et ultérieures ainsi que EMR-5.9.0 et ultérieures.

yarn_resourcemanager_queue_PendingContainersRatio

YARN

Le ratio entre le nombre de conteneurs en attente et le nombre de conteneurs alloués dans la file d'attente spécifiée. ContainerPendingRatio = PendingContainers / AllocatedContainers.

Remarque

Cette métrique est prise en charge dans les versions EMR-3.43.0 et ultérieures ainsi que EMR-5.9.0 et ultérieures.

yarn_resourcemanager_queue_AvailableVCoresPercentage

YARN

Le pourcentage de cœurs de CPU virtuels disponibles dans la file d'attente spécifiée. AvailableVCoresPercentage = AvailableVCores / (ReservedVCores + AvailableVCores + AllocatedVCores) * 100

Remarque

Cette métrique est prise en charge dans les versions EMR-3.43.0 et ultérieures ainsi que EMR-5.9.0 et ultérieures.

yarn_cluster_numContainersByPartition

YARN

Le nombre de conteneurs dans la partition spécifiée. Le paramètre partition_name spécifie le nom de la partition.

Remarque

Cette métrique est prise en charge dans les versions EMR-3.44.0 et ultérieures ainsi que EMR-5.10.0 et ultérieures.

yarn_cluster_usedMemoryMBByPartition

YARN

L'utilisation de la mémoire de la partition spécifiée. Le paramètre partition_name spécifie le nom de la partition.

Remarque

Cette métrique est prise en charge dans les versions EMR-3.44.0 et ultérieures ainsi que EMR-5.10.0 et ultérieures.

yarn_cluster_availMemoryMBByPartition

YARN

La mémoire disponible de la partition spécifiée. Le paramètre partition_name spécifie le nom de la partition.

Remarque

Cette métrique est prise en charge dans les versions EMR-3.44.0 et ultérieures ainsi que EMR-5.10.0 et ultérieures.

yarn_cluster_usedVirtualCoresByPartition

YARN

Le nombre de cœurs de CPU virtuels utilisés dans la partition spécifiée. Le paramètre partition_name spécifie le nom de la partition.

Remarque

Cette métrique est prise en charge dans les versions EMR-3.44.0 et ultérieures ainsi que EMR-5.10.0 et ultérieures.

yarn_cluster_availableVirtualCoresByPartition

YARN

Le nombre de cœurs de CPU virtuels disponibles dans la partition spécifiée. Le paramètre partition_name spécifie le nom de la partition.

Remarque

Cette métrique est prise en charge dans les versions EMR-3.44.0 et ultérieures ainsi que EMR-5.10.0 et ultérieures.

FAQ

Pourquoi les opérations de montée en puissance des clusters EMR échouent-elles ? Comment améliorer le taux de réussite ?

Causes profondes

  1. Inventaire insuffisant de ressources ECS : une opération de montée en puissance peut échouer si le nombre demandé d'instances ECS d'un type spécifique dépasse l'inventaire disponible dans la zone de disponibilité actuelle. Les ressources ECS sous-jacentes sont dynamiques et peuvent connaître des pénuries temporaires en raison d'une forte demande.

  2. Limitation à un seul type d'instance : si votre configuration de mise à l'échelle automatique ne spécifie qu'un seul type d'instance ECS et que ce type est en pénurie, le processus de montée en puissance échouera.

Solutions

  • Nous vous recommandons d'activer la livraison au mieux en activant l'option Best-effort Delivery lors de la configuration d'une règle de mise à l'échelle. Cela garantit que, même si certaines ressources sont indisponibles, le système provisionne autant de ressources que possible au lieu d'abandonner complètement la demande de montée en puissance.

  • Configurez plusieurs types d'instance : pour augmenter le taux de réussite, nous vous recommandons de configurer plusieurs types d'instance ECS pour le groupe de nœuds de tâche. Pour plus d'informations, consultez la section Créer un groupe de nœuds. Lors d'une montée en puissance, le système tente de provisionner une instance du premier type de votre liste. S'il est indisponible, le système essaie automatiquement le type suivant, et continue jusqu'à ce que la demande soit satisfaite.

Ces mesures peuvent améliorer considérablement le taux de réussite des montées en puissance pour votre cluster EMR.