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
etFetchFailedException
.Solution: Activez le rafraîchissement de l'emplacement de mélange en définissant
spark.reducer.fetchMigratedShuffle.enabled
surtrue
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.