Pular para o conteúdo
Hadoop

Hadoop · tema 5 de 30

MapReduce

30 min · 2 vídeos · 13 cards · 2 drill

Por que cai

É o exercício clássico de raciocínio distribuído: a banca pede o contador de palavras não para ver se você sabe contar, mas para ver se você identifica shuffle e escrita em disco como os pontos caros, e se sabe explicar por que Spark ganhou.

Pré-teste · 1 de 2

responda antes de ver

Em um job que soma o valor transacionado por agência, o que o shuffle faz?

Confiança:

Vídeo · português · 13 min

Percorre o fluxo completo com exemplo, que é o formato que você precisa reproduzir em voz alta. Preste atenção em onde ele mostra o dado saindo de uma máquina para outra: é ali que está o gargalo.

Em uma frase

MapReduce é um modelo de processamento em que map transforma cada registro em pares chave-valor, o shuffle agrupa tudo que tem a mesma chave e o reduce agrega cada grupo.

O paradigma

A ideia central é restringir o que o programador pode fazer para que o framework consiga paralelizar e tolerar falha sozinho.

  1. 1Map: recebe um registro por vez e emite zero, um ou vários pares chave-valor. Nenhum mapper enxerga o conjunto inteiro — é isso que permite rodar centenas em paralelo.
  2. 2Shuffle: o framework aplica uma função de partição à chave, transfere os pares pela rede, ordena e agrupa. Ao final, todos os valores de uma chave estão no mesmo reducer.
  3. 3Reduce: recebe uma chave e o iterador com todos os valores dela, e produz o resultado agregado.

Como map e reduce são funções determinísticas sobre entrada imutável, o framework pode reexecutar qualquer tarefa que falhe em outro nó, sem coordenação complicada. Foi essa propriedade que tornou o processamento em hardware comum viável.

Passo a passo: total transacionado por agência

Imagine o arquivo diário de transações do banco, dividido em três pedaços que vão para três mappers.

Entrada do mapper 1:

2026-03-01;0421;PIX;250.00
2026-03-01;0917;CARTAO;80.00
2026-03-01;0421;CARTAO;120.00

Saída do map — chave é a agência, valor é o montante:

(0421, 250.00)
(0917, 80.00)
(0421, 120.00)

Os outros dois mappers fazem o mesmo com seus pedaços, ao mesmo tempo, em outras máquinas.

Shuffle. O framework decide, pela função de partição, que a agência 0421 vai para o reducer A e a 0917 para o reducer B. Todos os pares de 0421 emitidos pelos três mappers atravessam a rede até o reducer A.

Entrada do reducer A:

(0421, [250.00, 120.00, 940.00, 310.00, ...])

Saída do reduce:

(0421, 41820.00)

Repare que o volume que trafega no shuffle é proporcional ao número de pares emitidos pelo map — não ao número de agências. É esse detalhe que o combiner ataca.

O combiner

O combiner é uma agregação parcial que roda no lado do map, sobre a saída daquele mapper, antes do shuffle.

No exemplo acima, em vez de o mapper 1 mandar (0421, 250.00) e (0421, 120.00) pela rede, o combiner soma localmente e manda (0421, 370.00). Com milhões de transações e algumas milhares de agências, isso derruba o tráfego em ordens de grandeza — e derruba junto o trabalho do reducer.

Onde está o gargalo

A resposta que a banca espera não é "CPU". É I/O.

MomentoO que aconteceCusto
Saída do mapOs pares são gravados no disco local do nó do mapperEscrita em disco proporcional ao volume emitido
ShuffleOs pares atravessam a rede até o reducer de destino, com ordenação e agrupamentoRede e disco — o ponto mais caro do job
Saída do reduceO resultado é gravado no HDFS, com replicaçãoEscrita multiplicada pelo fator de replicação
Próximo jobLê tudo de volta do HDFS para começarTodo o custo acima novamente, por etapa da cadeia

Duas consequências práticas:

Pipeline encadeado paga muitas vezes. Um cálculo de cinco etapas vira cinco jobs, e cada um materializa o resultado no HDFS com replicação para o seguinte ler. O tempo é dominado por escrever e reler dado que só existe para ser consumido pelo passo seguinte.

