Dataproc sans serveur pour l'autoscaling Spark

Lorsque vous envoyez votre charge de travail Spark, Dataproc sans serveur pour Spark peut effectuer un scaling dynamique des ressources de charge de travail, telles que le nombre d'exécuteurs, afin de l'exécuter efficacement. L'autoscaling sans serveur de Dataproc est le comportement par défaut et utilise l'allocation dynamique des ressources Spark pour déterminer si, comment et quand faire évoluer votre charge de travail.

Autoscaling sans serveur Dataproc V2

La fonctionnalité d'autoscaling sans serveur version 2 (V2) de Dataproc offre des fonctionnalités et des améliorations par rapport à la version 1 (V1) par défaut pour vous aider à gérer les charges de travail sans serveur Dataproc, à améliorer leurs performances et à réduire les coûts:

  • Réduction de nœuds asynchrones: l'autoscaling V2 remplace la baisse synchrone de V1 par une réduction de niveau asynchrone. Grâce à un scaling à la baisse asynchrone, Dataproc sans serveur réduit le scaling des ressources de charge de travail sans attendre que tous les nœuds aient terminé la migration en mode aléatoire. Cela signifie que les nœuds en longue traîne qui effectuent un scaling à la baisse lentement ne bloqueront pas l'augmentation de la capacité.
  • Sélection des nœuds avec scaling à la baisse intelligent: l'autoscaling V2 remplace la sélection aléatoire des nœuds de V1 par un algorithme intelligent qui identifie les meilleurs nœuds pour effectuer un scaling à la baisse en premier. Cet algorithme prend en compte des facteurs tels que la taille des données de brassage du nœud et le temps d'inactivité.
  • Comportement de mise hors service concertée et de migration aléatoire Spark configurable : l'autoscaling V2 vous permet d'utiliser les propriétés Spark standards pour configurer la mise hors service concertée et la migration aléatoire Spark. Cette fonctionnalité peut vous aider à maintenir la compatibilité de la migration avec vos propriétés Spark personnalisées.

Fonctionnalités d'autoscaling sans serveur de Dataproc

Sélection Autoscaling sans serveur Dataproc V1 Autoscaling sans serveur Dataproc V2
Scaling à la baisse des nœuds Synchrone Asynchrone
Sélection du nœud pour le scaling à la baisse Aléatoire Intelligent
Mise hors service concertée Spark et migration aléatoire Non configurable Configurable

Propriétés d'allocation dynamique Spark

Le tableau suivant répertorie les propriétés d'allocation dynamique Spark que vous pouvez définir lorsque vous envoyez une charge de travail par lot pour contrôler l'autoscaling (consultez la section Définir les propriétés Spark).

Propriété Description Par défaut
spark.dataproc.scaling.version Version d'autoscaling de Spark sans serveur pour Dataproc. Spécifiez la version 1 ou 2 (consultez la section Autoscaling sans serveur Dataproc V2). 1
spark.dynamicAllocation.enabled Indique s'il faut utiliser l'allocation dynamique des ressources, qui effectue un scaling à la hausse ou à la baisse du nombre d'exécuteurs en fonction de la charge de travail. La définition de la valeur sur false désactive l'autoscaling pour la charge de travail. Valeur par défaut : true. true
spark.dynamicAllocation.initialExecutors Nombre initial d'exécuteurs alloués à la charge de travail. Une fois la charge de travail démarrée, l'autoscaling peut modifier le nombre d'exécuteurs actifs. La valeur minimale est de 2 et la valeur maximale de 500. 2
spark.dynamicAllocation.minExecutors Nombre minimal d'exécuteurs pour le scaling à la baisse de la charge de travail. La valeur minimale est de 2. 2
spark.dynamicAllocation.maxExecutors Nombre maximal d'exécuteurs jusqu'à atteindre le scaling de la charge de travail. La valeur maximale est de 2000. 1000
spark.dynamicAllocation.executorAllocationRatio Personnalise le scaling à la hausse de la charge de travail Spark. Accepte une valeur comprise entre 0 et 1. La valeur 1.0 offre une capacité maximale de scaling à la hausse et permet d'atteindre un parallélisme maximal. La valeur 0.5 définit la capacité de scaling à la hausse et le parallélisme à la moitié de la valeur maximale. 0.3
spark.reducer.fetchMigratedShuffle.enabled Lorsque ce paramètre est défini sur true, il active la récupération de l'emplacement de sortie du brassage à partir du pilote Spark après l'échec d'une récupération depuis un exécuteur mis hors service en raison de l'allocation dynamique Spark. Vous réduisez ainsi le nombre d'erreurs ExecutorDeadException causées par la migration des blocs de brassage depuis les exécuteurs hors service vers des exécuteurs actifs, et le nombre de tentatives d'exécution d'étapes dues aux erreurs FetchFailedException (voir l'exception FetchFailedException causée par ExecutorDeadException). Cette propriété est disponible dans les versions d'exécution de Spark sans serveur Dataproc 1.1.12 et versions ultérieures, et 2.0.20 et versions ultérieures. false

Métriques d'allocation dynamique Spark

Les charges de travail par lot Spark génèrent les métriques listées ci-dessous concernant l'allocation dynamique de ressources Spark (pour en savoir plus sur les métriques Spark, consultez Surveillance et instrumentation).

Métrique Description
maximum-needed Nombre maximal d'exécuteurs nécessaires pour répondre à toutes les tâches en cours et en attente avec la charge actuelle.
running Nombre d'exécuteurs en cours d'exécution exécutant des tâches.

Problèmes et solutions liés à l'allocation dynamique

  • FetchFailedException causée par ExecutorDeadException

    Cause: lorsque l'allocation dynamique Spark effectue le scaling à la baisse d'un exécuteur, le fichier de brassage est migré vers des exécuteurs en direct. Toutefois, comme la tâche du réducteur Spark sur un exécuteur récupère la sortie de brassage à partir de l'emplacement défini par le pilote Spark au démarrage de la tâche, si un fichier de brassage est migré, le réducteur peut continuer à tenter de récupérer la sortie de brassage à partir d'un exécuteur hors service, ce qui entraîne des erreurs ExecutorDeadException et FetchFailedException.

    Solution: activez la récupération de l'emplacement de brassage en définissant spark.reducer.fetchMigratedShuffle.enabled sur true lorsque vous exécutez votre charge de travail par lot Dataproc sans serveur pour Spark (consultez la section Définir les propriétés des charges de travail par lot Spark). Lorsque cette propriété est activée, la tâche de réduction récupère l'emplacement de sortie du brassage à partir du pilote après l'échec d'une récupération à partir d'un exécuteur hors service.