Apache Spark é um motor de processamento distribuído de código aberto que executa computações em memória sobre clusters de máquinas. É o padrão de facto para processamento em larga escala, cobrindo batch, streaming, SQL, machine learning e grafos em uma única plataforma unificada.
Histórico
timeline title Evolução do processamento distribuído 2002 : Google publica o paper do MapReduce 2003 : Google publica o paper do GFS (Google File System) 2006 : Yahoo cria o Hadoop (inspirado nos papers do Google) 2009 : Matei Zaharia cria o Spark no AMPLab da UC Berkeley 2010 : Spark é publicado como open-source 2013 : Doado para a Apache Software Foundation 2014 : Spark 1.0 - primeiro release estável como projeto Apache top-level 2015 : DataFrame API, DataFrames unificam SQL e código 2016 : Spark 2.0 - Dataset API, Structured Streaming, Tungsten engine 2020 : Spark 3.0 - Adaptive Query Execution (AQE), pandas UDFs v2 2022 : Spark 3.3 - Spark Connect (cliente remoto desacoplado do cluster) 2024 : Spark 4.0 - Python-first, ANSI SQL por padrão, Spark Connect estável
A motivação original do Spark foi superar as limitações do MapReduce: o modelo de dois passos (map e reduce) forçava a escrita em disco entre cada etapa, tornando algoritmos iterativos (como gradiente descendente em ML) extremamente lentos. O Spark introduziu o conceito de RDD (Resilient Distributed Dataset) e computação em memória, entregando até 100x mais velocidade em workloads iterativos.
Por que Spark supera o MapReduce
| Aspecto | MapReduce | Spark |
|---|---|---|
| Armazenamento intermediário | Disco (HDFS) entre cada etapa | Memória (RAM) |
| Modelo de execução | Dois passos fixos (map, reduce) | DAG arbitrário de operações |
| APIs | Java verboso | Python, Scala, Java, SQL, R |
| Suporte a streaming | Não nativo | Structured Streaming nativo |
| ML / grafos | Necessita frameworks externos | MLlib e GraphX integrados |
| Velocidade em ML iterativo | Lento (muitas escritas em disco) | Muito mais rápido (dados em memória) |
Componentes do ecossistema Spark
graph TD CORE[Spark Core<br/>RDD Engine, Scheduling, Memory] CORE --> SQL[Spark SQL<br/>DataFrame, Catalyst, Thrift Server] CORE --> SS[Structured Streaming<br/>Micro-batch e Continuous] CORE --> ML[MLlib<br/>Pipelines, Algoritmos de ML] CORE --> GX[GraphX<br/>Processamento de Grafos]
Na prática, Spark SQL com DataFrames é o componente mais utilizado, unificando batch e streaming sob a mesma API.
Modos de execução
| Modo | Descrição | Onde é usado |
|---|---|---|
| Local | Executa em uma única JVM, sem cluster | Desenvolvimento e testes |
| Standalone | Cluster gerenciado pelo próprio Spark | Ambientes simples sem YARN |
| YARN | Cluster gerenciado pelo Hadoop YARN | Ambientes Hadoop legados |
| Kubernetes | Pods como executores | Ambientes cloud nativos modernos |
| Managed | Databricks, Dataproc, EMR, Glue | Cloud gerenciado |
Quando usar Spark
Spark é a escolha certa quando:
- O volume de dados não cabe em memória de uma única máquina (tipicamente acima de alguns GBs)
- O processamento é iterativo ou reutiliza os mesmos dados múltiplas vezes (ML, grafos)
- Há necessidade de unificar batch e streaming na mesma base de código
- O time já domina PySpark e precisa migrar workloads Hadoop existentes
Alternativas mais simples para datasets menores: DuckDB (SQL local, até dezenas de GBs) ou Polars (Python multi-core, sem cluster).
Instalação local (PySpark)
# Via pip
pip install pyspark
# Verificar instalação
python -c "import pyspark; print(pyspark.__version__)"from pyspark.sql import SparkSession
# Criar sessão local (usa todos os cores disponíveis)
spark = SparkSession.builder \
.appName("meu-app") \
.master("local[*]") \
.getOrCreate()
# Ler, transformar e escrever
df = spark.read.parquet("/dados/entrada/")
df.filter("status = 'ativo'").write.parquet("/dados/saida/")
spark.stop()Deep dive
- spark-arquitetura: Driver, Executor, Cluster Manager, Job/Stage/Task, Shuffle, modelo de memória
- spark-apis: RDD vs DataFrame vs Dataset, transformações, ações, schema
- spark-sql: Catalyst optimizer, planos de execução, UDFs, catálogo e metastore
- spark-streaming: Structured Streaming, triggers, watermarks, operações com estado
- spark-performance: particionamento, AQE, broadcast join, caching, skew, bucketing
- spark-troubleshooting: OOM, skew, GC, Spark UI, configurações críticas
Ver também: big-data | gcp-dataproc | gcp-dataflow | ferramentas-engenharia-dados | data-lake-lakehouse | pipeline-de-dados