Lacunas entre os trabalhos do Spark
Assim, você vê lacunas na linha do tempo de seus trabalhos, como as seguintes:
Há algumas razões pelas quais isso pode estar acontecendo. Se as lacunas representam uma grande proporção do tempo gasto em sua carga de trabalho, você precisa descobrir o que está causando essas lacunas e se é esperado ou não. Há algumas coisas que podem estar acontecendo durante os intervalos:
- Não há trabalho a fazer
- Driver está compilando um plano de execução complexo
- Execução de código não-faísca
- O driver está sobrecarregado
- O cluster está funcionando mal
Sem trabalho
Na computação multiuso, não ter trabalho a fazer é a explicação mais provável para as lacunas. Como o cluster está em execução e os utilizadores estão a submeter consultas, esperam-se lacunas. Estas lacunas são o tempo entre os envios da consulta.
Plano de execução complexo
Por exemplo, se você usar withColumn()
em um loop, ele cria um plano muito caro para processar. As lacunas podem ser o tempo que o motorista está gastando simplesmente construindo e processando o plano. Se for esse o caso, tente simplificar o código. Utilize selectExpr()
para combinar várias chamadas withColumn()
numa expressão ou converta o código em SQL. Também pode incorporar o SQL no código Python, através do Python, para manipular a consulta com funções de cadeia de carateres. Tal geralmente corrige este tipo de problema.
Execução de código não-Spark
O código do Spark é escrito em SQL ou usando uma API do Spark como o PySpark. Qualquer execução de código que não seja o Spark aparecerá na linha do tempo como lacunas. Por exemplo, você pode ter um loop em Python que chama funções nativas do Python. Esse código não está sendo executado no Spark e pode aparecer como uma lacuna na linha do tempo. Se você não tiver certeza se seu código está executando o Spark, tente executá-lo interativamente em um bloco de anotações. Se o código estiver usando o Spark, você verá trabalhos do Spark na célula:
Você também pode expandir a lista suspensa Trabalhos do Spark sob a célula para ver se os trabalhos estão sendo executados ativamente (caso o Spark esteja ocioso). Se você não estiver usando o Spark, não verá os Trabalhos do Spark sob a célula ou verá que nenhum está ativo. Se você não pode executar o código interativamente, você pode tentar fazer login em seu código e ver se você pode corresponder as lacunas com seções do seu código por carimbo de data/hora, mas isso pode ser complicado.
Se vir lacunas na linha cronológica causadas pela execução de código não pertencente ao Spark, significa que os trabalhos estão inativos e provavelmente a desperdiçar dinheiro durante as lacunas. Talvez seja intencional e inevitável, mas se conseguir escrever este código para utilizar o Spark, utilizará totalmente o cluster. Comece com este tutorial para aprender a trabalhar com o Spark.
O driver está sobrecarregado
Para determinar se o controlador está sobrecarregado, tem de analisar as métricas do cluster.
Se o cluster estiver no DBR 13.0 ou posterior, clique em Métricas , conforme realçado nesta captura de tela:
Observe a visualização de distribuição de carga do servidor. Você deve olhar para ver se o driver está muito carregado. Essa visualização tem um bloco de cores para cada máquina no cluster. Vermelho significa muito carregado, e azul significa não carregado.
A captura de tela anterior mostra um cluster basicamente ocioso. Se o driver estiver sobrecarregado, seria algo como isto:
Podemos ver que um quadrado é vermelho, enquanto os outros são azuis. Passe o rato sobre o quadrado vermelho para se certificar de que o bloco vermelho representa o seu condutor.
Para corrigir um driver sobrecarregado, consulte Driver Spark sobrecarregado.
O cluster está funcionando mal
Clusters em mau funcionamento são raros, mas se for este o caso, pode ser difícil determinar o que aconteceu. Pode reiniciar o cluster para ver se resolve o problema. Também pode analisar os registos para ver se há algo suspeito. A guia Log de eventos e as guias Logs do driver, destacadas na captura de tela abaixo, serão os locais a serem procurados:
Pode ativar a Entrega de registos de clusters para aceder aos registos de trabalho. Também pode alterar o nível de registo, mas talvez seja necessário contactar a equipa de conta do Databricks para obter ajuda.