Spark Streaming

34
Présentation Société Mars 2013 @ Paris Stanislas BOCQUET CEO +33(0)1 43 12 89 42 [email protected] SPARK STREAMING, LES DONNÉES QUI VOUS PARLENT EN TEMPS RÉEL 30 SEPTEMBRE 2015 @Paris Nadhem LAMTI Architecte Technique chez PALO IT Saâd-Eddine MALTI Expert BDD chez Voyages SNCF &

Transcript of Spark Streaming

Page 1: Spark Streaming

Présentation Société

Mars 2013 @ Paris

Stanislas BOCQUETCEO+33(0)1 43 12 89 [email protected]

SPARK STREAMING, LES DONNÉES QUI VOUS PARLENT EN TEMPS RÉEL 

30 SEPTEMBRE 2015 @Paris 

Nadhem LAMTIArchitecte Technique chez PALO ITSaâd-Eddine MALTIExpert BDD chez Voyages SNCF

&

Page 2: Spark Streaming

2

Au programme

Streaming et Architecture Big Data

Introduction to Spark Streaming : Word Count

Intégration de Flume à Spark Streaming

Use case « logs applicatifs »

Architecture générale : driver / workers / receivers

Monitoring

Fail over : reliable / unreliable sources, checkpoint, recoverTuning et performance

Page 3: Spark Streaming

Streaming et architecture

BigData

Page 4: Spark Streaming

4

RAPPELS

Juin 2015

HDFS : système de fichiers distribués

MAPREDUCE : traitement distribué

PIG HIVESCRIPTING SEQUENTIEL

SQL LIKE

JAVAPlumbing

• In Memory• RDD• Scala/Java/

Python

Page 5: Spark Streaming

5

ARCHITECTURE BIG DATA

Plus familièrement : architecture LAMBDASTOCKENT : en vue d’un REPORTING mensuel par exEt TRAITENT en temps réel la donnée : en vue d’un MONITORING par ex

Savent gérer la donnée à la fois comme :

UN STOCKUN FLUX

Cas d’utilisation :Systèmes de recommandationsStatistiques en temps réel : ex taux d’erreurPub en ligne : nombre de clics/transformations par campagne

Page 6: Spark Streaming

6

ARCHITECTURE BIG DATA

Batch LAYER Stocker l’ensemble de donnéesItération pouvant prendre plusieurs heures

Speed LAYER : « temps réel »Traite que les données récentes et compense la latence élevée de la couche BatchCalculées de manière incrémentale en s’appuyant sur des systèmes de traitement de flux et des bases de données en lectures/écritures aléatoires.

Serving LAYER:Charger et Exposer les vues des couches batch et temps réel

Page 7: Spark Streaming

7

SPARK STREAMING

Page 8: Spark Streaming

88

SPARK STREAMING

Etend l’API de Spark Core

Scalable, haut débit, tolérance au panne

Traitement au fil de l’eau des données temps réelles

Page 9: Spark Streaming

99

SPARK STREAMING

Plusieurs sources possibles

Processing utilisant des algorithmes complexes mais des APIs simples : map, reduce, join, window, …

Les données traitées peuvent être poussées vers des systèmes de stockage, Dashboards, …

Haut niveau d’abstraction : Discritized Stream (DStream) Séquence de RDDs

Page 10: Spark Streaming

1010

WORD COUNT

Page 11: Spark Streaming

1111

WORD COUNT

Page 12: Spark Streaming

12

Intégration avec Flume

Page 13: Spark Streaming

1313

DATASOURCE FLUME

Système distribué, fiable, à haute disponibilité Solution de collecte et d’agrégation de gros volumes données depuis plusieurs sources Pusher vers un entrepôt de données centralisé (HDFS, ELS …)AgentsSource, Channel, Sink

Page 14: Spark Streaming

1414

DATASOURCE FLUME

Configuration Type

Page 15: Spark Streaming

1515

DATASOURCE FLUME

Spark Streaming + Flume Integration Guide

Approche 1 : Push-based approach :Spark Streaming, essentiellement, initialise un “receiver” agissant comme un agent Avro pour Flume, dans lequel ce dernier peut pousser ses donnéesConfiguration de Flume :

Linking : Package spark-streaming-flume_2.10Programming :

Page 16: Spark Streaming

1616

DATASOURCE FLUME

Spark Streaming + Flume Integration Guide

Approche 2 : Pull-based approach :Flume pousse les données dans le sink, et ces dernières restent en mémoire tampon.Spark Streaming utilize un reliable Flume receiver de manière transactionnelle pour récupérer les données du sink. Une transaction est considérée OK seulement après acquittement et replication de la donnée par Spark StreamingConfiguration Flume :

Sink Jars : spark-streaming-flume-sink_2.10, scala-library Config file Linking : Package spark-streaming-flume_2.10Programming :

Page 17: Spark Streaming

17

DEMO : USE CASE LOG APPLICATIF

Page 18: Spark Streaming

1818

DEMO : USE CASE LOG APPLICATIF

Operations :Transformations : lazy

Stateless : map, reduce, filter, join, combineByKeyStateful : utilise les données et les résultat du batch précédent. Nécessite un checkpoint.

» window / silde :exemple : reduceByKeyAndWindow

» Statut à travers le temps : updateByState

Actions : output des operations. Sert pour évaluer le contenu d’un Dstream et démarrer un contexteexemple : myDStream.saveAsTextFiles(“mydir”,”.txt”)foreachRDD() : generic output operation

