Aller au contenu principal

Driver Spark surchargé

Le driver coordonne tout le travail sur un cluster. Il interprète chaque commande, planifie chaque query et planifie les tâches sur les exécuteurs. Lorsque le driver est surchargé, il ne peut pas distribuer le travail assez rapidement, si bien que les exécuteurs restent inactifs alors que vous continuez à les payer. Cela se manifeste généralement par de longues interruptions dans la chronologie des Job et un cluster lent ou ne répondant pas, même si les Worker ne sont pas occupés.

Utilisez cette page après avoir vérifié que le Driver est fortement chargé dans les métriques du cluster alors que les Worker ne le sont pas. Pour vérifier cela, consultez Le driver est surchargé. Si le driver n’est pas fortement chargé, les écarts ont une autre cause. Passez en revue les autres causes dans Écarts entre les jobs Spark et utilisez les autres pages de ce guide pour diagnostiquer le problème. Voir Diagnostiquer les problèmes de coût et de performance à l'aide de Spark UI.

Causes courantes​

Le driver est généralement surchargé pour l'une des raisons suivantes :

  • Trop d'opérations simultanées. Trop de Stream, de requêtes ou de Jobs Spark s'exécutent simultanément sur le cluster. Par exemple, certaines charges utilisent des threads pour exécuter plusieurs jobs Spark simultanément. C'est la cause la plus fréquente.
  • Code hors Spark. Le code qui n'utilise pas Spark, tel qu'une boucle Python appelant des fonctions Python natives, s'exécute sur le Driver et l'occupe alors que les Worker restent inactifs. Pour vérifier si votre code s'exécute dans Spark, voir Exécution de code hors Spark.
  • De nombreux notebooks sont associés. Le driver conserve les informations d'état de chaque notebook associé au cluster. Un grand nombre de notebooks associés augmente la charge sur le driver même lorsqu'ils n'exécutent pas de commandes.

Corriger un driver surchargé​

Pour réduire la charge sur le driver, essayez les approches suivantes :

  • Augmentez la taille du driver. Le type de nœud du Driver est default le même que celui des nœuds Worker. Sélectionnez un type de driver plus grand dans la section Performances avancées de la configuration du compute. Databricks recommande de commencer par doubler la taille du driver et de vérifier l'impact sur le job. Consultez Type de driver.

  • Réduisez la simultanéité. Si trop d'opérations s'exécutent en même temps, exécutez moins de Stream, de queries ou de jobs Spark threadés sur le cluster.

  • Répartir la charge sur plusieurs clusters. Déplacez certaines des charges de travail simultanées vers un compute distinct afin que chaque driver coordonne moins de travail.

  • Déplacer le code non Spark. Si le Driver est occupé à exécuter du code non-Spark, un Driver plus puissant n'aidera pas les Worker inactifs. Réécrivez le code pour utiliser Spark, ou exécutez-le sur un compute serverless, où vous ne payez pas le temps d'inactivité. Pour réécrire le code :

  • Dissociez les notebooks inutilisés. Dissociez du cluster les notebooks que vous n’utilisez pas afin de réduire l’état maintenu par le driver.