Chave enviesada trava o job. O job termina no ritmo da tarefa mais lenta. Se você agrupa por estabelecimento e um grande varejista concentra o volume, um reducer trabalha sozinho enquanto os outros já acabaram.

Por que Spark é mais rápido para o mesmo trabalho

Duas razões, e a banca quer as duas.

Execução em memória. O Spark mantém o dado intermediário em memória quando cabe, em vez de gravar em disco entre estágios. Em processamento iterativo, em que o mesmo conjunto é percorrido várias vezes, a diferença é grande.

DAG em vez de jobs encadeados. O Spark monta o grafo acíclico de todas as transformações antes de executar. Com o plano na mão, ele funde operações em um mesmo estágio e só materializa quando precisa — tipicamente na fronteira de shuffle. O MapReduce não tem essa visão: cada job é independente e sempre grava o resultado.

Como responder isso em voz alta

Descreva as três fases nomeando o que entra e o que sai de cada uma. Faça o exemplo bancário com números pequenos — total por agência funciona melhor que contar palavras, porque mostra domínio. Diga que o gargalo é I/O, separando escrita em disco de tráfego de rede. Acrescente combiner e chave enviesada como os dois pontos de ataque. Feche com Spark, citando memória e DAG, e admita que o shuffle não desaparece.

Se quiser outro ângulo

Segunda passada com outra didática, útil se o primeiro vídeo não fixou a separação entre as fases. Use para conferir se você consegue nomear o que entra e o que sai de cada etapa.

Como cai na sabatina

Explique um contador de palavras e diga onde está o gargalo.

Erros comuns

  • Esquecer o shuffle. Map e reduce são as duas fases que todo mundo cita; o shuffle entre elas é onde o trabalho pesado acontece e é o que a banca quer ouvir.
  • Dizer que o combiner sempre pode ser usado. Ele só é seguro quando a agregação é associativa e comutativa: soma e máximo sim, média direta não.
  • Confundir combiner com reducer. O combiner roda no lado do map, sobre a saída parcial daquele mapper, e é opcional — o framework pode chamá-lo zero, uma ou várias vezes.
  • Achar que a lentidão do MapReduce é da CPU. O custo dominante é I/O: gravar a saída do map em disco, transferir pela rede no shuffle e gravar o resultado de cada job antes do próximo começar.
  • Explicar que Spark é rápido só porque usa memória. A outra metade é o DAG: o Spark planeja a cadeia inteira e evita materializar resultado intermediário entre estágios.
  • Ignorar a chave enviesada. Se uma chave concentra a maior parte dos registros, um reducer trabalha sozinho enquanto os outros terminam, e o job fica refém dele.

Flashcards

Card 1 de 13

0 certos · 0 a rever

Drill

Map, shuffle ou reduce?

Para cada passo do processamento de um arquivo diário de transações, diga em que fase ele acontece.

  1. 1.Ler a linha da transação e emitir o par (agência 0421, 250.00).

  2. 2.Garantir que todos os pares da agência 0421 cheguem à mesma máquina.

  3. 3.Somar a lista de valores da agência 0421 e emitir o total do mês.

  4. 4.Ordenar os pares por chave antes de entregá-los ao reducer.

  5. 5.Descartar a linha de cabeçalho do arquivo sem emitir nada.

Drill

Este combiner é seguro?

Para cada agregação, diga se dá para usar combiner sem mudar o resultado.

  1. 1.Somar o valor transacionado por agência.

  2. 2.Contar quantas transações cada agência fez.

  3. 3.Calcular o ticket médio por agência emitindo médias parciais.

  4. 4.Encontrar o maior valor de transação por agência.

  5. 5.Contar clientes distintos por agência com um contador simples.

Quiz · 1 de 2

Qual é a razão principal de o Spark ser mais rápido que o MapReduce para o mesmo pipeline de várias etapas?

Explique para um gerente

Explique para alguém sem formação técnica como cinquenta pessoas contariam, em paralelo, quantas transações cada agência do banco fez em um mês.

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

  • · Explique como funciona um contador de palavras em MapReduce e diga onde está o gargalo.
  • · Um job que soma o valor transacionado por estabelecimento roda em vinte minutos, mas dezoito deles são gastos por uma única tarefa que fica para trás. O que está acontecendo e o que você faria?
Responder no simulado

Para ir além