Spark motorista sobrecarregado
O nó do driver coordena todo o trabalho em um cluster. Ele interpreta todos os comandos, planeja cada query e programa tarefas nos executores. Quando o Driver está sobrecarregado, ele não consegue distribuir o trabalho com rapidez suficiente, então os executores ficam parados enquanto você ainda paga por eles. Isso geralmente aparece como longas lacunas na linha do tempo dos jobs e um cluster lento ou não responsivo, mesmo que os workers não estejam ocupados.
Use esta página após verificar se o driver está fortemente carregado nas métricas do cluster enquanto os workers não estão. Para verificar isso, consulte O driver está sobrecarregado. Se o driver não estiver fortemente carregado, as lacunas têm uma causa diferente. Reveja as outras causas em Lacunas entre os jobs do Spark e use as outras páginas deste guia para diagnosticar o problema. Consulte Diagnosticar problemas de custos e desempenho usando a Spark UI.
Causas comuns
O driver geralmente está sobrecarregado por um desses motivos:
- Muitas operações concorrentes. Too many Streams, queries, ou Spark Jobs estão em execução no cluster ao mesmo tempo. Por exemplo, algumas cargas de trabalho usam threads para a execução de muitos Jobs do Spark simultaneamente. Esta é a causa mais comum.
- Código não Spark. O código que não usa Spark, como um loop Python que chama funções Python nativas, está em execução no Driver e mantém o Driver ocupado enquanto os workers ficam parados. Para verificar se o seu código é executado no Spark, consulte Execução de código não Spark.
- Muitos notebooks anexados. O driver mantém as informações de estado de cada notebook anexado ao cluster. Muitos notebooks anexados aumentam a carga no driver, mesmo quando não estão executando comandos.
Corrigir um driver sobrecarregado
Para reduzir a carga no driver, tente estas abordagens:
-
Aumente o tamanho do driver. O tipo de nó do Driver default é o mesmo que o tipo de nó do worker. Selecione um tipo de Driver maior na seção Desempenho avançado da configuração de compute. A Databricks recomenda começar dobrando o tamanho do driver e verificando como isso afeta o job. Consulte Tipo de driver.
-
Reduza a simultaneidade. Se muitas operações estiverem em execução ao mesmo tempo, execute menos Stream, queries ou Jobs Spark com threads no cluster.
-
Distribua a carga em vários clusters. Mova algumas das cargas de trabalho concorrentes para um compute separado para que cada Driver coordene menos trabalho.
-
Mova códigos que não são Spark. Se o driver estiver ocupado executando códigos que não são Spark, um driver maior não ajudará os workers parados. Reescreva o código para usar o Spark ou execute-o em Serverless compute, onde você não paga pelo tempo parado. Para reescrever o código:
- Se você é novo no Spark, consulte Tutorial: Carregar e transformação de dados usando o Apache Spark DataFrames.
- Se o código usar Python, consulte Noções básicas do PySpark.
- Se o código usar pandas, use a API do pandas no Spark.
-
Desanexe notebooks não utilizados. Desanexe notebooks que você não está usando do cluster para reduzir o estado mantido pelo driver.