Tutorial de streaming do Apache Spark para iniciantes: trabalho, arquitetura e recursos

Publicados: 2020-02-27

Atualmente, vivemos em um mundo onde uma grande quantidade de dados é gerada a cada segundo em um ritmo acelerado. Esses dados podem fornecer resultados significativos e úteis se forem analisados ​​com precisão. Ele também pode oferecer soluções para muitas indústrias no momento certo.

Estes são muito úteis nas indústrias, como em serviços de viagens, varejo, mídia, finanças e assistência médica. Muitas outras grandes empresas adotaram a Análise de Dados, como o Rastreamento da interação do cliente com diferentes tipos de produtos feitos pela Amazon em sua plataforma ou os espectadores recebendo recomendações personalizadas em tempo real, que são fornecidas pela Netflix.

Ele pode ser usado por qualquer empresa que use uma grande quantidade de dados, e eles podem analisá-los em seu benefício para melhorar o processo geral em seus negócios e aumentar a satisfação do cliente e as experiências do usuário. Melhores experiências do usuário e satisfação do cliente fornecem benefícios para a organização, a longo prazo, para expandir os negócios e obter lucro.

Índice

O que é Streaming?

Streaming de dados é um método no qual as informações são transferidas como um fluxo contínuo e constante. À medida que a Internet está crescendo, as tecnologias de streaming também estão aumentando.

O que é o Spark Streaming?

Quando os dados chegam continuamente em uma sequência desvinculada, isso é chamado de fluxo de dados. Os dados de entrada estão fluindo de forma constante e são divididos por streaming. O processamento adicional dos dados é feito depois que eles são divididos em unidades discretas. A análise de dados e processamento de dados em baixa latência é chamada de processamento de fluxo.

Em 2013, o Apache Spark foi adicionado com o Spark Streaming. Existem muitas fontes das quais a ingestão de dados pode acontecer, como TCP Sockets, Amazon Kinesis, Apache Flume e Kafka. Com a ajuda de algoritmos sofisticados, o processamento de dados é feito. Uma função de alto nível como janela, junção, redução e mapa são usadas para expressar o processamento. Painéis dinâmicos, bancos de dados e sistemas de arquivos são usados ​​para enviar os dados processados ​​para sistemas de arquivos.

Funcionamento do fluxo

Seguem o funcionamento interno. O streaming do Spark divide os fluxos de dados de entrada ao vivo em lotes. O Spark Engine é usado para processar esses lotes para gerar lotes de fluxo finais como resultado.

Os dados no fluxo são divididos em pequenos lotes e são representados pelo Apache Spark Discretized Stream (Spark DStream). Spark RDDs é usado para construir DStreams, e esta é a abstração de dados principal do Spark. Quaisquer componentes do Apache Spark, como Spark SQL e Spark MLib, podem ser facilmente integrados ao Spark Streaming sem problemas.

O Spark Streaming ajuda a dimensionar os fluxos de dados ao vivo. É uma das extensões da API principal do Spark. Ele também permite o processamento de fluxo tolerante a falhas e alto rendimento. O uso do Spark Streaming faz processamento em tempo real e streaming de dados ao vivo. As principais empresas do mundo estão usando o serviço de Spark Streaming, como Pinterest, Netflix e Uber.

O Spark Streaming também fornece uma análise de dados em tempo real. O processamento de dados ao vivo e rápido é realizado na plataforma única do Spark Streaming.

Leia também Arquitetura Apache Spark

Por que o Spark Streaming?

O Spark Streaming pode ser usado para transmitir dados em tempo real de diferentes fontes, como Facebook, Bolsa de Valores e Sistemas Geográficos, e realizar análises poderosas para incentivar os negócios.

Existem cinco aspectos significativos do Spark Streaming que o tornam tão único, e são eles:

1. Integração

Bibliotecas avançadas como processamento gráfico, aprendizado de máquina, SQL podem ser facilmente integradas a ele.

2. Combinação

Os dados que estão sendo transmitidos podem ser feitos em conjunto com consultas interativas e também conjuntos de dados estáticos.

3. Balanceamento de carga

O Spark Streaming possui um balanceamento de carga perfeito, o que o torna muito especial.

4. Uso de recursos

O Spark Streaming usa o recurso disponível de maneira otimizada.

5. Recuperação de retardatários e falhas

O Spark Streaming pode se recuperar rapidamente de qualquer tipo de falha ou atraso.

Necessidade de streaming no Apache Spark

