Pergunta de entrevista para Engenheiro de Dados

Uma task do Spark roda por uma hora enquanto o resto termina em segundos. O que está acontecendo e como você resolve?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Isso é data skew: uma chave concentra uma fatia desproporcional das linhas, então uma única partição faz quase todo o trabalho depois de um shuffle. Confirme olhando a distribuição da chave de join ou de agrupamento. Resolva habilitando o tratamento de skew join do adaptive query execution, fazendo broadcast do lado pequeno se ele couber, aplicando salting na chave quente para espalhá-la por várias partições, ou filtrando e processando as chaves discrepantes separadamente.

Por que os entrevistadores perguntam isso

Skew é o problema de performance mais comum no Spark, e o caminho de diagnóstico mostra se você realmente já leu uma Spark UI. Os entrevistadores querem que você confirme o skew com dados em vez de adivinhar, e que saiba que aumentar executors ou memória não ajuda, porque o gargalo é uma partição e não a capacidade total.

Como estruturar sua resposta

  • Nomeie o skew e explique por que uma partição domina depois de um shuffle.
  • Confirme: cheque a distribuição da chave e a dispersão de duração das tasks do stage.
  • Descarte a não solução de simplesmente adicionar executors.
  • Dê as soluções em ordem: broadcast, skew join do AQE, salting, isolar a chave.
  • Mencione os nulos como culpado escondido frequente.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Uma cauda longa em uma task quase sempre significa skew: depois do shuffle, uma chave caiu em uma partição e essa partição tem a maioria das linhas. Primeiro eu confirmo em vez de presumir, então um group by na chave de join com um count, e uma olhada no stage na Spark UI onde a duração máxima da task e o shuffle read são muito maiores que a mediana. Jogar executors no problema não faz nada, porque o trabalho não está distribuído. A solução depende do formato. Se o outro lado do join é pequeno, faça broadcast dele e pule o shuffle inteiro. Se ele é realmente grande dos dois lados, o adaptive query execution consegue dividir partições com skew automaticamente, e além disso eu aplico salting: acrescento um sufixo aleatório à chave quente, replico o lado pequeno por esses sufixos, faço o join e depois agrego. O que pega as pessoas são os nulos. Nós tínhamos uma chave de join que era nula em cerca de 40% das linhas, todas com o mesmo hash e na mesma partição, e filtrar os nulos antes do join resolveu de imediato.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Como o adaptive query execution detecta uma partição com skew?
  • Qual é o risco de fazer broadcast de uma tabela grande demais?
  • Como você aplicaria salting em um join sem mudar os resultados?

Mais perguntas para Engenheiro de Dados

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot