Ce document fournit des informations sur Google Cloud l'autoscaling de Serverless pour Apache Spark. Lorsque vous envoyez votre charge de travail Spark, Serverless pour Apache Spark peut effectuer un scaling dynamique des ressources de la charge de travail, telles que le nombre d'exécuteurs, de façon à l'exécuter efficacement. L'autoscaling de Serverless pour Apache Spark est le comportement par défaut. Il utilise l'allocation dynamique des ressources Spark pour déterminer si, comment et quand effectuer le scaling de votre charge de travail.
Autoscaling V2 de Serverless pour Apache Spark
L'autoscaling version 2 (V2) de Serverless pour Apache Spark ajoute des fonctionnalités et des améliorations à la version 1 (V1) par défaut pour vous aider à gérer les charges de travail Serverless pour Apache Spark, à améliorer leurs performances et à réduire les coûts :
- Réduction asynchrone des nœuds : l'autoscaling V2 remplace la réduction synchrone de la V1 par une réduction asynchrone. Grâce à la réduction asynchrone, Serverless pour Apache Spark réduit les ressources de la charge de travail sans attendre que tous les nœuds aient terminé la migration du shuffle. Cela signifie que les nœuds à longue traîne qui se réduisent lentement ne bloquent pas le scaling.
- Sélection intelligente des nœuds pour la réduction : l'autoscaling V2 remplace la sélection aléatoire des nœuds de la V1 par un algorithme intelligent qui identifie les meilleurs nœuds à réduire en premier. Cet algorithme prend en compte des facteurs tels que la taille des données de shuffle du nœud et le temps d'inactivité.
- Mise hors service concertée et comportement de migration du shuffle Spark configurables: l'autoscaling V2 vous permet d'utiliser les propriétés Spark standards pour configurer la mise hors service concertée et la migration du shuffle Spark. Cette fonctionnalité peut aider à maintenir la compatibilité de la migration avec vos propriétés Spark personnalisées.
Fonctionnalités d'autoscaling de Serverless pour Apache Spark
| Fonctionnalité | Autoscaling V1 de Serverless pour Apache Spark | Autoscaling V2 de Serverless pour Apache Spark |
| Réduction des nœuds | Synchrone | Asynchrone |
| Sélection des nœuds pour la réduction | Aléatoire | Intelligente |
| Mise hors service concertée et migration du shuffle 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 (découvrez comment définir les propriétés Spark).
| Propriété | Description | Par défaut |
|---|---|---|
spark.dataproc.scaling.version |
Version d'autoscaling Spark de Serverless pour Apache Spark. Spécifiez
la version 1 ou 2 (consultez
Autoscaling V2 de Serverless pour Apache Spark). |
1 |
spark.dynamicAllocation.enabled |
Indique si l'allocation dynamique des ressources doit être utilisée, ce qui augmente et diminue le
nombre d'exécuteurs en fonction de la charge de travail.
Si vous définissez la valeur sur false, l'autoscaling est désactivé
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 2 et la valeur maximale est 2000. |
2 |
spark.dynamicAllocation.minExecutors |
Nombre minimal d'exécuteurs pour réduire la charge de travail.
La valeur minimale est 2. |
2 |
spark.dynamicAllocation.maxExecutors |
Nombre maximal d'exécuteurs pour augmenter la charge de travail.
La valeur maximale est 2000. |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personnalise l'augmentation de la charge de travail Spark. Accepte une valeur comprise entre
0 et 1. La valeur 1.0
offre une capacité d'augmentation maximale et permet d'atteindre un parallélisme maximal. La valeur 0.5 définit la capacité d'augmentation et
le parallélisme à la moitié de la valeur maximale. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Lorsque la valeur est définie sur true, permet de récupérer l'emplacement de sortie du shuffle
à partir du pilote Spark après l'échec d'une récupération à partir d'un exécuteur mis
hors service en raison de l'allocation dynamique Spark. Cela réduit les erreurs ExecutorDeadException causées par la migration du bloc de shuffle des exécuteurs mis hors service vers les exécuteurs actifs, ainsi que les nouvelles tentatives d'étape causées par les erreurs FetchFailedException (consultez FetchFailedException causée par ExecutorDeadException).
Cette propriété est disponible dans les versions d'exécution Spark Serverless pour Apache Spark
Spark runtime
versions
1.1.12 et ultérieures, ainsi que 2.0.20 et 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 Surveillance et instrumentation).
| Métrique | Description |
|---|---|
maximum-needed |
Nombre maximal d'exécuteurs nécessaires sous la charge actuelle pour satisfaire toutes les tâches en cours et en attente. |
running |
Nombre d'exécuteurs en cours d'exécution. |
Problèmes et solutions liés à l'allocation dynamique Spark
FetchFailedException causée par ExecutorDeadException
Cause : lorsque l'allocation dynamique Spark réduit un exécuteur, le fichier de shuffle est migré vers des exécuteurs actifs. Toutefois, étant donné que la tâche de réduction Spark sur un exécuteur récupère la sortie du shuffle à partir de l'emplacement défini par le pilote Spark au démarrage de la tâche de réduction, si un fichier de shuffle est migré, le réducteur peut continuer à tenter de récupérer la sortie du shuffle à partir d'un exécuteur mis hors service, ce qui entraîne des erreurs
ExecutorDeadExceptionetFetchFailedException.Solution : activez la récupération de l'emplacement du shuffle en définissant le
spark.reducer.fetchMigratedShuffle.enabledsurtruelorsque vous exécutez votre charge de travail par lot Serverless pour Apache Spark (consultez 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 l'emplacement de sortie du shuffle à partir du pilote après l'échec d'une récupération à partir d'un exécuteur mis hors service.