Spark
Nível médioPor que a utilização do meu cluster Spark é baixa mesmo com o job terminando com sucesso?
«Terminou sem erros» e «usamos o cluster que estamos pagando» são duas afirmações diferentes - e o status verde do job só confirma uma delas.
O sucesso de um job só significa que todas as tarefas terminaram sem falhar. Não diz nada sobre se metade dos seus executors ficou ociosa enquanto isso.
A causa mais comum: menos partições que cores
Se um stage tem 200 partições e seu cluster tem 400 cores disponíveis, metade do cluster não recebe nenhuma tarefa durante toda a duração desse stage - preço cheio, trabalho zero. Isso aparece constantemente em jobs que herdaram um número de partições de shuffle de um cluster bem menor e nunca revisaram isso depois de escalar.
A segunda causa mais comum: um stage domina o tempo total
Uma transformação pesada em UDF, ou um filtro mal empurrado para baixo (pushdown ruim), pode fazer um único stage consumir 80% do tempo total do job enquanto toca só uma fração das partições dos dados - o resto do cluster fica ocioso esperando esse stage terminar. O dynamic allocation ajuda a reduzir custo aqui (libera executors ociosos), mas não corrige a forma do problema; o job continua limitado por aquele único stage, não importa quantos executors estejam tecnicamente disponíveis.
A métrica que realmente separa os dois casos
Na aba Executors da Spark UI, compare o task time de cada executor com o elapsed time total do job. Uma proporção bem abaixo de 1 na maioria dos executors, durante quase todo o job, aponta para o descompasso entre partições e cores. Uma proporção perto de 1 na maior parte do job, mas com uma queda visível durante um stage específico, aponta para o gargalo de um único stage - causas diferentes para o que parece o mesmo sintoma num dashboard de custo.
Veja como isso fica no seu próprio pipeline.
Envie um event log real do Spark, um run_results.json do dbt, ou uma exportação de
métricas do Flink, e receba recomendações concretas que exigem sua aprovação - não mais uma regra
geral.