Spark vs Hadoop: qual é a melhor estrutura de Big Data?



Esta postagem do blog fala sobre apache spark vs hadoop. Isso lhe dará uma ideia sobre qual é a estrutura de Big Data certa para escolher em diferentes cenários.

Iniciarei este blog Apache Spark vs Hadoop apresentando primeiro o Hadoop e o Spark para definir o contexto certo para ambas as estruturas. Em seguida, indo em frente, compararemos as duas estruturas de Big Data em diferentes parâmetros para analisar seus pontos fortes e fracos.Mas, qualquer que seja o resultado de nossa comparação, você deve saber que tanto Spark quanto Hadoop são componentes cruciais do .

Apache Spark vs Hadoop: Introdução ao Hadoop

Hadoop é uma estrutura que permite primeiro armazenar Big Data em um ambiente distribuído para que possa processá-lo paralelamente. Existem basicamente dois componentes no Hadoop:





HDFS

O HDFS cria uma abstração de recursos, deixe-me simplificar para você. Semelhante à virtualização, você pode ver o HDFS logicamente como uma única unidade para armazenar Big Data, mas na verdade você está armazenando seus dados em vários nós de uma forma distribuída. Aqui, você tem uma arquitetura mestre-escravo. No HDFS, Namenode é um nó mestre e Datanodes são escravos.

NameNode

É o daemon mestre que mantém e gerencia os DataNodes (nós escravos). Ele registra os metadados de todos os arquivos armazenados no cluster, por exemplo, localização dos blocos armazenados, o tamanho dos arquivos, permissões, hierarquia, etc. Ele registra toda e qualquer mudança que ocorre nos metadados do sistema de arquivos.



Por exemplo, se um arquivo for excluído do HDFS, o NameNode o gravará imediatamente no EditLog. Ele recebe regularmente um Heartbeat e um relatório de bloco de todos os DataNodes no cluster para garantir que os DataNodes estejam ativos. Ele mantém um registro de todos os blocos no HDFS e em quais nós esses blocos estão armazenados.

DataNode

Esses são daemons escravos que rodam em cada máquina escrava. Os dados reais são armazenados em DataNodes. Eles são responsáveis ​​por atender às solicitações de leitura e gravação dos clientes. Eles também são responsáveis ​​por criar blocos, deletar blocos e replicar os mesmos com base nas decisões tomadas pelo NameNode.

HDFS - Apache Spark vs Hadoop - EdurekaFIO

O YARN executa todas as suas atividades de processamento alocando recursos e agendando tarefas. Possui dois daemons principais, ou seja, Gerente de Recursos e NodeManager .



Gerente de Recursos

É um componente de nível de cluster (um para cada cluster) e é executado na máquina mestre. Ele gerencia recursos e agenda aplicativos em execução no YARN.

como usar arquivos em java

NodeManager

É um componente de nível de nó (um em cada nó) e é executado em cada máquina escrava. É responsável por gerenciar containers e monitorar a utilização de recursos em cada container. Ele também controla a integridade do nó e o gerenciamento de log. Ele se comunica continuamente com o ResourceManager para se manter atualizado. Portanto, você pode executar o processamento paralelo no HDFS usando MapReduce.

Para saber mais sobre o Hadoop, você pode consultar este blog. Agora que estamos prontos com a introdução do Hadoop, vamos passar para a introdução do Spark.

Apache Spark vs Hadoop: Introdução ao Apache Spark

Apache Spark é uma estrutura para análise de dados em tempo real em um ambiente de computação distribuído. Ele executa cálculos na memória para aumentar a velocidade de processamento de dados. Ele é mais rápido para processar dados em grande escala, pois explora cálculos na memória e outras otimizações. Portanto, requer alto poder de processamento.

O Resilient Distributed Dataset (RDD) é uma estrutura de dados fundamental do Spark. É uma coleção imutável de objetos distribuídos. Cada conjunto de dados em RDD é dividido em partições lógicas, que podem ser calculadas em diferentes nós do cluster. Os RDDs podem conter qualquer tipo de objetos Python, Java ou Scala, incluindo classes definidas pelo usuário. Os componentes do Spark o tornam rápido e confiável. O Apache Spark tem os seguintes componentes:

  1. Spark Core - Spark Core é o mecanismo básico para processamento de dados paralelos e distribuídos em grande escala. Além disso, bibliotecas adicionais construídas sobre o núcleo permitem diversas cargas de trabalho para streaming, SQL e aprendizado de máquina. É responsável pelo gerenciamento de memória e recuperação de falhas, agendamento, distribuição e monitoramento de jobs em um cluster e interação com sistemas de armazenamento
  2. Spark Streaming - Spark Streaming é o componente do Spark usado para processar dados de streaming em tempo real. Portanto, é uma adição útil à API principal do Spark. Ele permite processamento de fluxo de alto rendimento e tolerante a falhas de fluxos de dados ao vivo
  3. Spark SQL : Spark SQL é um novo módulo no Spark que integra o processamento relacional com a API de programação funcional do Spark. Ele suporta a consulta de dados via SQL ou via Hive Query Language. Para aqueles que estão familiarizados com RDBMS, Spark SQL será uma transição fácil de suas ferramentas anteriores, onde você pode estender os limites do processamento de dados relacionais tradicional.
  4. GraphX : GraphX ​​é a API Spark para gráficos e computação paralela a gráficos. Assim, ele estende o Spark RDD com um Resilient Distributed Property Graph. Em um alto nível, GraphX ​​estende a abstração Spark RDD introduzindo o Resilient Distributed Property Graph: um multigrafo direcionado com propriedades anexadas a cada vértice e aresta.
  5. MLlib (Aprendizado de Máquina): MLlib significa Biblioteca de Aprendizado de Máquina. Spark MLlib é usado para realizar aprendizado de máquina no Apache Spark.

