Este é o primeiro de uma série de artigos aqui no Blog da DSA sobre um dos melhores frameworks para processamento de dados de forma distribuída, o Apache Spark e sua utilização na nuvem com Databricks. Essa série de artigos foi produzida por um dos alunos da DSA, Engenheiro de Dados, certificado em Spark e Databricks e matriculado em mais de 50 cursos em nosso portal. As informações de contato você encontra ao final do artigo.

Os artigos são de nível técnico e recomendamos alguma familiaridade com ambiente de processamento de Big Data antes de fazer a leitura. Temos uma introdução geral ao Apache Spark no curso gratuito Big Data Fundamentos e material completo no curso Big Data Real-Time Analytics com Python e Spark e Machine Learning e IA em Ambientes Distribuídos.

Boa leitura.

Arquitetura Básica do Spark

Um cluster, ou grupo de máquinas, agrupa os recursos de muitas máquinas, permitindo-nos usar todos os recursos como se fossem um. Mas, um grupo de máquinas isoladas em algum lugar não é poderoso por si só, você precisa de uma estrutura para coordenar o trabalho entre elas. O Spark é um framework feito sob medida exatamente para isso, gerenciando e coordenando a execução de tarefas de processamento de dados em um cluster de computadores.

O cluster de máquinas é gerenciado por um gerenciador de cluster como o gerenciador de cluster autônomo do Spark, YARN – Yet Another Resource Negotiator, ou o Mesos. Em seguida, enviamos as aplicações Spark para esses gerenciadores de cluster, que concederão recursos a nossa aplicação para que possamos concluir nosso trabalho.

spark1

O Que é Uma JVM?

O Spark precisa de de JVMs para seu funcionamento.

A JVM (Java Virtual Machine) gerencia a memória do sistema e fornece um ambiente de execução para aplicativos baseados em Linguagem Java. A JVM é um programa de software que executa o código e fornece o ambiente em tempo de execução para esse código.

A JVM é como executamos nossos programas Java. Definimos as configurações da JVM e, em seguida, contamos com ela para gerenciar os recursos do programa durante a execução. A Java Virtual Machine (JVM) é um programa cujo objetivo é executar outros programas.

spark2

A JVM tem duas funções principais:

1- Permitir que programas Java sejam executados em qualquer dispositivo ou sistema operacional (conhecido como o princípio: “Escreva uma vez, execute em qualquer lugar”).
2- Gerenciar e otimizar a memória do programa.

Visão JVM do Spark Cluster: Drivers, Executores, Slots e Tarefas

A arquitetura em tempo de execução do Spark depende das JVMs:

spark3

Aqui uma visão um pouco mais detalhada:

spark4

No gráfico acima, elementos de uma aplicação Spark estão em caixas azuis e as tarefas em execução nos slots de tarefas são marcadas com um “T”. Os slots de tarefas desocupados estão em caixas brancas.

Anatomia de Uma Aplicação Spark

O processo cliente inicia o programa driver.

Por exemplo, o processo do cliente pode ser um script spark-submit para a execução de aplicativos, um script spark-shell ou um aplicativo personalizado usando Spark API (como um Databricks GUI).

O processo do cliente prepara o classpath e todas as opções de configuração para o aplicativo Spark. Ele também passa os argumentos do aplicativo, se houver, em execução dentro do driver.

Apache Spark é um framework de computação unificado e um conjunto de bibliotecas para processamento paralelo de dados em clusters de computador. Esta definição tem 3 componentes que foram divididos abaixo:

  • Unificado: o Spark pode lidar com tarefas que vão desde o simples carregamento de dados até o aprendizado de máquina e processamento de dados de streaming.
  • Mecanismo de computação: o Spark não é um sistema de armazenamento como o HDFS do Hadoop, mas seus recursos são aproveitados para transformar grandes quantidades de dados em alta velocidade. O Spark se integra a muitos sistemas de armazenamento persistente, como Hadoop HDFS, Amazon S3, Azure Data Lake, etc.
  • Bibliotecas: o Spark inclui bibliotecas para SQL e dados estruturados, aprendizado de máquina, processamento de stream e análise de grafos.

O framework Spark tem 3 componentes:

  • Driver Process: Executa o programa main() e é responsável por manter as informações sobre o aplicativo Spark, respondendo à consulta do usuário e agendando e distribuindo tarefas aos executores.
  • Cluster Manager: o Spark executa o código em vários nodes. É necessário um processo que gerencie esses recursos (saúde/estado, etc.). O Spark emprega um gerenciador de cluster para controlar os recursos disponíveis.
  • Executors: são responsáveis ​​pelo armazenamento dos dados e execução do código nos dados distribuídos (residem nos nodes de execução, mais sobre isso a seguir)

 

💡 nodes = recurso de computação utilizado para executar consultas 💡

Driver, Executor e Cluster Manager

spark5

 

Cada aplicativo obtém seus próprios processos executores, que permanecem ativos durante todo o aplicativo e executam tarefas em várias threads. Isso tem a vantagem de isolar os aplicativos uns dos outros, tanto no lado do agendamento (cada driver agenda suas próprias tarefas) quanto no lado do executor (tarefas de diferentes aplicativos executados em diferentes JVMs). No entanto, também significa que os dados não podem ser compartilhados entre diferentes aplicativos Spark (instâncias de SparkContext) sem gravá-los em um sistema de armazenamento externo.

O Spark é independente do gerenciador de cluster. Contanto que ele possa adquirir processos do executor e estes se comunicarem entre si, é relativamente fácil executá-lo, mesmo em um gerenciador de cluster que também oferece suporte a outros aplicativos (por exemplo, Mesos|YARN|Kubernetes).

Como o driver agenda tarefas no cluster, ele deve ser executado próximo aos nodes de trabalho, de preferência na mesma rede local. Se você deseja enviar solicitações ao cluster remotamente, é melhor abrir um RPC  (Remote Procedure Call) para o driver e fazer com que ele envie operações nas proximidades do que executar um driver longe dos worker nodes.

Continuaremos no próximo artigo da série.

Artigo Produzido por: Thomaz Antonio Rossito Neto

Databricks Engineer with Apache Spark™ 3.0
MBA em Ciência de Dados com Big Data
MCSE: Data Management and Analytics Microsoft
MCSA: Data Engineering with Azure Microsoft

Contatos:
Site Pessoal: www.thomazrossito.com.br

Referências:

Apache Spark Cluster Overview

Apache Spark Application Overview

JVM Overview