Destrinchando o Apache Spark — Parte 1

Neste artigo iremos nos aprofundar nas características do Apache Spark, caso você ainda não esteja familiarizado com esta ferramenta, recomendamos primeiro a leitura do artigo Spark o melhor amigo do engenheiro de dados.

Características do Apache Spark

É uma plataforma de computação em cluster de código aberto para processamento de dados, tendo como principal recurso sua computação em cluster na memória capaz de aumentar a velocidade de processamento de uma carga de trabalho. O Spark fornece uma interface para programar clusters com paralelismo de dados e tolerância a falhas. Foi projetado para cobrir uma ampla variedade de cargas de trabalho, como cargas em lote, algoritmos iterativos, consultas interativas e streaming.

Imagem contendo pontos chaves do Spark, velocidade, tempo real, memoria, reutilização, tolerância a falha, múltiplas linguagens e custo benefício.

Velocidade

O Spark consegue processar grandes quantidades de dados a uma taxa de até 100 vezes mais rápido do que a Hadoop MapReduce, reduzindo o número de operações de leitura e gravação em disco e mantendo dados intermediários na memória. Também é capaz de atingir essa velocidade por meio de particionamento controlado. A ferramenta atinge alto desempenho para dados em lote e em tempo real utilizando um programador de DAG de última geração, um otimizador de consultas e um mecanismo de execução físico.

Tempo real
A Ferramenta oferece criação de soluções de streaming escalonáveis, tolerantes a falhas e com baixa latência. Além disso, traz uma API integrada à linguagem Spark para o processamento de stream, para que você possa escrever jobs de streaming da mesma forma que os jobs em lote.

Múltiplas Linguagens
O Spark fornece APIs de alto nível em Scala, Python, Java e R., fornecendo também um shell em Scala e Python.

Computação na memória

Com o processamento na memória os dados estão sendo armazenados em cache, portanto, não precisamos buscar dados do disco todas as vezes, resultando consequentemente em economia de tempo.

Reutilização

O código Spark pode ser usado para processamento em lote, unindo dados de streaming a dados históricos, bem como executando consultas ad hoc no estado de streaming.

Custo-benefício

O Apache Spark é um software de código aberto, sendo assim, não possui nenhuma taxa de licenciamento associada a ele. Ele é apoiado por comunidades globais unidas pela introdução de novos conceitos e recursos de forma rápida e eficaz. O poder de uma comunidade de código aberto oferece mais ideias, desenvolvimento mais rápido e uma eficiente solução de problemas.

Componentes do ecosistema

Imagem mostrando o ecossistema do Apache Spark

Spark Core

Se trata de um motor de processamento de dados completo, com capacidade para hospedar os conceitos essenciais da programação do Spark, como o Resilient Distributed Dataset (RDD). Também é responsável pelo controle da memória, recuperação de desastres, mapeamento de tarefas em um cluster, monitoramento das mesmas e conexão com sistemas de armazenamento.

Spark SQL

Módulo para processamento de dados estruturados no Spark que integra o processamento relacional com a API de programação funcional do Spark. Suporta a consulta de dados via SQL ou por meio do Hive Query Language. O Spark SQL vem com uma abstração de programação conhecida como DataFrames. Esta, por sua vez, permite que os desenvolvedores combinem consultas SQL com dados programáticos manipulados suportados por RDDs em diferentes idiomas. Essa integração de SQL com meio de computação avançado combina SQL com análises complexas. Suporta operações ETL em dados em vários formatos, incluindo JSON, Parquet, etc, e consultas ad-hoc.

Spark Streaming
Este componente é uma adição útil à API principal do Spark. É utilizado para processar dados de streaming em tempo real. Permite o processamento de fluxo de dados tolerante a falhas ao vivo. Uso otimizado de recursos, recuperação rápida e melhor balanceamento de carga são alguns de seus principais recursos.

O Spark Streaming recebe fluxos de dados de entrada em tempo real e divide os dados em lotes, sendo então processados pelo Spark Engine para gerar o fluxo final de resultados em lotes.

Fluxo de funcionamento do Spark Stream, Entrada de dados, divisão em lotes, processamento spark engine, resultado em lote
https://spark.apache.org/docs/latest/streaming-programming-guide.html

MLlib
Biblioteca embutida do Spark que contém funcionalidades de Machine Learning. Fornece diversos algoritmos de ML, como agrupamento, classificação, regressão, filtragem colaborativa e funcionalidade de suporte. Fornece ferramentas como caracterização, pipelines, persistência e utilitários para lidar com operações de álgebra linear, estatísticas e manipulação de dados. O Spark MLlib é 9 vezes mais rápido que a versão baseada em disco Hadoop do Apache Mahout.

GraphX
O pacote GraphX do Spark unifica a funcionalidade ETL de dados em estrutura gráfica e também fornece análise exploratória. Em alto nível, o GraphX estende o Spark RDD introduzindo uma nova abstração Graph: um multigrafo direcionado com propriedades anexadas a cada vértice e aresta. O GraphX torna o processamento de dados mais fácil com uma biblioteca extremamente rica de algoritmos como PageRank, Algoritmo de Componente Conectado, Contagem de Triângulos, SVD++ e Propagação de Rótulos.

Conclusão

Esta foi a primeira parte da série sobre como funciona o Apache Spark. É importante ressaltar que sim, até o momento não foi trazido nenhum código real, porém, antes de chegarmos neste nível, é preciso discutir certos conceitos primeiro. A segunda parte desta série se concentrará na arquitetura do Apache Spark.

Espero que este artigo tenha lhe ajudado a entender um pouco melhor o funcionamento do Apache Spark. Aguardo seu feedback!

Referências

Apache Sparks Docs

O que é Apache Spark? | Google Cloud

Edureka — Apache Spark Architecture

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *