Apache Spark DStream (Discretized Streams)
Restez à jour avec les dernières tendances technologiques
Joignez DataFlair sur Telegram !!
Objectif
Ce tutoriel Spark, vous promène à travers le Apache Spark DStream. Tout d’abord, nous allons voir ce qu’est le Streaming Spark, puis, ce qu’est DStream dans Apache Spark. Les opérations de flux discrétisés c’est-à-dire les transformations Stateless et Stateful, l’opération de sortie, le DStream d’entrée et les récepteurs sont également abordés dans ce blog Apache Spark.
Apache Spark DStream (Discretized Streams)
Introduction à DStream dans Apache Spark
Dans cette section, nous allons apprendre à connaître DStream. Quels sont son rôle, et sa responsabilité dans le Streaming Spark ? Il comprend ce que toutes les méthodes sont inculquées pour traiter le flux de données en direct.
En tant qu’extension de l’API Apache Spark, Spark Streaming est un système tolérant aux pannes et à haut débit. Il traite le flux de données en direct. Spark Streaming prend l’entrée de diverses sources d’entrées fiables comme Flume, HDFS et Kafka, etc. et envoie ensuite les données traitées aux systèmes de fichiers, à la base de données ou aux tableaux de bord en direct. Le flux de données d’entrée est divisé en lots de données, puis génère le flux final du résultat par lots.
Spark DStream (Discretized Stream) est l’abstraction de base de Spark Streaming. DStream est un flux continu de données. Il reçoit des entrées de diverses sources comme Kafka, Flume, Kinesis ou des sockets TCP. Il peut également être un flux de données généré en transformant le flux d’entrée. Au fond, DStream est un flux continu de RDD (abstraction de Spark). Chaque RDD dans DStream contient des données de l’intervalle certain.
Toute opération sur un DStream s’applique à tous les RDD sous-jacents. DStream couvre tous les détails. Il fournit au développeur une API de haut niveau pour plus de commodité. Par conséquent, Spark DStream facilite le travail avec des données en continu.
Spark Streaming offre des propriétés de tolérance aux pannes pour les DStreams comme celle pour les RDDs. tant qu’une copie des données d’entrée est disponible, il peut recalculer n’importe quel état à partir de celle-ci en utilisant la lignée des RDDs. Par défaut, Spark réplique les données sur deux nœuds. Par conséquent, Spark Streaming peut supporter les défaillances d’un seul travailleur.
Opache Spark DStream Operations
Comme RDD, Spark DStream supporte également deux types d’Opérations : Les Transformations et les Opérations de sortie-
i. Transformation
Il existe deux types de transformation dans DStream :
- Transformations sans état
- Transformations avec état
a. Transformations apatrides
Le traitement de chaque lot ne dépend pas des données des lots précédents. Les transformations apatrides sont de simples transformations de RDD. Elles s’appliquent sur chaque lot signifiant chaque RDD dans un DStream. Elles incluent les transformations RDD courantes comme map(), filter(), reduceByKey() etc.
Bien que ces fonctions semblent s’appliquer à l’ensemble du flux, chaque DStream est une collection de nombreux RDD (lots). Par conséquent, chaque transformation apatride s’applique à chaque RDD.
Les transformations apatrides sont capables de combiner les données de nombreux DStreams dans chaque pas de temps. Par exemple, les DStreams clé/valeur ont les mêmes transformations liées à la jointure que les RDDs- cogroup(), join(), leftOuterJoin() etc.
Nous pouvons utiliser ces opérations sur les DStreams pour effectuer des opérations RDD sous-jacentes sur chaque lot.
Si les transformations stateless sont insuffisantes, DStreams est livré avec un opérateur avancé appelé transform(). transform() permettent d’opérer sur les RDDs en leur sein. Le transform() permet à toute fonction RDD-to-RDD arbitraire d’agir sur le DStream. Cette fonction est appelée sur chaque lot de données dans le flux pour produire un nouveau flux.
b. Transformations Stateful
Elle utilise les données ou les résultats intermédiaires des lots précédents et calcule le résultat du lot actuel. Les transformations Stateful sont des opérations sur les DStreams qui suivent les données dans le temps. Ainsi, elle utilise certaines données des lots précédents pour générer les résultats d’un nouveau lot.
Les deux principaux types sont les opérations fenêtrées, qui agissent sur une fenêtre glissante de périodes de temps, et updateStateByKey(), qui est utilisé pour suivre l’état à travers les événements pour chaque clé (par exemple, pour construire un objet représentant chaque session utilisateur).
Suivez ce lien pour lire les transformations DStream en détail avec les exemples.
ii. Opération de sortie
Une fois que nous obtenons les données après transformation, sur ces données, l’opération de sortie est effectuée dans Spark Streaming. Après le débogage de notre programme, en utilisant l’opération de sortie, nous pouvons seulement sauvegarder notre sortie. Certaines des opérations de sortie sont print(), save(), etc. L’opération de sauvegarde prend le répertoire dans lequel enregistrer le fichier et un suffixe facultatif. L’opération print() prend dans les 10 premiers éléments de chaque lot du DStream et imprime le résultat.
Input DStreams and Receivers
Input DStream est un DStream représentant le flux de données d’entrée de la source de streaming. Récepteur (doc Scala, doc Java) objet associé à chaque objet DStream d’entrée. Il reçoit les données d’une source et les stocke dans la mémoire de Spark pour traitement.
Spark Streaming fournit deux catégories de sources de streaming intégrées :
- Sources de base – Il s’agit de Source qui est directement disponible dans l’API StreamingContext. Exemples : systèmes de fichiers, et connexions socket.
- Sources avancées – Ces sources sont disponibles par des classes utilitaires supplémentaires comme Kafka, Flume, Kinesis. Ainsi, nécessite une liaison contre des dépendances supplémentaires.
Par exemple :
- Kafka : l’artefact requis pour Kafka est spark-streaming-kafka-0-8_2.11.
- Flume : l’artefact requis pour Flume est dspark-streaming-flume_2.11.
- Kinesis : l’artefact requis pour Kinesis est spark-streaming-kinesis-asl_2.11.
Il crée de nombreuses entrées DStream pour recevoir plusieurs flux de données en parallèle. Il crée de multiples récepteurs qui reçoivent de nombreux flux de données. Spark worker/executor est une tâche qui s’exécute longtemps. Il occupe donc l’un des cœurs associés à l’application Spark Streaming. Donc, il est nécessaire que, l’application Spark Streaming ait suffisamment de cœurs pour traiter les données reçues.
Conclusion
En conclusion, tout comme RDD dans Spark, Spark Streaming fournit une abstraction de haut niveau connue sous le nom de DStream. DStream représente un flux continu de données. En interne, DStream est décrit comme une séquence de RDDs. Ainsi, comme RDD, nous pouvons obtenir DStream à partir de DStream d’entrée comme Kafka, Flume etc. De même, la transformation pourrait être appliquée sur le DStream existant pour obtenir un nouveau DStream.