O modelo de operador contínuo é usado ao projetar o sistema para processar fluxos tradicionalmente para processar os dados. O funcionamento do sistema é o seguinte:

  1. As fontes de dados são usadas para transmitir os dados. Os diferentes tipos de fontes de dados são dispositivos IoT, dados de telemetria do sistema, logs ao vivo e muito mais. Esses dados de streaming são ingeridos em sistemas de ingestão de dados, como Amazon Kinesis, Apache Kafka e muitos outros.
  2. Em um cluster, o processamento paralelo é feito nos dados.
  3. Sistemas downstream como Kafka, Cassandra, HBase são usados ​​para passar os resultados.

Um conjunto de nós do trabalhador executa alguns operadores contínuos. O processamento de registros de dados transmitidos é feito um de cada vez. Os documentos são então encaminhados para os próximos operadores no pipeline.

Os operadores de origem estão acostumados a receber dados de sistemas de ingestão. Operadores de pia são usados ​​para dar saída ao sistema a jusante.

Alguns operadores são contínuos. Estes são um modelo natural e direto. Quando se trata de Analytics de dados complexos em tempo real, que é feito em larga escala, a arquitetura tradicional enfrenta alguns desafios no mundo moderno, e são eles:

Recuperação rápida de falhas

Nos dias de hoje, as falhas do sistema são rapidamente acompanhadas e acomodadas pela recuperação de informações perdidas, computando as informações ausentes em nós paralelos. Assim, torna a recuperação ainda mais rápida em relação aos sistemas tradicionais.

Balanceador de carga

O balanceador de carga ajuda a alocar recursos e dados entre os nós de maneira mais eficiente para que nenhum recurso esteja esperando ou não faça nada, mas os dados sejam distribuídos uniformemente pelos nós.

Unificação de cargas de trabalho interativas, em lote e de streaming

Também é possível interagir com dados de streaming fazendo consultas aos dados de streaming. Também pode ser combinado com conjuntos de dados estáticos. Não se pode fazer consultas ad-hoc usando novos operadores porque não é projetado para operadores contínuos. As consultas interativas, de streaming e em lote podem ser combinadas usando um único mecanismo.

Consultas e análises SQL com ML

O desenvolvimento de sistemas com comando de banco de dados comum facilitou a vida do desenvolvedor em colaboração com outros sistemas. A comunidade aceita amplamente as consultas SQL. Onde o sistema fornece módulo e bibliotecas para aprendizado de máquina que podem ser usados ​​para fins analíticos avançados.

Visão geral do Spark Streaming

O Spark Streaming usa um conjunto de RDDs que é usado para processar os dados em tempo real. Portanto, o Spark Streaming é geralmente usado para tratar o fluxo de dados em tempo real. O Spark Streaming fornece processamento tolerante a falhas e de alta taxa de transferência de fluxos de dados ao vivo. É um recurso extra que vem com a API do núcleo do Spark.

Recursos de streaming do Spark

  1. Análise de Negócios : Com o uso do Spark Streaming, também é possível aprender o comportamento do público. Esses aprendizados podem ser usados ​​posteriormente na tomada de decisões das empresas.
  2. Integração: O processamento em tempo real e em lote é integrado ao Spark
  3. Tolerância a falhas – A capacidade única do Spark é que ele pode se recuperar da falha com eficiência.
  4. Velocidade: baixa latência é alcançada pelo Spark
  5. Dimensionamento: os nós podem ser dimensionados facilmente até centenas pelo Spark.

Fundamentos do Spark Streaming

1. Contexto de transmissão

No Spark, o fluxo de dados é consumido e gerenciado pelo Streaming Context. Ele cria um objeto de Receiver que é produzido registrando um fluxo de entrada. Assim, é a principal funcionalidade do Spark que se torna um ponto de entrada crítico para o sistema, pois fornece muitos contextos que fornecem um fluxo de trabalho padrão para diferentes fontes, como Akka Actor, Twitter e ZeroMQ.

Leia: Papel do Apache Spark no Big Data e por que ele é único

Um objeto de contexto spark representa a conexão com um cluster spark. Onde o objeto Spark Streaming é criado por um objeto StreamingContext, acumuladores, RDDs e variáveis ​​de transmissão também podem ser criados um objeto SparkContex.

2. Pontos de verificação, variáveis ​​de transmissão e acumuladores

Pontos de verificação

O Checkpoint funciona de forma semelhante ao Checkpoints que armazena o estado dos sistemas da mesma forma que nos jogos. Onde, neste caso, os Checkpoints auxiliam na redução da perda de recursos e tornam o sistema mais resiliente à quebra do sistema. Uma metodologia de ponto de verificação é a melhor maneira de acompanhar e salvar os estados do sistema para que, no momento da recuperação, ele possa ser facilmente recuperado.

