Si vos charges de travail fluctuent et que vous en maîtrisez les schémas, activez la mise à l'échelle automatique en configurant des règles adaptées. E-MapReduce (EMR) ajoute ou supprime automatiquement des nœuds de tâche selon les variations de charge pour garantir l'exécution des tâches et réduire les coûts. Cette rubrique explique comment configurer des stratégies 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 Créer un cluster.
Vous avez créé un groupe de nœuds de tâche utilisant des instances à paiement à l'utilisation ou préemptibles dans le cluster. Pour plus d'informations, consultez Créer un groupe de nœuds.
Limites
Pour limiter les échecs de montée en puissance dus à un stock ECS insuffisant, spécifiez 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 les instances en commençant par le premier type de votre liste. Si un type est indisponible, il passe automatiquement au suivant jusqu'à satisfaire la demande. Les types d'instance effectivement achetés peuvent varier selon l'évolution du stock.
Seuls les clusters disposant du service YARN prennent en charge les règles de mise à l'échelle basées sur la charge.
Notes d'utilisation
Lorsqu'une règle se déclenche, le groupe de nœuds met automatiquement à l'échelle selon la stratégie prédéfinie. Sans règles, aucune mise à l'échelle automatique ne se produit.
Le système identifie automatiquement les instances correspondantes aux types sélectionnés et les liste comme candidates. Sélectionnez parmi ces candidates pour activer la mise à l'échelle avec ces types d'instance.
Si plusieurs règles de mise à l'échelle se déclenchent 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 s'exécutent dans l'ordre de leur déclenchement.
Pour la mise à l'échelle basée sur la charge, les règles sont triées par 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 se déclenchent dans l'ordre de leur création.
Procédure
Méthode 1 : Configurer des règles pour un cluster existant
-
Accédez à la page Auto Scaling.
Connectez-vous à la console EMR on ECS.
Dans la barre de navigation supérieure, sélectionnez une région et resource group selon vos besoins.
Cliquez sur le nom du cluster cible.
Sur la page qui s'affiche, cliquez sur l'onglet Auto Scaling.
-
Configurez les règles de mise à l'échelle.
Sous l'onglet Configure Auto Scaling, dans la 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.
-
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 important ou trop réduit 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 cesse de monter 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 cesse de réduire sa capacité.
-
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, définissez une heure fixe quotidiennement, hebdomadairement ou mensuellement pour augmenter le nombre de nœuds de tâche d'une valeur spécifique. Cela ajoute des ressources de calcul lorsque nécessaire, contribuant ainsi à garantir l'exécution des tâches tout en réalisant des économies. Les règles de mise à l'échelle se divisent en règles de montée en puissance et règles de réduction.
ImportantPour éviter les conflits et assurer une mise à l'échelle fluide, ne définissez pas les mêmes heures d'exécution pour les 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 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 précise 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 retente 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 retentera 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é. Une fois la livraison au mieux activée, le système fournit le nombre maximal possible de nœuds pour garantir le bon fonctionnement des activités.
Par exemple, vous configurez le système pour augmenter la capacité de 100 nœuds tous les jours à 00:00. Si seulement 90 nœuds sont disponibles en stock, le processus échouerait normalement. Avec cette fonctionnalité activée, les 90 nœuds disponibles sont fournis.
-
-
Mise à l'échelle basée sur la charge
RemarqueCette 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, utilisez 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 règles 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. Sélectionnez 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 : 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 Correspondance entre les métriques de mise à l'échelle automatique E-MapReduce et les métriques du service YARN.
RemarqueLes 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 : 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 se déclenche 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
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
Nombre de périodes statistiques consécutives durant lesquelles la métrique doit dépasser le seuil avant que la règle ne se déclenche. 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 fournit 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 pourrait ne pas être souhaitable.
Cooldown Time
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. Une fois la temporisation terminée, le système ne répondra qu'aux nouveaux déclencheurs qui remplissent les 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
Paramètre facultatif qui spécifie la plage horaire durant 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 se déclenchent que dans cette plage.
-
-
-
-
Une fois la configuration terminée, cliquez sur Save and Apply.
Lorsque les conditions sont remplies, des activités de mise à l'échelle automatique se déclenchent pour le groupe de nœuds.
Méthode 2 : Configurer des règles lors de la création du cluster
Connectez-vous à la console EMR on ECS.
Dans la barre de navigation supérieure, sélectionnez une région et resource group selon vos besoins.
-
Cliquez sur CREATE_CLUSTER. Pour plus d'informations sur les paramètres, consultez Créer un cluster.
RemarqueVous devez ajouter un groupe de nœuds de tâche à paiement à l'utilisation au cluster avant de pouvoir configurer les règles correspondantes.
-
Configurez Cluster Scaling.
Sélectionnez Custom Auto Scaling Rule et cliquez sur Edit dans la colonne Actions du groupe de nœuds cible.
Dans le panneau Configure Auto Scaling, configurez les paramètres. Pour plus d'informations, consultez Configurer des règles de mise à l'échelle.
Une fois la configuration terminée, cliquez sur Save and Apply.
-
Confirmez la commande et créez le cluster.
Une fois le cluster créé, des activités de mise à l'échelle se déclenchent 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, configurez 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 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 Créer des stratégies 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.
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 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
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 |
Nombre de cœurs de CPU virtuels disponibles dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_PendingVCores |
YARN |
Nombre de cœurs de CPU virtuels en attente d'allocation dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AllocatedVCores |
YARN |
Nombre de cœurs de CPU virtuels alloués dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_ReservedVCores |
YARN |
Nombre de cœurs de CPU virtuels réservés dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AvailableMB |
YARN |
Quantité de mémoire disponible dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_PendingMB |
YARN |
Quantité de mémoire en attente d'allocation dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AllocatedMB |
YARN |
Quantité de mémoire allouée dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_ReservedMB |
YARN |
Quantité de mémoire réservée dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AppsRunning |
YARN |
Nombre d'applications en cours d'exécution dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AppsPending |
YARN |
Nombre d'applications en attente dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AppsKilled |
YARN |
Nombre d'applications arrêtées dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AppsFailed |
YARN |
Nombre d'applications ayant échoué dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AppsCompleted |
YARN |
Nombre d'applications terminées dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AppsSubmitted |
YARN |
Nombre d'applications soumises dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AllocatedContainers |
YARN |
Nombre de conteneurs alloués dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_PendingContainers |
YARN |
Nombre de conteneurs en attente d'allocation dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_ReservedContainers |
YARN |
Nombre de conteneurs réservés dans la file d'attente spécifiée. |
|
yarn_resourcemanager_queue_AvailableMBPercentage |
YARN |
Pourcentage de ressources mémoire disponibles dans la file d'attente spécifiée. 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 |
Ratio du nombre de conteneurs en attente par rapport au nombre de conteneurs alloués dans la file d'attente spécifiée. 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 |
Pourcentage de cœurs de CPU virtuels disponibles dans la file d'attente spécifiée. 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 |
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 |
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 |
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 |
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 |
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. |