Pular para o conteúdo principal

Inclina e derrama

A inclinação e o spill são dois dos motivos mais comuns para a execução de um único estágio durar muito mais tempo do que o esperado. Ambos aparecem na página do estágio, juntamente com as correções para tentar para cada um.

Use esta página depois de abrir a página de estágio do estágio mais longo em um job. Para encontrar esse estágio, consulte Diagnosticar um job longo no Spark. Se o estágio tiver apenas uma tarefa, consulte Estágio Spark longo com uma tarefa.

Derrame​

O spill ocorre quando o Spark fica com pouca memória de execução, que o Spark usa para shuffles, joins, ordenações e agregações. O Spark então grava dados da memória em disco, o que pode ser caro. Spill é mais comum durante o embaralhamento de dados.

Verifique o estágio para spill primeiro. Os detalhes do estágio na parte superior da página do estágio mostram estatísticas de spill quando o estágio tem spill:

Estatísticas do jogo

Os detalhes do estágio também incluem outras métricas, como o pico de memória de execução. Para obter detalhes sobre essas e outras métricas de estágio, consulte Detalhes do estágio na documentação do Apache Spark.

Se as estatísticas de spill não aparecerem, o stage não terá spill. Se o stage tiver algum spill, tente estas abordagens:

  • Use shuffle otimizado automaticamente. Defina spark.sql.shuffle.partitions=auto para que o Spark escolha o número de partições de embaralhamento com base no plano de query e no tamanho dos dados de entrada. Consulte configuração do AQE.
  • Reduza os dados mantidos na memória. Reduza o número de linhas ou colunas que a query processa, ou o tamanho de colunas grandes como strings, arrays, mapas e structs. Veja DATA_SPILL.
  • Aumente a memória do executor. A memória total do executor determina quantos dados cabem na memória antes que o Spark os spill para o disco. Use instâncias com mais memória. Para ETL de lote complexo com joins entre várias tabelas, use workers menores e mais numerosos para reduzir a quantidade de dados embaralhados. Consulte ETL de lote complexo.
  • Limite o tamanho do lotes de transmissão. Se o estágio fizer parte de uma query de Structured Streaming, limite a taxa de entrada para que grandes micro-lotes não causem spill. Consulte Configurar o tamanho dos lotes de Structured Streaming no Databricks.

Inclinar​

O desequilíbrio de dados ocorre quando uma ou algumas tarefas demoram muito mais do que o restante. Os outros núcleos ficam parados enquanto essas tarefas terminam, o que resulta em baixa utilização do cluster e jobs mais longos.

Para verificar se há desequilíbrio, role para baixo até Métricas de resumo . Compare a duração Máxima com a duração do 75º percentil. A captura de tela a seguir mostra um estágio saudável, onde o 75º percentil e o Máximo são iguais:

Estatísticas da Skew

Se a duração máxima exceder o 75º percentil em 50% ou mais, o stage pode ter skew. Para corrigir skew, tente estas abordagens:

  • Verifique se o AQE lida com a inclinação. Se o estágio de inclinação fizer parte de uma sort merge join ou shuffle hash join, a execução query adaptável (AQE) divide automaticamente as partições inclinadas, mas apenas quando uma partição excede seus dois limites de tamanho. As broadcast joins nunca são otimizadas por inclinação, e o join type determina qual lado a AQE pode otimizar. Veja Por que o AQE não detectou minha distorção de dados?.
  • Ajuste os limites de inclinação do AQE. Se as partições inclinadas forem menores que os limites, ajuste spark.sql.adaptive.skewJoin.skewedPartitionFactor e spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes. Veja Gerenciar dinamicamente o join de inclinação.
  • Chaves distorcidas de sal ou pré-agregadas. Se alguns valores de key contiverem a maioria dos dados em um join ou agregação, anexe um sufixo de bucket aleatório às keys distorcidas e, em seguida, agrupe e agregue em duas fases. Consulte Lidar com a distorção de dados.
  • Agrupe a tabela de origem. Se a distorção vier da forma como uma tabela armazenada está organizada, use o cluster líquido, adequado para tabelas com grande distorção na distribuição de dados. Consulte Usar cluster líquido para tabelas.
  • Rebalanceie as partições de saída. Se o estágio inclinado gravar uma tabela, use a dica REBALANCE. O Spark divide as partições de saída inclinadas para que nenhuma partição seja muito grande. O Spark ignora a dica se o AQE não estiver ativado. Consulte Dicas de particionamento.

Sem distorção ou derramamento​

Se o estágio não tiver distorção ou spill, verifique se ele está limitado por I/O. Para retornar à página do trabalho, role até o topo da página do estágio e clique em IDs de Job associados :

Estágio para Job

Em seguida, consulte E/S alta de estágio Spark.