Sommaire

Spark streaming

Spark streaming (Spark streaming programming guide) est une extension de la librairie principale de Spark, qui permet de traiter des flux continus de données. Elle est tolérante aux erreurs et permet de réaliser des algorithmes complexes grâce à des fonctions de haut niveau comme map, reduce, join, window. Finalement, les données traitées peuvent être sauvegardées sur différents systèmes de fichiers, dans des bases de données ou dans des tableaux de bord interactifs. Vous pouvez également appliquer des algorithmes Spark de Machine Learning ou de traitement de graphes sur les flux de données.

streaming-arch

Spark Streaming reçoit les flux de données et les divise en paquets qui sont traités par le Spark Engine pour générer le résultat sous forme de paquets.

streaming-flow

La librairie fournit des objets appelés DStream, pour Discretized Stream, qui représente un flux continu de données. Les DStream peuvent soit être créés par des flux de données entrants (HDFS), soit par des sources provenant de Kafka, Flume ou Kinesis, ou encore par des opérations sur des DStreams. En interne, un DStream est représenté par une séquence de RDDs.


wordcount en streaming

Dans le Namenode, créez un nouveau sous-répertoire et déplacez-vous dedans :

cd pyspark
mkdir sparkstreaming
cd sparkstreaming

Depuis le second Terminal, copiez le fichier SparkStreaming_wc.py du répertoire TP_BigData_ECL/TP_Spark/scripts dans le Namenode :

docker cp SparkStreaming_wc.py hadoop-master:/root/pyspark/sparkstreaming

Ouvrez un troisième Terminal, et entrez dans le Namenode

docker exec -it hadoop-master bash

Lancer les daemons Hadoop :

./start-hadoop.sh

Ainsi, si vous suivez bien, les Terminaux 1 et 3 pointent tous deux sur le Namenode. Dans ce troisième Terminal, lancez le serveur de données netcat sur le port 9999 de la manière suivante :

nc -l -p 9999

Dans le premier Terminal, lancez

spark-submit --deploy-mode client --master local[2] SparkStreaming_wc.py localhost 9999

Disposez les fenêtres des Terminaux 1 et 3 côte à côte sur votre écran. Sur le Terminal 3, tapez des mots rapidement, vous devriez voir le comptage de mot apparaître sur le Terminal 1, chaque seconde.

Remarques : pour entrer un série de mots d’un coup sur le Terminal 3, vous pouvez soit

  • écrire une ligne de mots séparés par des espaces dans le Terminal 3. Envoyez alors la ligne d’un coup, en appuyant sur la touche entrée de votre clavier.
  • copier en mémoire une ligne d’un texte quelconque, et la coller dans le Terminal 3.

Les paquets de données correspondent à une durée d’une seconde. Pour allonger le temps associé aux paquets de données, il suffit de modifier la ligne ssc = StreamingContext(sc, 1), en remplaçant la valeur 1 par la valeur souhaitée en secondes.