Apache Spark
Conceito
Ferramenta de código aberto para processar grande volume de dados. Diferentemente do Hadoop MapReduce, o Spark mantém os dados na memória RAM. Essa característica o torna mais rápido para certas tarefas.
Componentes principais
- Spark SQL: Permite trabalhar com dados estruturados utilizando o SQL
- Spark streaming: Processa dados em tempo real
- MLlib: Permite a criação de modelos de machine learning
- GraphX: Usado para processar gráficos e redes
Funcionamento
Utiliza uma estrutura de cluster, dividindo o trabalho em nós distintos:
- Driver program: Coordena todo o processo
- Cluster manager: Decide como os recursos serão distribuídos
- Workers: Processam os dados
Resiliência
A base do Spark é o Resilient Distributed Dataset (RDD). De modo simples, os arquivos são divididos em inúmeras porções e distribuídos entre os nós. Isso permite que o Spark reconstrua os dados sem interromper o trabalho.
Computação distribuída
Divide o arquivo em diversas partições
As participações são distribuídas em diferentes nós
O código é levado até onde está o dado e não o contrário
Computação paralela
- Multi-threading: Cada woker roda o processo chamado executor com diversas taks em paralelo
- Escalabilidade horizontal: Mais máquinas para distribuição das tarefas
Coordenação
Directed Acyclic Graph (DAG):
- Planejamento inteligente: Mapeia todas as etapas (map, filter, Join)
- Lazy evaluation: Não executa tarefas que não foram solicitadas
- Pipelines: Encadeamento de operações otimizando o paralelismo
Desafio
Shuffle (troca de dados), ocorre quando o Spark precisa organizar dados entre os nós para fazer um group by ou um Join. Isso exige mover dados pela rede e gravar no disco temporariamente, o que se opõe ao fluxo do paralelismo.