Page 19: Spark Streaming

1919

DEMO : USE CASE LOG APPLICATIF

Déploiement Inclure les dépendances Spark et celles des sources Générer un package avec Maven Assembly

Exécution./bin/spark-submit -- class … -- master …-- jars [jar_1,jar_2,…,jar_n]-- conf p1=v1….<app-jar>[app-arguments]

ConfigurationSparkConf.set(“p1”,”v1”)Dynamique :-- conf p1=v1-- conf p2=v2

Config Chargée depuis conf/spark-defaults.conf : Les propriétés peuvent être consultées depuis la webUI(http://<driver>:4040) # TAB “Environment”

Page 20: Spark Streaming

ARCHITECTURE

Page 21: Spark Streaming

21

ARCHITECTURE

Cluster Manager : Standalone, MESOS, YARN et local( dev/test/debug)

WorkerNode : Receives + Processes

Driver : programme principale contenant « sparkContext »

Page 22: Spark Streaming

22

MONITORING

webUI : http://<driver>:4040Streaming \ tab

Running Receivers : ActiveNumber of records receivedReceiver error

Batches : Processing TimeTimesQueing delays

Environment \tab …

Page 23: Spark Streaming

TOLERANCE AUX PANNES

Page 24: Spark Streaming

24

TOLERANCE AUX PANNES

3 étapes pour traiter les données

Recevoir les données

Traiter/transformer les données

Pusher les données vers l’éxterieur

Page 25: Spark Streaming

25

TOLERANCE AUX PANNES

Réception des données :

Reliable : acquittement après avoir s’assurer que la donnée reçue est répliquée : cas de « PollingFlume »Unreliable : à partir de « Spark 1.2 », « WriteAheadLog » (spark.streaming.receiver.writeAheadLog.enabled -> true)

Attention aux performances : utiliser plus qu’un Receiver en // et désactiver la réplication

Page 26: Spark Streaming

26

TOLERANCE AUX PANNES

Traiter/Transformer les données :

CHECKPOINT : Sauvegarder le statut périodiquement dans un système de fichier fiable :

Data : RDD intermédiaires sur les opération de transformation Statefull

Metadata : Recover from Driver :

Utiliser “getOrCreate” : recréer sparkStreamingContext depuis checkpoint Data dans le répertoire checkpoint

-- supervise : redémarrage en cas d’échec du Driver (seulement on standalone mode)

-- deploy-mode cluster : lancer sur un cluster distant

Page 27: Spark Streaming

27

TOLERANCE AUX PANNES

Push des données vers l’éxterieur:

Mise à jour transactionnelle

Doit avoir un identifiant de transaction

Du moment ou ça concerne un système externe, c’est de la responsabilité du système d’assurer la cohérence des données

Page 28: Spark Streaming

28

TOLERANCE AUX PANNESMode Normal

Page 29: Spark Streaming

29

TOLERANCE AUX PANNESMode « Recover »

Page 30: Spark Streaming

Tunning et performance

Page 31: Spark Streaming

31

Tunning et performance

Important : Le temps totale d’exécution d’un batch (scheduling delay + processing time) < batchIntervalSuivi via Spark UI Monitoring

Data Receiving :Setter le bon « BatchInterval » : tester la limite en jouant sur le débitAugmenter le nombre de Receivers :

Attention : un « Receiver » = un « Worker » ou un « Core » Merge des Dstream de chaque receiver

Alternative au multiple Dstream : « inputStream.repartition () » distribue les données reçues sur des machines du « Cluster » avant « processing »« spark.streaming.backpressure.enabled » : gestion dynamique de la conf « spark.streaming.receiver.maxRate »

Page 32: Spark Streaming

32

Tunning et performance

Data Processing :Niveau du parallélisme

Spark.core.max - nbr consommateurs Ajouter la conf « spark.default.parallelism » selon le type du cluster Manager Réduire le nombre de partitions pour réduire le temps de Processing :

Chaque block de données généré par le « Receiver » produit une partition « spark.streaming.blockInterval » : les données reçu se transforment en un block de données Partitions = « consumers » * « bactchInterval » / « blockInterval » « spark.streaming.blockInterval » nbr Partitions mais « batchInterval » mod

« blockInterval » = 0 Recommandé par Spark : nb Partition = 2x-3x nombre de « Cores » disponibles « spark.streaming.blockInterval » = « consumers » * « bactchInterval » / 2 ou 3 * « nb

Cores »Eviter les log de parcours des « Dstream » logs mode verbeux et silencieuxKryo pour une sérialisation plus efficace : « spark.serializer org.apache.spark.serializer.KryoSerializer »

Page 33: Spark Streaming

33

Tunning et performance

Setting the right batch interval : >=500 msTraite la donnée dès sa réception

Memory tuning and GC behavior :Taille de la Window

Mémoire requise de la taille de donnée dans chaque “executor” Set spark.default.parallelism

Large pause causée par JVM GC non désirable : Utiliser plus d’éxécuteurs avec une taille mémoire plus petite

CMS GC : diminuer les pauses In Driver : --driver-java-options In Executor : spark.executor.extraJavaOptions

Contrôler l’éviction des données si pas besoin Peut se faire explicitement pour les vieilles données au delà de “spark.cleaner.ttl” (peut

réduire la pression de l’activité GC)

Page 34: Spark Streaming

Présentation Société

Mars 2013 @ Paris

Stanislas BOCQUETCEO+33(0)1 43 12 89 [email protected]

MERCI DE VOTRE

ATTENTION !