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.
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.
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.