Mettre automatiquement à l’échelle des pools Apache Spark d’Azure Synapse Analytics

Apache Spark pour la fonctionnalité de mise à l’échelle automatique du pool Azure Synapse Analytics met automatiquement à l’échelle le nombre de nœuds dans une instance de cluster. Lors de la création d’un projet Apache Spark pour un pool Azure Synapse Analytics, des nombres minimal et maximal de nœuds, jusqu’à 200 nœuds, peuvent être définis lorsque la mise à l’échelle automatique est sélectionnée. La mise à l’échelle automatique surveille ensuite les besoins en ressources de la charge, et met à l’échelle le nombre de nœuds. L’utilisation de cette fonctionnalité n’entraîne aucun coût supplémentaire.

Supervision des métriques

La mise à l’échelle automatique surveille en permanence l’instance Spark et collecte les métriques suivantes :

Métrique Description
Total Pending CPU Nombre total de cœurs requis pour commencer l’exécution de tous les travaux en attente.
Total Pending Memory Mémoire totale (en Mo) nécessaire pour commencer l’exécution de tous les travaux en attente.
Total Free CPU Somme de tous les cœurs inutilisés sur les nœuds actifs.
Total Free Memory Somme de la mémoire inutilisée (en Mo) sur les nœuds actifs.
Used Memory per Node Charge sur un nœud. Un nœud sur lequel 10 Go de mémoire sont utilisés est considéré comme étant plus sollicité qu’un nœud avec 2 Go de mémoire utilisés.

Les métriques ci-dessus sont contrôlées toutes les 30 secondes. La fonction de mise à l’échelle automatique prend des décisions de montée en puissance ou de descente en puissance en fonction de ces métriques.

Conditions de mise à l’échelle basée sur la charge

Lorsque les conditions suivantes sont détectées, la mise à l’échelle automatique émet une requête de mise à l’échelle :

Scale-up Scale-down
« Total pending CPU » est supérieur à la valeur de « Total free CPU » pendant plus de 1 minute. « Total pending CPU » est inférieur à la valeur de « Total free CPU » pendant plus de 2 minutes.
« Total pending memory » est supérieur à la valeur de « Total free memory » pendant plus de 1 minute. « Total pending memory » est inférieur à la valeur de « Total free memory » pendant plus de 2 minutes.

Pour un scale-up, le service Azure Synapse Analytics calcule combien de nouveaux nœuds sont utiles pour répondre aux besoins actuels en UC et en mémoire, puis il émet une requête de scale-up pour ajouter le nombre de nœuds nécessaires.

Pour une montée en puissance, en fonction du nombre d’exécuteurs, des maîtres d’application par nœud, des besoins actuels en mémoire et de l’UC, la mise à l’échelle automatique émet une demande de suppression d’un certain nombre de nœuds. Le service détecte également les nœuds à supprimer en fonction de l’exécution des travaux en cours. L’opération de descente en puissance désactive tout d’abord les nœuds, puis les supprime du cluster.

Notes

Remarque sur la mise à jour et l’application forcée de la configuration de la mise à l’échelle automatique à un pool Spark existant. Si Forcer le nouveau paramètre dans le Portail Azure ou ForceApplySetting dans PowerShell est activé, toutes les sessions Spark existantes sont arrêtées et les modifications de configuration sont appliquées immédiatement. Si cette option n’est pas sélectionnée, la configuration est appliquée aux nouvelles sessions Spark et les sessions existantes ne sont pas terminées.

Bien démarrer

Créer un pool Apache Spark serverless avec mise à l’échelle automatique

Pour activer la fonctionnalité de mise à l’échelle automatique, procédez comme suit dans le cadre du processus normal de création de pool :

  1. Sous l’onglet De base, cochez la case Activer la mise à l’échelle automatique.

  2. Entrez les valeurs souhaitées pour les propriétés suivantes :

    • Nombre Minimum de nœuds.
    • Nombre Maximum de nœuds.

Le nombre initial de nœuds est le nombre minimal. Cette valeur définit la taille initiale de l’instance lors de sa création. Le nombre minimal de nœuds ne peut pas être inférieur à trois.

Si vous le souhaitez, vous pouvez activer l’allocation dynamique des exécuteurs dans les scénarios où les spécifications de l’exécuteur sont très différentes entre les étapes d’un travail Spark ou si le volume de données traitées fluctue avec le temps. En activant l’allocation dynamique des exécuteurs, nous pouvons utiliser la capacité en fonction des besoins.

L’activation de l’allocation dynamique permet au travail de mettre le nombre d’exécuteurs à l’échelle dans la plage spécifiée des nombres minimum et maximum d’exécuteurs.

Apache Spark permet la configuration de l’allocation dynamique d’exécuteurs à l’aide de code, comme ci-dessous :

    %%configure -f
    {
        "conf" : {
            "spark.dynamicAllocation.maxExecutors" : "6",
            "spark.dynamicAllocation.enabled": "true",
            "spark.dynamicAllocation.minExecutors": "2"
     }
    }

Les valeurs par défaut spécifiées par le biais du code remplacent les valeurs définies par le biais de l’interface utilisateur.

Dans cet exemple, si votre travail ne nécessite que 2 exécuteurs, il n’utilise que 2 exécuteurs. Quand le travail en nécessite plus, il procède à un scale-up jusqu’à 6 exécuteurs (1 pilote, 6 exécuteurs). Quand le travail n’a pas besoin des exécuteurs, il les désaffecte. S’il n’a pas besoin du nœud, il le libère.

Notes

MaxExecutors réserve le nombre d’exécuteurs configurés. Dans notre exemple, même si vous en utilisez seulement 2, il en réserve 6.

Ainsi, lors de l’activation de l’allocation dynamique, les exécuteurs procèdent à un scale-up ou scale-down en fonction de l’utilisation des exécuteurs. Cela garantit que les exécuteurs sont provisionnés conformément aux besoins du travail en cours d’exécution.

Meilleures pratiques

Prendre en compte la latence de la montée ou de la descente en puissance

Une opération de mise à l’échelle peut prendre entre 1 et 5 minutes.

Préparation pour la mise à l’échelle vers le bas

Pendant la mise à l’échelle vers le bas des instances, la mise à l’échelle automatique place les nœuds dans un état de désaffectation afin qu’aucun nouvel exécuteur ne puisse être lancé dessus.

Les travaux en cours d’exécution continueront jusqu’à leur conclusion. Les travaux en attente attendrons d’être planifiée comme d’habitude avec moins de nœuds disponibles.

Remarque

Par défaut, la variable spark.yarn.executor.decommission.enabled est définie sur true, ce qui permet l’arrêt automatique des nœuds sous-utilisés pour optimiser l’efficacité du calcul. Si une réduction moins agressive est préférable, cette configuration peut être définie sur false.

Étapes suivantes

Démarrage rapide pour configurer un nouveau pool Spark Créer un pool Spark