Apache Spark DStream (Fluxo Discretizado)
Fique atualizado com as últimas tendências tecnológicas
Junte DataFlair no Telegrama!!
Objetivo
Este tutorial Spark, passeie você através do Apache Spark DStream. Primeiro de tudo, veremos o que é Spark Streaming, depois, o que é DStream no Apache Spark. Operações Discretizadas do Stream, ou seja, Transformações Stateless e Stateful, Operação de Saída, Entrada DStream, e Receptores também são discutidos neste blog Apache Spark.
>
Apache Spark DStream (Fluxo Discretizado)
Introdução ao DStream no Apache Spark
Nesta seção, nós aprenderemos sobre o DStream. Qual é o seu papel, e responsabilidade no Spark Streaming? Inclui o que todos os métodos são inculcados para lidar com a transmissão de dados ao vivo.
Como uma extensão do Apache Spark API, Spark Streaming é tolerante a falhas, sistema de alta taxa de transmissão. Ele processa o fluxo de dados ao vivo. Spark Streaming recebe entradas de várias fontes confiáveis como Flume, HDFS, e Kafka etc. e então envia os dados processados para sistemas de arquivos, banco de dados ou painéis de controle ao vivo. O fluxo de dados de entrada é dividido em lotes de dados e então gera o fluxo final do resultado em lotes.
Spark DStream (Fluxo Discreto) é a abstração básica do Spark Streaming. O DStream é um fluxo contínuo de dados. Ele recebe entrada de várias fontes como Kafka, Flume, Kinesis, ou soquetes TCP. Também pode ser um fluxo de dados gerado pela transformação do fluxo de entrada. No seu núcleo, DStream é um fluxo contínuo de RDD (Spark abstraction). Cada RDD no DStream contém dados de um determinado intervalo.
Ainda operação em um DStream se aplica a todos os RDDs subjacentes. O DStream cobre todos os detalhes. Ele fornece ao desenvolvedor uma API de alto nível para conveniência. Como resultado, Spark DStream facilita o trabalho com dados de streaming.
Spark Streaming oferece propriedades de tolerância a falhas para DStreams como a dos RDDs. desde que uma cópia dos dados de entrada esteja disponível, ele pode recalcular qualquer estado a partir dele usando a linhagem dos RDDs. Por padrão, Spark replica os dados em dois nós. Como resultado, Spark Streaming pode suportar falhas de um único trabalhador.
Operações do Spark Spark DStream
Como RDD, Spark DStream também suporta dois tipos de operações: Transformações e operações de saída-
i. Transformações
Existem dois tipos de transformação no DStream:
- Transformações sem Estado
- Transformações sem Estado
a. Stateless Transformations
O processamento de cada lote não depende dos dados dos lotes anteriores. As transformações Stateless são transformações RDD simples. Aplica-se a cada lote, o que significa que cada RDD em um DStream. Ele inclui transformações RDD comuns como map(), filter(), reduceByKey() etc.
Embora essas funções pareçam se aplicar a todo o fluxo, cada DStream é uma coleção de muitos RDD (lotes). Como resultado, cada transformação sem estado aplica-se a cada RDD.
Transformações sem estado são capazes de combinar dados de muitos DStreams dentro de cada passo de tempo. Por exemplo, DStreams chave/valor têm as mesmas transformações relacionadas a join que RDDs- cogroup(), join(), leftOuterJoin() etc.
Nós podemos usar essas operações em DStreams para executar operações RDD subjacentes em cada lote.
Se as transformações sem estado forem insuficientes, DStreams vem com um operador avançado chamado transform(). transform() permite operar nos RDDs dentro deles. A transform() permite que qualquer função RDD-para-RDDD arbitrária atue no DStream. Esta função é chamada em cada lote de dados no fluxo para produzir um novo fluxo.
b. Stateful Transformations
Usa dados ou resultados intermediários de lotes anteriores e calcula o resultado do lote atual. Transformações Stateful são operações em DStreams que rastreiam dados ao longo do tempo. Assim, ele faz uso de alguns dados de lotes anteriores para gerar os resultados de um novo lote.
Os dois tipos principais são operações em janela, que atuam sobre uma janela deslizante de períodos de tempo, e updateStateByKey(), que é usado para rastrear o estado através de eventos para cada chave (por exemplo, para construir um objeto representando cada sessão do usuário).
Seguir este link para ler DStream Transformations em detalhes com os exemplos.
ii. Operação de Saída
Após a transformação, obtemos os dados após a transformação, nessa operação de saída de dados são realizados em Spark Streaming. Após a depuração do nosso programa, usando a operação de saída, só podemos salvar a nossa saída. Algumas das operações de saída são print(), save() etc… A operação save leva o diretório para salvar o arquivo e um sufixo opcional. A print() pega os primeiros 10 elementos de cada lote do DStream e imprime o resultado.
Input DStreams and Receivers
Input DStream é um DStream representando o fluxo de dados de entrada da fonte de streaming. Receptor (Scala doc, Java doc) objeto associado a cada objeto DStream de entrada. Ele recebe os dados de uma fonte e os armazena na memória da Spark para processamento.
Spark Streaming fornece duas categorias de fontes de streaming embutidas:
- Fontes básicas – Estas são fontes que estão diretamente disponíveis na API StreamingContext. Exemplos: sistemas de arquivo, e conexões de socket.
- Fontes Avançadas – Estas fontes estão disponíveis por classes utilitárias extras como Kafka, Flume, Kinesis. Assim, requer ligações contra dependências extras.
Por exemplo:
- Kafka: o artefato necessário para Kafka é o spark-streaming-kafka-0-8_2.11.
- Flume: o artefato necessário para o Flume é dspark-streaming-flume_2.11.
- Kinesis: o artefacto necessário para Kinesis é centelha-centelha-centelha-assl_2.11.
Cria muitas entradas DStream para receber vários fluxos de dados em paralelo. Ele cria vários receptores que recebem muitos fluxos de dados. Spark worker/executor é uma tarefa de longa duração. Assim, ocupa um dos núcleos que se associam à aplicação Spark Streaming. Então, é necessário que, a aplicação Spark Streaming tenha núcleos suficientes para processar dados recebidos.
Conclusion
Em conclusão, assim como RDD em Spark, Spark Streaming fornece uma abstração de alto nível conhecida como DStream. O DStream representa um fluxo contínuo de dados. Internamente, DStream é retratado como uma sequência de RDDs. Assim, como RDD, nós podemos obter DStream a partir da entrada DStream como Kafka, Flume etc. Além disso, a transformação poderia ser aplicada no DStream existente para obter um novo DStream.