Criar aplicativo de análise de log usando o Apache Spark

Raman Ahuja Blocked Desbloquear Seguir Seguindo 30 de dezembro

Passo a passo do processo de desenvolvimento de uma aplicação do mundo real usando o Apache Spark, juntamente com o foco principal em explicar a arquitetura do Spark.

Fonte da imagem: techgyo.com

Por que o Apache Spark Architecture, se tivermos o Hadoop?

O Hadoop Distributed File System (HDFS), que armazena arquivos em um formato nativo do Hadoop e os paraleliza em um cluster e aplica o MapReduce ao algoritmo que processa os dados em paralelo. O problema aqui é que os Data Nodes são armazenados em disco e o processamento deve acontecer na memória. Assim, precisamos fazer muitas operações de E / S para processar e também as operações de transferência de rede acontecem para transferir dados pelos nós de dados. Essas operações podem ser um obstáculo para o processamento mais rápido de dados.

Hadoop Map Reduce Algorithm (Left Image Fonte: researchgate.net)

Acima Image descreve, blocos são armazenados em notas de dados que residem no disco e para a operação de Mapa ou outro processamento tem que acontecer na RAM. Isso requer uma operação de E / S que causa um atraso no resultado geral.

Apache Spark : O site oficial descreve-o como: “O Apache Spark é um sistema de computação em cluster rápido e de uso geral ”.

Rápido : A faísca do Apache é rápida porque os cálculos são realizados na memória e armazenados lá. Portanto, não há imagem das operações de E / S, como discutido na arquitetura do Hadoop.

Finalidade Geral: É um mecanismo otimizado que suporta gráficos gerais de execução. Ele também suporta processamento de dados SQL e estruturado, MLlib para aprendizado de máquina, GraphX para processamento de gráficos e Spark Streaming para processamento de dados ao vivo.

Arquitetura Spark. Por exemplo: Detectar números primos

O ponto de entrada para Spark é o Contexto Spark, que manipula os nós do executor. A principal estrutura de dados de abstração do Spark é o Conjunto de Dados Distribuídos Resiliente (RDD), que representa uma coleção imutável de elementos que podem ser operados em paralelo.

Vamos discutir o exemplo acima para entender melhor: Um arquivo consiste em números, a tarefa é encontrar os números primos desta enorme quantidade de números. Se os dividirmos em três blocos B1, B2, B3. Esses blocos são imutáveis são armazenados em memória por faísca. Aqui o fator de replicação = 2, assim podemos ver que uma cópia de outro nó é armazenada em outras partições correspondentes. Isso faz com que tenha uma arquitetura tolerante a falhas.

Etapa 1: criar o RDD usando o contexto do Spark

Etapa 2: Transformação : Quando uma operação map () é aplicada nesses RDD, novos blocos, como B4, B5, B6, são criados como novos RDD, que são imutáveis novamente. Isso todas as operações acontecem na memória. Nota: B1, B2, B3 ainda existem como originais.

Etapa 3: Ação : Quando collect (), isso quando os resultados reais são coletados e retornados.

AVALIAÇÃO LAZY : O Spark não avalia cada transformação imediatamente, mas sim as agrupa e avalia todas de uma só vez. Em seu núcleo, ele otimiza a execução da consulta planejando a sequência de cálculos e ignorando etapas potencialmente desnecessárias . Principais vantagens : Aumenta a capacidade de gerenciamento , economiza a computação e aumenta a velocidade, reduz as complexidades e otimiza.

Como funciona ? Quando executamos o código para criar o contexto do Spark, criamos o RDD usando sc e executamos a transformação usando o mapa para criar um novo RDD. Na verdade, essas operações não são executadas no backend, em vez disso, é criada uma linhagem Directed Acyclic Graph (DAG) . Somente quando a ação é executada, ou seja, para buscar resultados, exemplo: collect () operação é chamada, em seguida, refere-se ao DAG e sobe para obter os resultados, consulte a figura, como subir vê que o filtro RDD ainda não foi criado, sobe para obter resultados superiores e, finalmente, reverter os cálculos para obter os resultados exatos.

RDD – Resiliente: ou seja, tolerante a falhas com a ajuda do gráfico de linhagem RDD. Os RDD's são uma função determinística da sua entrada. Isso mais a imutabilidade também significa que as partes do RDD podem ser recriadas a qualquer momento. Isso facilita o armazenamento em cache, o compartilhamento e a replicação.

Distribuído : os dados residem em vários nós.

Conjuntos de dados: representa os registros dos dados com os quais você trabalha. O usuário pode carregar o conjunto de dados externamente, que pode ser um arquivo JSON, um arquivo CSV, um arquivo de texto ou um banco de dados via JDBC, sem estrutura de dados específica.