Variáveis ​​de transmissão

Em vez de fornecer a cópia completa das tarefas para os nós da rede, ele sempre captura uma variável somente leitura que é responsável por reconhecer os nós de diferentes tarefas presentes e, assim, reduzir o custo de transferência e computação por nós individuais. Assim, ele pode fornecer um conjunto de entrada significativo com mais eficiência. Ele também usa algoritmos avançados para distribuir a variável broadcast para diferentes nós da rede; assim, o custo de comunicação é reduzido.

Acumuladores

Acumuladores são variáveis ​​que podem ser customizadas para diferentes propósitos. Mas também existem acumuladores já definidos como acumuladores de contador e de soma. Há também acumuladores de rastreamento que rastreiam cada nó, e alguns recursos extras também podem ser adicionados a ele. Os acumuladores numéricos suportam muitas funções digitais que também são suportadas pelo Spark. Acumuladores personalizados também podem ser criados sob demanda do usuário.

DStream

DStream significa Fluxo Discretizado. O Spark Streaming oferece a abstração necessária, que é chamada de Discretized Stream (DStream). DStream é um dado que flui continuamente. De uma fonte de dados, DStream é recebido. Também pode ser obtido a partir de um fluxo de dados processados. A transformação do fluxo de entrada gera fluxo de dados processados.

Após um intervalo especificado, os dados estão contidos em um RDD. Uma série infinita de RDDs representa um DStream.

Cache

Os desenvolvedores podem usar o DStream para armazenar em cache os dados do fluxo na memória. Isso é útil se os dados forem computados várias vezes no DStream. Isso pode ser obtido usando o método persist() em um DStream.

A duplicação de dados é feita para garantir a segurança de ter um sistema resiliente que possa resistir a falhas no sistema, tendo assim a capacidade de tolerar falhas no sistema (como Kafka, Sockets, Flume etc.)

Vantagem e arquitetura do Spark Streaming

O processamento de um fluxo de dados por vez pode ser complicado às vezes; portanto, o Spark Streaming discretiza os dados em pequenos sublotes que são facilmente gerenciáveis. Isso ocorre porque os trabalhadores do Spark obtêm buffers de dados em paralelo aceitos pelo receptor Spark Streaming. E, portanto, todo o sistema executa os lotes em paralelo e depois acumula os resultados finais. Em seguida, essas tarefas curtas são processadas em lotes pelo mecanismo Spark e os resultados são fornecidos a outros sistemas.

Na arquitetura Spark Streaming, a computação não é alocada e carregada estaticamente em um nó, mas com base na localidade dos dados e na disponibilidade dos recursos. Assim, reduz o tempo de carregamento em comparação com os sistemas tradicionais anteriores. Daí o uso do princípio de localidade de dados, também é mais fácil para a detecção de falhas e sua recuperação.

Os nós de dados no Spark geralmente são representados por RDD que é um conjunto de dados de distribuição resiliente.

Objetivos do Spark Streaming

A seguir estão os Objetivos alcançados pela arquitetura Spark.

1. Balanceamento de carga dinâmico

Esse é um dos recursos essenciais do Spark Streaming onde os fluxos de dados são alocados dinamicamente pelo load balancer, que é responsável pela alocação de dados e cálculo de recursos utilizando regras específicas nele definidas. O principal objetivo do balanceamento de carga é equilibrar a carga de trabalho de forma eficiente entre os trabalhadores e colocar tudo de forma paralela para que não haja desperdício de recursos disponíveis. E também responsável por alocar recursos dinamicamente para os nós do trabalhador no sistema.

2. Falha e Recuperação

Assim como no sistema tradicional, quando ocorre uma falha de operação, todo o sistema precisa recalcular essa parte para recuperar as informações perdidas. Mas o problema surge quando um nó está lidando com toda essa recuperação e fazendo com que todo o sistema aguarde sua conclusão. Enquanto no Spark a informação perdida é computada por outros nós livres e traz o sistema de volta para rastrear sem nenhuma espera extra como nos métodos tradicionais.

E também a tarefa com falha é distribuída uniformemente em todos os nós do sistema para recalculá-la e recuperá-la da falha mais rapidamente do que o método tradicional.

3. Lotes e consulta interativa

Conjunto de RDDs no Spark são chamados de DStream no Spark que fornece uma relação entre cargas de trabalho de streaming e lotes. Esses lotes são armazenados na memória do Spark, o que fornece uma maneira eficiente de consultar os dados presentes nele.

