Engenharia de DadosLeitura 3 min

Spark Vira Fogão a Lenha: Como Saímos de 15-20k/Mês Para Uma Fração Disso

Jonas HamerskiData Engineer | RPA/Web Scraping | Backend Python29 de dezembro de 20253 min

Um problema comum: 15-20k/mês em infra de dados.

A stack: Cluster Spark (EMR) + Airflow para orquestração.

Parecia "enterprise". Funcionava. Mas o custo não fazia sentido para o volume processado.

Com redesign de arquitetura, é possível alcançar redução de 97% em infra.

Aqui está como.

O Problema: EMR + Airflow Para Dados Que Cabem em Memória

A stack típica:

  • Spark (EMR): rodando jobs de append/dedup
  • Airflow: orquestração (MWAA)

A questão óbvia: por que um cluster Spark + Airflow gerenciado rodando jobs que cabem em uma máquina?

Resposta: falta de questionamento técnico.

Por Que Tudo Custava 15k/Mês

Spark não cobra por execução. Cobra por existência.

O breakdown:

EMR cluster (mesmo pequeno): ~8-10k/mês

  • Master node sempre rodando
  • Workers ociosos entre jobs
  • Startup overhead
  • Bootstrap lento

Airflow managed: ~3-4k/mês

  • MWAA (AWS managed)
  • Scheduler sempre ligado
  • Workers sempre prontos

Data transfer: ~1-2k/mês

O cluster Spark rodava jobs de dedup/append uma vez por dia, ~15 minutos. Os outros 23:45 horas: custo.

Airflow esperava jobs. EMR esperava Airflow. Tudo esperando, tudo custando.

A Solução: Python Puro + Self-Host + Snowflake (Sem Spark)

Redesenhamos os pipelines para serem incrementais de verdade:

  • Append-only (sem reprocessamento)
  • Deduplicação com janela de 3 dias
  • Sem shuffle
  • Python puro (Pandas + Polars)

Stack nova:

  • EC2 t3.medium (~30/mês): roda job Python via cron
  • Prefect self-host: orquestração leve
  • S3: storage dos dados
  • Python: para o processamento

Resultado:

Job que demorava 40 min com Spark agora demora 3-5 min
Sem overhead de cluster
Sem JVM
Sem Airflow gerenciado

EC2 liga → roda Python → escreve em S3 → desliga. Fim.

Custo: mínimo. Velocidade: máxima.

Resultado: 97% de Redução em Infra

Antes: 15k/mês

Depois: Uma fração disso.

Não vou colocar o número exato aqui porque soa até irreal. Mas basta dizer que o que a gente pagava em 1 mês de cluster, agora cobre vários meses de self-host.

E melhor ainda: os pipelines ficaram mais rápidos e previsíveis.

A gente saiu de:

Cluster Spark esperando job
Managed Airflow com overhead de SaaS

Para:

Máquinas self-host com custo fixo
Prefect rodando local (orquestração)
Airbyte self-host (ingestão)
Processamento em Python

O kicker: agora a gente consegue escalar sem aumentar o custo proporcionalmente. Antes, mais dados = mais workers = mais caro. Agora é adicionar storage.

Por Que Isso Importa

Se você tem Spark rodando ETL simples, dedup ou append-only, você está pagando 10-15x mais do que precisa.

É assim mesmo.

A Moral

Você não precisa de um cluster para ser engineer.

Precisa de bom senso.

A gente tinha infra cara rodando 2% do potencial. Parecia impressionante. A fatura discordava.

Consertamos em 2 semanas. Sem reescrever tudo. Sem perder dados. Sem downtime.

Próximo Passo

Transformamos clusters caros para arquiteturas limpas e previsíveis. O processo quase sempre é o mesmo:

1. Audit: entender o que está rodando (e por quanto)

2. Diagnóstico: identificar o overkill

3. Redesign: arquitetura eficiente

4. Implementação: migração controlada


"Se o seu pipeline cabe em memória, talvez ele não precise de um cluster inteiro tentando parecer importante."
Assuntos
SparkOtimização de CustosAWSPythonArquitetura
Tem um caso parecido?

A gente coleta o dado na fonte e entrega dentro do seu sistema

Fale direto com quem constrói o robô. A conversa começa pela fonte, pelo volume e pelo destino do dado, não por proposta.