5 técnicas de otimização do Spark que todo cientista de dados deve conhecer
Publicados: 2020-06-12Seja uma pequena startup ou uma grande corporação, os dados estão em toda parte. Esses dados são coletados de várias fontes, como logs de clientes, contas de escritório, planilhas de custos e bancos de dados de funcionários. As empresas coletam e analisam esses blocos de dados para determinar padrões e tendências. Esses padrões os auxiliam na tomada de decisões importantes para o aprimoramento do negócio.
Mas, essa análise de dados e processamento de números não são possíveis apenas por meio de planilhas do Excel. É aqui que entram as tecnologias de software de processamento de dados. Uma das estruturas de processamento de dados mais rápidas e amplamente utilizadas é o Apache Spark. As técnicas de otimização do Spark são usadas para ajustar seu desempenho para tirar o máximo proveito dele.
Vamos aprender um pouco sobre as técnicas. Vamos entender o básico desta estrutura de software.
Índice
O que é Apache Spark?
Apache Spark é uma estrutura de computação em cluster de código aberto mundialmente famosa que é usada para processar grandes conjuntos de dados em empresas. Processar esses enormes conjuntos de dados e distribuí-los entre vários sistemas é fácil com o Apache Spark. Oferece APIs simples que facilitam a vida de programadores e desenvolvedores.
O Spark fornece associações nativas para linguagens de programação, como Python, R, Scala e Java. Ele suporta aprendizado de máquina, processamento de gráficos e bancos de dados SQL . Devido a esses benefícios incríveis, o Spark é usado em bancos, empresas de tecnologia, organizações financeiras, departamentos de telecomunicações e agências governamentais. Para saber mais sobre o Apache Spark, confira nossos cursos de ciência de dados de universidades reconhecidas.
Arquitetura do Apache Spark
A arquitetura de tempo de execução do Apache Spark consiste nos seguintes componentes:
Driver Spark ou processo mestre
Isso converte programas em tarefas e, em seguida, os agenda para executores (processos escravos). O agendador de tarefas distribui essas tarefas aos executores.
Gerenciador de clusters
O gerenciador de cluster Spark é responsável por iniciar executores e drivers. Ele agenda e aloca recursos em várias máquinas host para um cluster.
Executores
Executores, também chamados de processos escravos, são entidades onde as tarefas de um trabalho são executadas. Depois de iniciados, eles são executados até o fim do ciclo de vida do aplicativo Spark. A execução de um trabalho do Spark não é interrompida se um executor falhar.
Conjuntos de dados distribuídos resilientes (RDD)
Esta é uma coleção de conjuntos de dados imutáveis e distribuídos pelos nós de um cluster Spark. Notavelmente, um cluster é uma coleção de sistemas distribuídos onde o Spark pode ser instalado. Os RDDs são divididos em várias partições. E eles são chamados de resilientes, pois podem corrigir os problemas de dados em caso de falha de dados.
Os tipos de RDDs suportados pelo Spark são:
- Conjuntos de dados do Hadoop criados a partir de arquivos no Hadoop Distributed File System
- Coleções paralelas, que podem ser baseadas em coleções Scala
DAG (Gráfico Acíclico Dirigido)
O Spark cria um gráfico assim que um código é inserido no console do Spark. Caso alguma ação (uma instrução para execução de uma operação) seja acionada, este gráfico é submetido ao DAGScheduler .
Este gráfico pode ser considerado como uma sequência de ações de dados. O DAG consiste em vértices e arestas. Os vértices representam um RDD e as arestas representam os cálculos a serem realizados nesse RDD específico. É chamado de grafo direcionado, pois não há loops ou ciclos dentro do grafo.
Técnicas de otimização do Spark
As técnicas de otimização do Spark são usadas para modificar as configurações e propriedades do Spark para garantir que os recursos sejam utilizados corretamente e os trabalhos sejam executados rapidamente. Tudo isso ajuda no processamento de dados de forma eficiente.
As técnicas de otimização do Spark mais populares estão listadas abaixo:
1. Serialização de dados
Aqui, um objeto na memória é convertido em outro formato que pode ser armazenado em um arquivo ou enviado por uma rede. Isso melhora o desempenho de aplicativos distribuídos. As duas maneiras de serializar dados são:
- Java serialização – A estrutura ObjectOutputStream é usada para serializar objetos. O java.io.Externalizable pode ser usado para controlar o desempenho da serialização. Este processo oferece persistência leve.
- Serialização Kyro – O Spark usa a biblioteca Kryo Serialization (v4) para serializar objetos que são mais rápidos que a serialização Java e é um processo mais compacto. Para melhorar o desempenho, as classes devem ser registradas usando o método registerKryoClasses.
2. Cache
Essa é uma técnica eficiente que é usada quando os dados são necessários com mais frequência. Cache() e persist() são os métodos usados nesta técnica. Esses métodos são usados para armazenar os cálculos de um RDD, DataSet e DataFrame. Mas cache() o armazena na memória e persist() o armazena no nível de armazenamento definido pelo usuário.

