Transformações com estado com janelas no fluxo do Spark



Esta postagem de blog discute as transformações com estado com janelas no Spark Streaming. Aprenda tudo sobre como rastrear dados em lotes usando D-Streams de última geração.

Contribuição de Prithviraj Bose

Neste blog, discutiremos o conceito de janelamento das transformações com estado do Apache Spark.





O que é transformação com estado?

O fluxo do Spark usa uma arquitetura de microlote em que os dados recebidos são agrupados em microlotes chamados Discretized Streams (DStreams), que também servem como abstração de programação básica. Os DStreams internamente têm conjuntos de dados distribuídos resilientes (RDD) e, como resultado disso, transformações e ações RDD padrão podem ser feitas.



No streaming, se temos um caso de uso para rastrear dados em lotes, precisamos DStreams de estado completo.

Por exemplo, podemos rastrear a interação de um usuário em um site durante a sessão do usuário ou podemos rastrear uma hashtag do Twitter específica ao longo do tempo e ver quais usuários em todo o mundo estão falando sobre isso.

programa da série fibonacci em java

Tipos de transformação completa.



DStreams state-ful são de dois tipos - rastreamento baseado em janela e rastreamento de sessão completa.

Para rastreamento com estado, todos os dados recebidos devem ser transformados em pares de valores-chave, de forma que os estados das chaves possam ser rastreados em lotes. Esta é uma pré-condição.

Além disso, também devemos habilitar o checkpoint, um conceito que discutiremos em blogs posteriores.

> Rastreamento baseado em janela

No rastreamento baseado em janela, os lotes de entrada são agrupados em intervalos de tempo, ou seja, grupos de lotes a cada 'x' segundos. Outros cálculos sobre esses lotes são feitos usando intervalos de slide.

Por exemplo, se o intervalo da janela = 3 segundos e o intervalo do slide = 2 segundos, todos os dados recebidos serão agrupados em lotes a cada 3 segundos e os cálculos nesses lotes ocorrerão a cada 2 segundos. Alternativamente, podemos dizer, faça cálculos a cada 2 segundos nos lotes que chegaram nos últimos 3 segundos.

spark-streaming-dstream-window

No diagrama acima, vemos que os lotes de entrada são agrupados a cada 3 unidades de tempo (intervalo de janela) e os cálculos são feitos a cada 2 unidades de tempo (intervalo de slide).
Nota: Ao contrário do Apache Flink, o Apache Spark não tem um conceito de janela móvel, todas as janelas são deslizantes.

FOGO

Uma API popular para transformações baseadas em janela é

PairDStreamFunctions.reduceByKeyAndWindow .

Existem várias versões sobrecarregadas desta API, vamos ver a que tem o maior número de parâmetros. Após esta explicação, o restante das versões sobrecarregadas desta API devem ser autoexplicativas.

Retorna: O DStream transformado [(K, V)]

reduzirFunc : A função de redução associativa.

invReduceFunc : O inverso da função de redução acima. Isso é necessário para a computação eficiente de lotes de entrada e saída. Com a ajuda desta função, o valor dos lotes de saída é deduzido do valor acumulado da função de redução acima. Por exemplo, se estivermos calculando a soma dos valores de entrada para as respectivas chaves, então, para os lotes de saída, subtrairemos os valores das respectivas chaves (desde que estejam presentes no lote atual, caso contrário, ignore).

windowDuration : Unidades de tempo para agrupar os lotes, deve ser um múltiplo do intervalo do lote.

slideDuration : Unidades de tempo para cálculo, deve ser um múltiplo do intervalo do lote. partições : O particionador a ser usado para armazenar o DStream resultante. Para obter mais informações sobre particionamento, leia isto .

filterFunc : Função para filtrar pares de valores-chave expirados, ou seja, por exemplo, se não recebermos uma atualização de uma chave por algum tempo, podemos querer removê-la.

Aqui está um programa para contar as palavras provenientes de um fluxo de soquete. Usamos uma versão sobrecarregada da função acima com um intervalo de janela de 4 segundos e um intervalo de slide de 2 segundos.

No meu próximo blog, escreverei sobre o rastreamento de sessão completa e pontos de verificação.

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

Postagens relacionadas:

Cache Distribuído com Variáveis ​​de Broadcast