Como você pode ver, o Spark vem com bibliotecas de alto nível, incluindo suporte para R, SQL, Python, Scala, Java etc. Essas bibliotecas padrão aumentam as integrações perfeitas em fluxos de trabalho complexos. Além disso, também permite que vários conjuntos de serviços se integrem a ele, como MLlib, GraphX, SQL + Data Frames, serviços de streaming, etc. para aumentar suas capacidades.

Para saber mais sobre o Apache Spark, você pode consultar este blog. Agora o terreno está pronto para o Apache Spark vs Hadoop. Vamos seguir em frente e comparar o Apache Spark com o Hadoop em diferentes parâmetros para entender seus pontos fortes.

Apache Spark vs Hadoop: parâmetros para comparar

atuação

O Spark é rápido porque tem processamento na memória. Ele também pode usar o disco para dados que nem todos cabem na memória. O processamento in-memory do Spark oferece análises quase em tempo real. Isso torna o Spark adequado para sistemas de processamento de cartão de crédito, aprendizado de máquina, análise de segurança e sensores da Internet das Coisas.

O Hadoop foi originalmente configurado para coletar dados continuamente de várias fontes sem se preocupar com o tipo de dados e armazená-los em um ambiente distribuído. MapReduce usa processamento em lote. O MapReduce nunca foi desenvolvido para processamento em tempo real, a ideia principal por trás do YARN é o processamento paralelo em conjunto de dados distribuído.

O problema de comparar os dois é que eles executam o processamento de maneira diferente.

recursos do java 9 com exemplos

Fácil de usar

O Spark vem com APIs amigáveis ​​para Scala, Java, Python e Spark SQL. O Spark SQL é muito semelhante ao SQL, então fica mais fácil para os desenvolvedores SQL aprenderem. O Spark também fornece um shell interativo para que os desenvolvedores consultem e executem outras ações e tenham feedback imediato.

Você pode ingerir dados no Hadoop facilmente usando shell ou integrando-o com várias ferramentas como Sqoop, Flume etc. YARN é apenas uma estrutura de processamento e pode ser integrado com várias ferramentas como Hive e Pig. HIVE é um componente de armazenamento de dados que executa a leitura, gravação e gerenciamento de grandes conjuntos de dados em um ambiente distribuído usando uma interface semelhante a SQL. Você pode passar por isso Ecossistema Hadoop blog para saber sobre as várias ferramentas que podem ser integradas ao Hadoop.

Custos

Hadoop e Spark são projetos de código aberto Apache, portanto, não há custo para o software. O custo está associado apenas à infraestrutura. Ambos os produtos são projetados de forma que possam ser executados em hardware comum com baixo TCO.

Agora você pode estar se perguntando como eles são diferentes. O armazenamento e o processamento no Hadoop são baseados em disco e o Hadoop usa quantidades padrão de memória. Portanto, com o Hadoop, precisamos de muito espaço em disco e também de discos mais rápidos. O Hadoop também requer vários sistemas para distribuir a E / S do disco.

Devido ao processamento de memória do Apache Spark, ele requer muita memória, mas pode lidar com uma velocidade padrão e quantidade de disco. Como o espaço em disco é uma mercadoria relativamente barata e como o Spark não usa E / S de disco para processamento, em vez disso, ele requer grandes quantidades de RAM para executar tudo na memória. Assim, o sistema Spark incorre em mais custos.

Mas sim, uma coisa importante a ter em mente é que a tecnologia do Spark reduz o número de sistemas necessários. Necessita de muito menos sistemas que custam mais. Portanto, haverá um ponto em que o Spark reduz os custos por unidade de computação, mesmo com o requisito de RAM adicional.

Processamento de dados

Existem dois tipos de processamento de dados: Processamento em lote e Processamento de fluxo.