Esses métodos podem ajudar a reduzir custos e economizar tempo à medida que cálculos repetidos são usados.
Leia: Dataframe no Apache PySpark: Tutorial abrangente
3. Ajuste da estrutura de dados
Podemos reduzir o consumo de memória ao usar o Spark, ajustando certos recursos Java que podem adicionar sobrecarga. Isso é possível das seguintes maneiras:
- Use objetos enumerados ou IDs numéricos no lugar de strings para chaves.
- Evite usar muitos objetos e estruturas aninhadas complicadas.
- Configure o sinalizador JVM para xx:+UseCompressedOops se o tamanho da memória for menor que 32 GB.
4. Otimização da coleta de lixo
Para otimizar coletores de lixo, G1 e GC devem ser usados para executar aplicativos Spark. O coletor G1 gerencia pilhas crescentes. O ajuste do GC é essencial de acordo com os logs gerados, para controlar o comportamento inesperado das aplicações. Mas antes disso, você precisa modificar e otimizar a lógica e o código do programa.
O G1GC ajuda a diminuir o tempo de execução dos jobs otimizando os tempos de pausa entre os processos.
5. Gerenciamento de Memória
A memória usada para armazenar cálculos, como junções, embaralhamentos, classificação e agregações, é chamada de memória de execução. A memória de armazenamento é usada para armazenar em cache e manipular dados armazenados em clusters. Ambas as memórias usam uma região unificada M.
Quando a memória de execução não está em uso, a memória de armazenamento pode usar o espaço. Da mesma forma, quando a memória de armazenamento está ociosa, a memória de execução pode utilizar o espaço. Esta é uma das técnicas de otimização Spark mais eficientes .
Leia também: 6 recursos que mudam o jogo do Apache Spark
Conclusão
A partir das diversas técnicas de otimização do Spark , podemos entender como elas ajudam na redução do tempo de processamento e no processamento de dados mais rápido. Desenvolvedores e profissionais aplicam essas técnicas de acordo com as aplicações e a quantidade de dados em questão.
Se você está curioso para aprender sobre otimização de faíscas , ciência de dados, confira o Programa PG Executivo em Ciência de Dados do IIIT-B & upGrad, criado para profissionais que trabalham e oferece mais de 10 estudos de caso e projetos, workshops práticos práticos, orientação com a indústria especialistas, 1-on-1 com mentores do setor, mais de 400 horas de aprendizado e assistência de trabalho com as principais empresas.
O que são técnicas de otimização do Spark?
O Apache Spark facilita para as empresas processar dados rapidamente e resolver problemas complexos de dados com facilidade. É óbvio que durante o desenvolvimento de qualquer programa, é muito importante cuidar de seu desempenho. As técnicas de otimização do Spark ajudam nos cálculos de dados na memória. A única coisa que pode atrapalhar esses cálculos é a memória, CPU ou qualquer outro recurso.
Cada técnica de otimização de faísca é usada para uma finalidade diferente e executa determinadas ações específicas. Algumas das técnicas de otimização de faísca amplamente utilizadas são:
1. Serialização
2. Seleção de API
3. Variável avançada
4. Armazenar em cache e persistir
5. Operação ByKey
6. Seleção de formato de arquivo
7. Ajuste da coleta de lixo
8. Nível de paralelismo
Quando você não deve considerar o uso do Spark?
O Apache Spark tem muitos casos de uso, mas há certas necessidades especializadas em que você precisa de outros mecanismos de big data para cumprir a finalidade. Nesses casos, é recomendável usar outra tecnologia em vez de usar o Spark. Abaixo estão os casos de uso em que você não deve considerar o uso do Spark:
1. Baixa capacidade de computação – O processamento padrão no Apache Spark ocorre na memória do cluster. Se suas máquinas virtuais ou cluster têm pouca capacidade de computação, você deve optar por outras alternativas, como o Apache Hadoop.
2. Ingestão de dados em um modelo de publicação-assinatura – Nesse caso, existem várias origens e vários destinos onde milhões de dados estão sendo movidos em um curto espaço de tempo. Aqui, você não deve usar o Spark e, em vez disso, usar o Apache Kafka.
O Pandas é mais rápido que o Apache Spark?
Ao comparar a velocidade computacional do Pandas DataFrame e do Spark DataFrame, você notará que o desempenho do Pandas DataFrame é marginalmente melhor para pequenos conjuntos de dados. Por outro lado, se o tamanho dos dados aumenta, verifica-se que o Spark DataFrame é capaz o suficiente para superar o Pandas DataFrame. Assim, vai depender muito da quantidade de dados.