Dataproc sans serveur pour l'autoscaling Spark

Ce document fournit des informations sur l'autoscaling Dataproc sans serveur pour Spark. Lorsque vous envoyez votre charge de travail Spark, Dataproc sans serveur pour Spark peut ajuster de manière dynamique les ressources de la charge de travail, telles que le nombre d'exécuteurs, pour l'exécuter efficacement. L'autoscaling Dataproc sans serveur est le comportement par défaut. Il utilise l'allocation dynamique des ressources Spark pour déterminer si, comment et quand ajuster votre charge de travail.

Autoscaling Dataproc sans serveur V2

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

  • Réduction de la taille des nœuds de manière asynchrone: l'autoscaling V2 remplace la réduction de la taille des nœuds de manière synchrone de la version V1 par une réduction de la taille des nœuds de manière asynchrone. Grâce à la réduction de taille asynchrone, Dataproc Serverless réduit les ressources de charge de travail sans attendre que tous les nœuds aient terminé la migration de mélange. Cela signifie que les nœuds à longue traîne qui se réduisent lentement ne bloquent pas l'ajustement à la hausse.
  • Sélection intelligente des nœuds à réduire: l'autoscaling V2 remplace la sélection aléatoire des nœuds de la version V1 par un algorithme intelligent qui identifie les meilleurs nœuds à réduire en premier. Cet algorithme tient compte de facteurs tels que la taille des données de mélange et le temps d'inactivité du nœud.
  • Comportement configurable de la mise hors service et de la migration de mélange Spark : l'autoscaling V2 vous permet d'utiliser des propriétés Spark standards pour configurer la mise hors service et la migration de mélange Spark. Cette fonctionnalité peut vous aider à maintenir la compatibilité de la migration avec vos propriétés Spark personnalisées.

Fonctionnalités d'autoscaling Dataproc sans serveur

Caractéristique Dataproc sans serveur Autoscaling V1 Dataproc sans serveur Autoscaling V2
Réduction de la taille des nœuds Synchrone Asynchrone
Sélection de nœuds pour la réduction de l'échelle Aléatoire Intelligent
Mise hors service concertée et migration aléatoire de Spark 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 (voir la section Définir des propriétés Spark).

Propriété Description Par défaut
spark.dataproc.scaling.version Version d'autoscaling Spark de Dataproc sans serveur. Spécifiez la version 1 ou 2 (voir la section Autoscaling Dataproc sans serveur V2). 1
spark.dynamicAllocation.enabled Indique si l'allocation dynamique des ressources doit être utilisée, ce qui permet d'ajuster le nombre d'exécuteurs en fonction de la charge de travail. Définir 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 lancée, l'autoscaling peut modifier le nombre d'exécuteurs actifs. La valeur minimale est 2 et la valeur maximale est 500. 2
spark.dynamicAllocation.minExecutors Nombre minimal d'exécuteurs à utiliser pour réduire la charge de travail. La valeur minimale est de 2. 2
spark.dynamicAllocation.maxExecutors Nombre maximal d'exécuteurs à utiliser pour faire évoluer la charge de travail. La valeur maximale est de 2000. 1000
spark.dynamicAllocation.executorAllocationRatio Personnalisez l'ajustement à la hausse de la charge de travail Spark. Accepte une valeur comprise entre 0 et 1. La valeur 1.0 offre une capacité d'ajustement maximale et permet d'atteindre un parallélisme maximal. Une valeur de 0.5 définit la capacité d'ajustement et le parallélisme à la moitié de la valeur maximale. 0.3
spark.reducer.fetchMigratedShuffle.enabled Lorsque la valeur est true, permet d'extraire l'emplacement de sortie de mélange du pilote Spark après l'échec d'une extraction à partir d'un exécuteur qui a été mis hors service en raison de l'allocation dynamique Spark. Cela réduit les erreurs ExecutorDeadException causées par la migration de blocs de mélange d'exécuteurs mis hors service vers des exécuteurs actifs, et réduit les tentatives de relecture d'étapes causées par des erreurs FetchFailedException (voir FetchFailedException causée par ExecutorDeadException). Cette propriété est disponible dans les versions d'exécution Spark Dataproc sans serveur 1.1.12 et versions ultérieures, ainsi que 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 suivantes liées à l'allocation dynamique des ressources Spark (pour en savoir plus sur les métriques Spark, consultez la section Surveillance et instrumentation).

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

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

  • FetchFailedException causée par ExecutorDeadException

    Cause: Lorsque l'allocation dynamique Spark réduit la taille d'un exécuteur, le fichier de mélange est migré vers les exécuteurs actifs. Toutefois, comme la tâche de réducteur Spark sur un exécuteur extrait la sortie de mélange à partir de l'emplacement défini par le pilote Spark au démarrage de la tâche de réducteur, si un fichier de mélange est migré, le réducteur peut continuer à tenter d'extraire la sortie de mélange à partir d'un exécuteur mis hors service, ce qui entraîne des erreurs ExecutorDeadException et FetchFailedException.

    Solution: Activez le rafraîchissement de l'emplacement de mélange en définissant spark.reducer.fetchMigratedShuffle.enabled sur true lorsque vous exécutez votre charge de travail par lot Dataproc sans serveur pour Spark (voir Définir les propriétés de la charge de travail par lot Spark). Lorsque cette propriété est activée, la tâche de réduction récupère à nouveau l'emplacement de sortie de mélange auprès du pilote après l'échec d'une récupération à partir d'un exécuteur mis hors service.