Processamento em lote vs processamento de fluxo

Processamento em lote : O processamento em lote tem sido crucial para o mundo do big data. Em termos mais simples, o processamento em lote está trabalhando com grandes volumes de dados coletados ao longo de um período. No processamento em lote, os dados são primeiro coletados e, em seguida, os resultados processados ​​são produzidos em um estágio posterior.

O processamento em lote é uma forma eficiente de processar grandes conjuntos de dados estáticos. Geralmente, realizamos processamento em lote para conjuntos de dados arquivados. Por exemplo, calculando a renda média de um país ou avaliando a mudança no e-commerce na última década.

Processamento de fluxo : O processamento de stream é a tendência atual no mundo do big data. A necessidade da hora é velocidade e informações em tempo real, que é o que o processamento de vapor faz. O processamento em lote não permite que as empresas reajam rapidamente às mudanças nas necessidades de negócios em tempo real, o processamento de fluxo tem visto um rápido crescimento na demanda.

Agora, voltando ao Apache Spark vs Hadoop, o YARN é basicamente uma estrutura de processamento em lote. Quando enviamos um trabalho para o YARN, ele lê os dados do cluster, executa a operação e grava os resultados de volta no cluster. Em seguida, ele lê novamente os dados atualizados, executa a próxima operação e grava os resultados de volta no cluster e assim por diante.

O Spark executa operações semelhantes, mas usa o processamento na memória e otimiza as etapas. GraphX ​​permite que os usuários visualizem os mesmos dados como gráficos e coleções. Os usuários também podem transformar e juntar gráficos com conjuntos de dados distribuídos resilientes (RDDs).

Tolerância ao erro

O Hadoop e o Spark fornecem tolerância a falhas, mas ambos têm abordagens diferentes. Para HDFS e YARN ambos, daemons mestre (ou seja, NameNode e ResourceManager respectivamente) verifica a pulsação dos daemons escravos (ou seja, DataNode e NodeManager respectivamente). Se algum daemon escravo falhar, os daemons mestre reprogramam todas as operações pendentes e em andamento para outro escravo. Esse método é eficaz, mas também pode aumentar significativamente os tempos de conclusão para operações com falha única. Como o Hadoop usa hardware comum, outra maneira de o HDFS garantir tolerância a falhas é replicando dados.

Como discutimos acima, os RDDs são blocos de construção do Apache Spark. Os RDDs fornecem tolerância a falhas para o Spark. Eles podem se referir a qualquer conjunto de dados presente no sistema de armazenamento externo, como HDFS, HBase, sistema de arquivos compartilhado. Eles podem ser operados paralelamente.

Os RDDs podem persistir um conjunto de dados na memória entre as operações, o que torna as ações futuras 10 vezes mais rápidas. Se um RDD for perdido, ele será automaticamente recalculado usando as transformações originais. É assim que o Spark fornece tolerância a falhas.

Segurança

O Hadoop oferece suporte a Kerberos para autenticação, mas é difícil de manusear. No entanto, ele também oferece suporte a fornecedores de terceiros, como LDAP (Lightweight Directory Access Protocol) para autenticação. Eles também oferecem criptografia. HDFS oferece suporte a permissões de arquivo tradicionais, bem como listas de controle de acesso (ACLs). O Hadoop fornece autorização de nível de serviço, o que garante que os clientes tenham as permissões corretas para o envio de trabalhos.

Atualmente, o Spark oferece suporte à autenticação por meio de um segredo compartilhado. O Spark pode se integrar ao HDFS e pode usar ACLs HDFS e permissões em nível de arquivo. O Spark também pode ser executado no YARN, aproveitando a capacidade do Kerberos.

Casos de uso em que o Hadoop se encaixa melhor:

  • Analisando dados de arquivo. O YARN permite o processamento paralelo de grandes quantidades de dados. Partes dos dados são processadas paralelamente e separadamente em diferentes DataNodes e coleta o resultado de cada NodeManager.
  • Se os resultados instantâneos não forem necessários. Hadoop MapReduce é uma solução boa e econômica para processamento em lote.

Casos de uso em que o Spark se encaixa melhor:

Análise de Big Data em tempo real:

A análise de dados em tempo real significa processar os dados gerados pelos fluxos de eventos em tempo real que chegam a uma taxa de milhões de eventos por segundo, dados do Twitter, por exemplo. A força do Spark reside em sua capacidade de suportar streaming de dados junto com processamento distribuído. Esta é uma combinação útil que oferece processamento de dados quase em tempo real. O MapReduce não tem essa vantagem, pois foi projetado para realizar processamento distribuído em lote em grandes quantidades de dados. Os dados em tempo real ainda podem ser processados ​​no MapReduce, mas sua velocidade não está nem perto da velocidade do Spark.

