Apache Spark
Visão Geral
O Apache Spark é um motor que permite o processamento de volumes massivos de dados. Essa capacidade é alcançada através do uso de clusters computacionais, dividindo o processamento em diversos nós de trabalho. Sua principal característica é o processamento em memória, que o torna mais rápido que o Hadoop MapReduce.
Componentes principais (hardware)
- Driver Program: Coordena o fluxo de trabalho e distribui tarefas para os executores
- Cluster Manager: Alocador de recurso, decidindo qual máquina pode executar a tarefa
- Worker Nodes: São as máquinas que contém um ou mais Executors.
- Executors: Processos que executam as tarefas enviadas pelo Driver
Componentes principais (software)
- Spark Core: Gerencia memória, a recuperação de falhas e o sistema de arquivos
- Spark SQL: Permite o uso de comandos SQL em DataFrames
- Spark Streaming: Processa dados em tempo real
- MLlib: Biblioteca de algoritmos de Machine Learning
- GraphX: Focado em processamento de grafos
Operações comuns
- Transformações: São operações que criam um novo DataFrame a partir de um já existente, do tipo lazy.
- Ações: A partir das transformações, executa operações que de fato executam cálculos.
Resiliência
- RDD (Resilient Distributed Dataset): Fundamenta-se na ideia do dado físico dividido em pequenas partes e distribuído pelo cluster.
- DAG (Directed Acyclic Graph): Plano lógico que indica qual a forma mais rápida de executar as ações.
- Lineage: Registro contido dentro do DAG que diz exatamente de onde cada dado veio.
Dataframes
- Imutabilidade: Ao aplicar um filtro ou criar uma nova coluna, o Spark não modifica o objeto original, é criado um novo DataFrame que representa o resultado dessa operação.
- Particionamento: Os dados são divididos em pequenos pedaços, chamados partições e espalhados pelo cluster.
- Shuffling: Ocorre quando o Spark precisa mover dados entre diferentes máquinas do cluster para completar uma operação.
- Schema: O DataFrame do Spark exige um Schema (nome das colunas e tipos de dados: String, Integer, Timestamp, etc.).
- Caching: Capacidade de armazenamento de resultados intermediários no caso de DataFrames usados diversas vezes.
Conceitos diversos
- Broadcast Variables: As Broadcast Variables são variáveis somente leitura que ficam armazenadas em cache em cada máquina (nó), em vez de serem enviadas junto com cada tarefa individual.
- Accumulators: Os Accumulators são para “escrita” (especificamente, para agregação). Eles são variáveis que só podem ser “somadas” ou incrementadas.
Streaming x Batch
- Em Lote (Batch): O Spark vê os dados como uma tabela fixa e com fim. Ele lê tudo, processa e encerra o trabalho.
- Em Streaming: O Spark trata o fluxo como uma “Tabela Não Delimitada” (Unbounded Table). Novos dados que chegam são simplesmente novas linhas sendo anexadas ao final dessa tabela infinita.