Transformations avec état avec fenêtrage dans Spark Streaming



Cet article de blog traite des transformations avec état avec le fenêtrage dans Spark Streaming. Apprenez-en davantage sur le suivi des données entre les lots à l'aide de D-Streams.

Contribution de Prithviraj Bose

Dans ce blog, nous discuterons du concept de fenêtrage des transformations avec état d'Apache Spark.





Qu'est-ce que la transformation avec état?

Spark Streaming utilise une architecture de micro-lots où les données entrantes sont regroupées en micro-lots appelés Discretized Streams (DStreams) qui sert également d'abstraction de programmation de base. Les DStreams ont en interne des ensembles de données distribués résilients (RDD) et, à la suite de cette norme, des transformations et des actions RDD peuvent être effectuées.



En streaming, si nous avons un cas d'utilisation pour suivre les données entre les lots, nous avons besoin de DStreams complets.

Par exemple, nous pouvons suivre l'interaction d'un utilisateur sur un site Web pendant la session utilisateur ou nous pouvons suivre un hashtag Twitter particulier à travers le temps et voir quels utilisateurs à travers le monde en parlent.

Types de transformation d'état.



Les DStreams à état complet sont de deux types: le suivi basé sur une fenêtre et le suivi complet de session.

Pour le suivi avec état, toutes les données entrantes doivent être transformées en paires clé-valeur de sorte que les états clés puissent être suivis à travers les lots. C'est une condition préalable.

De plus, nous devrions également activer le point de contrôle, un concept dont nous discuterons dans les blogs ultérieurs.

> Suivi basé sur la fenêtre

Dans le suivi basé sur une fenêtre, les lots entrants sont regroupés par intervalles de temps, c'est-à-dire regrouper les lots toutes les «x» secondes. D'autres calculs sur ces lots sont effectués en utilisant des intervalles de diapositives.

Par exemple, si l'intervalle de fenêtre = 3 secondes et l'intervalle de diapositive = 2 secondes, toutes les données entrantes seront regroupées en lots toutes les 3 secondes et les calculs sur ces lots auront lieu toutes les 2 secondes. Alternativement, nous pouvons dire, faites des calculs toutes les 2 secondes sur les lots qui sont arrivés dans les 3 dernières secondes.

spark-streaming-dstream-window

Dans le diagramme ci-dessus, nous voyons que les lots entrants sont regroupés toutes les 3 unités de temps (intervalle de fenêtre) et les calculs sont effectués toutes les 2 unités de temps (intervalle de glissement).
Remarque: contrairement à Apache Flink, Apache Spark n'a pas de concept de fenêtre tumbling, toutes les fenêtres glissent.

FEU

Une API populaire pour les transformations basées sur les fenêtres est

PairDStreamFunctions.reduceByKeyAndWindow .

Il existe plusieurs versions surchargées de cette API, voyons celle qui contient le plus de paramètres. Après cette explication, le reste des versions surchargées de cette API devrait être explicite.

Renvoie: le DStream transformé [(K, V)]

réduireFunc : La fonction de réduction associative.

invReduceFunc : L'inverse de la fonction de réduction ci-dessus. Ceci est nécessaire pour un calcul efficace des lots entrants et sortants. A l'aide de cette fonction, la valeur des lots sortants est déduite de la valeur cumulée de la fonction de réduction ci-dessus. Par exemple, si nous calculons la somme des valeurs entrantes pour les clés respectives, alors pour les lots sortants, nous soustraireons les valeurs des clés respectives (à condition qu'elles soient présentes dans le lot actuel, sinon ignorer).

windowDuration : Unités de temps pour regrouper les lots, cela doit être un multiple de l'intervalle de lots.

slideDuration : Unités de temps pour le calcul, il doit s'agir d'un multiple de l'intervalle batch. partitions : Le partitionneur à utiliser pour stocker le DStream résultant. Pour plus d'informations sur le partitionnement, lisez cette .

filterFunc : Fonction pour filtrer les paires clé-valeur expirées, c'est-à-dire que si nous n'obtenons pas de mise à jour pour une clé pendant un certain temps, nous souhaitons peut-être la supprimer.

Voici un programme pour compter les mots provenant d'un flux de socket. Nous avons utilisé la version surchargée de la fonction ci-dessus avec un intervalle de fenêtre de 4 secondes et un intervalle de diapositive de 2 secondes.

Dans mon prochain blog, j'écrirai sur le suivi complet des sessions et le point de contrôle.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous recontacterons.

comment convertir un double en int en java

Articles Similaires:

Mise en cache distribuée avec des variables de diffusion