Spark afirma processar dados 100x mais rápido do que MapReduce, enquanto 10x mais rápido com os discos.

Processamento de gráfico:

A maioria dos algoritmos de processamento de gráfico, como classificação de página, executa várias iterações nos mesmos dados e isso requer um mecanismo de passagem de mensagens. Precisamos programar MapReduce explicitamente para lidar com tais iterações múltiplas nos mesmos dados. A grosso modo, funciona assim: Leia os dados do disco e, após uma iteração específica, grave os resultados no HDFS e depois leia os dados do HDFS para a próxima iteração. Isso é muito ineficiente, pois envolve a leitura e gravação de dados no disco, o que envolve operações pesadas de E / S e replicação de dados no cluster para tolerância a falhas. Além disso, cada iteração MapReduce tem uma latência muito alta e a próxima iteração pode começar somente depois que o trabalho anterior for completamente concluído.

Além disso, a passagem de mensagens requer pontuações de nós vizinhos para avaliar a pontuação de um determinado nó. Esses cálculos precisam de mensagens de seus vizinhos (ou dados em vários estágios do trabalho), um mecanismo que o MapReduce carece. Diferentes ferramentas de processamento de gráficos, como Pregel e GraphLab, foram projetadas para atender à necessidade de uma plataforma eficiente para algoritmos de processamento de gráficos. Essas ferramentas são rápidas e escaláveis, mas não são eficientes para a criação e pós-processamento desses algoritmos complexos de vários estágios.

A introdução do Apache Spark resolveu esses problemas em grande medida. O Spark contém uma biblioteca de computação gráfica chamada GraphX, que simplifica nossa vida. A computação in-memory junto com o suporte gráfico integrado melhora o desempenho do algoritmo em uma magnitude de um ou dois graus em relação aos programas MapReduce tradicionais. O Spark usa uma combinação de Netty e Akka para distribuir mensagens entre os executores. Vejamos algumas estatísticas que mostram o desempenho do algoritmo PageRank usando Hadoop e Spark.

Algoritmos de aprendizado de máquina iterativos:

Quase todos os algoritmos de aprendizado de máquina funcionam iterativamente. Como vimos anteriormente, os algoritmos iterativos envolvem gargalos de E / S nas implementações de MapReduce. MapReduce usa tarefas de granulação grossa (paralelismo de nível de tarefa) que são muito pesadas para algoritmos iterativos. Spark com a ajuda de Mesos - um kernel de sistema distribuído, armazena em cache o conjunto de dados intermediário após cada iteração e executa várias iterações neste conjunto de dados em cache, o que reduz o I / O e ajuda a executar o algoritmo mais rápido de maneira tolerante a falhas.

o que é char em java

O Spark tem uma biblioteca de aprendizado de máquina escalonável integrada chamada MLlib, que contém algoritmos de alta qualidade que aproveita as iterações e produz melhores resultados do que as aproximações de uma passagem às vezes usadas no MapReduce.

  • Processamento de dados rápido. Como sabemos, o Spark permite o processamento na memória. Como resultado, o Spark é até 100 vezes mais rápido para dados na RAM e até 10 vezes para dados no armazenamento.
  • Processamento iterativo. Os RDDs do Spark permitem a execução de várias operações de mapa na memória, sem a necessidade de gravar conjuntos de dados provisórios em um disco.
  • Processamento quase em tempo real. Spark é uma excelente ferramenta para fornecer percepções de negócios imediatas. Esta é a razão pela qual o Spark é usado no sistema de streaming de cartão de crédito.

“Apache Spark: A Killer or Savior of Apache Hadoop?”

A resposta para isso - Hadoop MapReduce e Apache Spark não estão competindo um com o outro. Na verdade, eles se complementam muito bem. O Hadoop traz enormes conjuntos de dados sob controle por sistemas de commodities. O Spark fornece processamento na memória em tempo real para os conjuntos de dados que o exigem. Quando combinamos, a capacidade do Apache Spark, ou seja, alta velocidade de processamento, análises avançadas e suporte de integração múltipla com a operação de baixo custo do Hadoop em hardware comum, dá os melhores resultados. O Hadoop complementa os recursos do Apache Spark. O Spark não pode substituir completamente o Hadoop, mas a boa notícia é que a demanda por Spark está no máximo! Este é o momento certo para dominar o Spark e aproveitar ao máximo as oportunidades de carreira que surgem em seu caminho. Comece agora!

Tem alguma questão para nós? Mencione isso na seção de comentários e entraremos em contato com você o mais breve possível.

Se você deseja aprender o Spark e construir uma carreira no domínio do Spark para realizar processamento de dados em larga escala usando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​e Scala com casos de uso da vida real, confira nossos casos de uso interativos e ao vivo online Aqui, que vem com suporte 24 horas por dia, 7 dias por semana para guiá-lo durante o período de aprendizado.