Pular para o conteúdo
Spark

Spark · tema 9 de 30

Spark: introdução

35 min · 2 vídeos · 12 cards · 1 drill

Por que cai

Spark é o motor por trás de quase todo pipeline moderno, incluindo o Databricks que o banco usa. A banca não quer a definição de marketing: quer que você descreva o que cada processo faz e o que acontece de verdade entre a linha de código e o resultado.

Pré-teste · 1 de 2

responda antes de ver

Você executa df.filter(...).select(...) e nada acontece. Por quê?

Confiança:

Vídeo · português · 15 min

Panorama em português no tamanho certo para uma primeira passada. Assista com a pergunta 'quem faz o quê' na cabeça: driver, cluster manager e executor precisam ficar separados na sua fala.

Em uma frase

Spark é um motor de processamento distribuído que divide o dado em partições, monta um plano antes de executar e processa em paralelo num cluster, encadeando etapas em memória em vez de gravar cada uma em disco.

Por que ele substituiu o MapReduce

O MapReduce resolveu o problema de processar dado em muitas máquinas comuns, mas com um custo estrutural: cada etapa grava o resultado em disco. Um pipeline de cinco etapas paga cinco idas e voltas ao HDFS. Em carga iterativa — treino de modelo, recálculo de score — isso domina o tempo.

O Spark encadeia operações dentro de um mesmo estágio sem materializar em disco, e só grava quando é obrigado. Some a isso duas coisas: uma API muito mais expressiva que escrever map e reduce à mão, e o fato de montar o plano inteiro antes de executar, o que abre espaço para otimização.

Arquitetura: quem faz o quê

ComponenteOnde rodaResponsabilidade
DriverProcesso da sua aplicaçãoMantém a SparkSession, converte o código em DAG, divide em stages e tasks, agenda nos executores e recebe o resultado das ações
Cluster managerServiço externo (standalone, YARN, Kubernetes)Aloca recursos: quantos executores, com quanta memória e quantos núcleos
ExecutorNós de trabalhoRoda as tasks sobre as partições, mantém cache e grava a saída de shuffle

Repare que o driver não processa dado. Ele coordena. Quando você chama collect(), aí sim o dado vem para ele — e é por isso que essa ação derruba aplicação.

Lazy evaluation

transformaçãoOperação que devolve outro conjunto distribuído e apenas acrescenta um nó ao plano: filter, select, join, groupBy. açãoOperação que devolve um valor ao driver ou escreve num destino, e por isso dispara a execução: count, collect, show, write.

Você pode encadear vinte transformações e não ver nada acontecer. Isso é proposital. Com o plano completo em mãos, o otimizador consegue empurrar filtros para perto da leitura, descartar colunas que ninguém usa e combinar operações.

Um efeito colateral que você deve saber citar: erro de transformação aparece na ação. O rastreamento de pilha aponta a linha do count(), não a do join errado — saber disso poupa horas de depuração.

DAG, job, stage e task

  1. 1Ação chamada: o driver fecha o plano lógico e o otimizador gera o plano físico.
  2. 2Job: cada ação dispara um job.
  3. 3DAG: o job vira um grafo acíclico dirigido de operações.
  4. 4Stage: o DAG é cortado nos pontos de shuffle. Sem shuffle, tudo cabe num stage só.
  5. 5Task: cada stage vira N tasks, uma por partição, e é isso que roda no executor.
shuffleRedistribuição de dados entre executores, necessária quando a mesma chave precisa terminar no mesmo lugar.

A fronteira do stage é o shuffle porque, enquanto cada partição pode ser processada isoladamente, o Spark encadeia tudo sem parar. No momento em que o groupBy exige que todas as transações do mesmo cartão fiquem juntas, o estágio anterior precisa terminar e gravar sua saída antes de o próximo poder ler.

O que acontece de verdade num .count()

Você chama a ação. O driver fecha e otimiza o plano, monta o DAG e o corta em stages nos pontos de shuffle. Cada stage vira tasks, uma por partição. O cluster manager já entregou os executores; o driver agenda as tasks neles. Os executores leem suas partições, aplicam as operações e, se houver shuffle, gravam a saída para o estágio seguinte. No último estágio cada task devolve uma contagem parcial, o driver soma e imprime um número.

O detalhe que impressiona: o único dado que volta ao driver é esse número. Foi o cluster inteiro que trabalhou, e a resposta cabe num inteiro.

Se quiser outro ângulo

Boa para o contexto histórico e para a comparação com o MapReduce, que é a primeira metade da resposta oral. Serve também como revisão de véspera.

Como cai na sabatina

O que acontece quando você chama .count()?

Erros comuns

  • Dizer que Spark é rápido porque 'roda em memória', sem explicar o quê. O ganho é não gravar o resultado intermediário de cada etapa em disco, como o MapReduce fazia entre map e reduce.
  • Achar que Spark carrega a base inteira na RAM. Ele processa por partição e derrama para disco quando não cabe; memória é otimização, não requisito.
  • Confundir driver com nó mestre do cluster. O driver é o processo da sua aplicação, que monta o plano e agenda tasks; o cluster manager é quem aloca recursos, e pode ser YARN, Kubernetes ou o standalone.
  • Não saber dizer o que uma transformação faz. Transformação não executa nada: ela acrescenta um nó ao plano. Só a ação dispara execução.
  • Trazer resultado para o driver sem pensar. collect() puxa todas as partições para a memória de um único processo, e é assim que se derruba o driver com uma tabela de bilhões de linhas.
  • Não relacionar shuffle com stage. A fronteira de stage é definida pelo shuffle: enquanto os dados não precisam ser redistribuídos entre executores, tudo cabe no mesmo stage.

Flashcards

Card 1 de 12

0 certos · 0 a rever

Drill

Transformação ou ação?

Diga se a operação apenas monta plano (transformação) ou dispara execução (ação).

  1. 1.df.filter(col('valor') > 1000)

  2. 2.df.count()

  3. 3.df.groupBy('id_cartao').sum('valor')

  4. 4.df.write.parquet('/lake/bronze/transacoes')

  5. 5.df.show(20)

  6. 6.df.withColumn('mes', month(col('data')))

Quiz · 1 de 2

Qual é a função do cluster manager numa aplicação Spark?

Explique para um gerente

Explique para um gestor por que o Spark ficou mais rápido que o Hadoop sem que o disco tenha ficado mais rápido.

Responda em voz alta antes de seguir. Se travar numa palavra técnica, é sinal de que ainda não entendeu essa parte.

Perguntas de sabatina deste tema

  • · O que acontece, do começo ao fim, quando você chama .count() num DataFrame que passou por filtros e um groupBy?
  • · Explique a arquitetura do Spark e por que ele substituiu o MapReduce no processamento em lote.
Responder no simulado

Para ir além