A melhor parte do Spark é que ele inclui uma ampla variedade de bibliotecas que podem ser usadas quando necessário pelo sistema Spark. Poucos nomes das bibliotecas são MLlib para aprendizado de máquina, SQL para consulta de dados, GraphX ​​e Data Frame, enquanto Dataframe e perguntas podem ser convertidos em instruções SQL equivalentes por DStreams.

4. Desempenho

Como o sistema de faíscas usa distribuições paralelas da tarefa que melhoram sua capacidade de rendimento e, assim, alavancam o motor de faíscas que é capaz de atingir baixa latência de até 100 milissegundos.

Como funciona o Spark Streaming?

Os dados no fluxo são divididos em pequenos lotes que são chamados de DStreams no Spark Streaming. É uma sequência de RDDs internamente. As APIs do Spark são usadas pelo RDDS para processar os dados e as remessas são retornadas como resultado. A API do Spark Streaming está disponível em Python, Java e Scala. Muitos recursos estão faltando na API Python recentemente introduzida no Spark 1.2.

Os cálculos com estado são chamados de estado que é mantido pelo Spark Streaming com base nos dados de entrada no fluxo. Os dados que fluem no fluxo são processados ​​dentro de um período de tempo. Esse período de tempo deve ser especificado pelo desenvolvedor e deve ser permitido pelo Spark Streaming. A janela de tempo é o prazo dentro do qual o trabalho deve ser concluído. A janela de tempo é atualizada dentro de um intervalo de tempo que também é conhecido como intervalo deslizante na janela.

Fontes de streaming do Spark

O objeto receptor que está relacionado com um DStream de entrada, armazena os dados recebidos, na memória Sparks para processamento.

O streaming integrado tem duas categorias:

1. Fonte básica

Fontes disponíveis na API de Streaming, por exemplo, Socket Connection e File System.

2. Fonte avançada

O nível avançado de fontes é Kinesis, Flume & Kafka etc.

Operações de transmissão

Existem dois tipos de operações que são suportadas pelo Spark RDDS e são: -

1. Operações de saída no Apache Spark

As operações de saída são usadas para enviar os dados do DStream para um sistema externo, como um sistema de arquivos ou um banco de dados. As Operações de Saída permitem que os dados transformados sejam consumidos pelos sistemas externos. Todas as Transformações de DStreams são realmente executadas pelo triggering, que é feito pelos sistemas externos.

Estas são as operações de saída atuais:

foreachRDD(func), [suffix]), saveAsHadoopFiles(prefix, [suffix]), saveAsObjectFiles(prefix, [suffix])”prefix-TIME_IN_MS[.suffix]”, saveAsTextFiles(prefix, print()

Os RDDs executam lentamente as operações de saída. Dentro das Operações DStream de Saída, as Ações RDD são executadas com força para serem processadas dos dados recebidos. A execução das Operações de Saída é feita uma de cada vez. Os aplicativos Spark definem a ordem do desempenho das operações de saída.

2. Transformação de centelha

A transformação do Spark também altera os dados do DStream, pois os RDDs o suportam no Spark. Assim como o Spark RDD, muitas alterações são suportadas pelo DStream.

A seguir estão as operações de transformação mais comuns:

Window(), updateStateByKey(), transform(), [numTasks]), cogroup(otherStream, [numTasks]), join(otherStream, reduceByKey(func, [numTasks]), countByValue(), reduce(), union(otherStream ), count(), repartition(numPartitions), filter(), flatMap(), map().

Conclusão

No mundo atual, orientado por dados, as ferramentas para armazenar e analisar dados provaram ser o fator-chave na análise e no crescimento de negócios. Big Data e as ferramentas e tecnologias associadas provaram ser uma demanda crescente. Como tal, o Apache Spark tem um ótimo mercado e oferece ótimos recursos para clientes e empresas.

Se você estiver interessado em saber mais sobre Big Data, confira nosso programa PG Diploma in Software Development Specialization in Big Data, projetado para profissionais que trabalham e fornece mais de 7 estudos de caso e projetos, abrange 14 linguagens e ferramentas de programação, práticas práticas workshops, mais de 400 horas de aprendizado rigoroso e assistência para colocação de emprego com as principais empresas.

Aprenda cursos de desenvolvimento de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Lidere a revolução tecnológica orientada a dados

Mais de 400 horas de aprendizado. 14 Idiomas e Ferramentas. Status de ex-aluno do IIIT-B.
Programa Avançado de Certificação em Big Data do ITT Bangalore