Académique Documents
Professionnel Documents
Culture Documents
2
Qu'est-ce que Spark Streaming ?
• Fournit une API simple pour la mise en œuvre d'un algorithme complexe
• Peut absorber les flux de données en streaming de Kafka, Flume, ZeroMQ, ...
3
Motivation
• De nombreuses applications importantes doivent traiter de gros flux de données
en temps réel et fournir des résultats en temps quasi réel.
• Tendances des réseaux sociaux
• Statistiques du site
• Systèmes de détection d'intrusion
• ...
5
Exigences
6
Traitement de flux avec état
• Les systèmes de streaming traditionnels ont mutable state
un modèle de traitement enregistrement
par enregistrement basé sur les événements input
• Chaque nœud a l'état mutable records
• Pour chaque enregistrement, mise à jour et node 1
envoi de nouveaux enregistrements
node 3
input
• L'état est perdu si le nœud meurt ! records
node 2
• Faire du traitement de flux avec état
tolérant aux pannes est un défi
7
Systèmes de streaming existants
• Storm
• Enregistrement en boucle si non traité par un nœud
• Traite chaque enregistrement au moins une fois
• Peut mettre à jour l'état mutable deux fois !
• L'état mutable peut être perdu en cas d'échec !
8
Exigences
9
Traitement de flux discretisé
10
Traitement de flux discretisé
Spark
processed results
11
Exemple 1 - Récupérer les hashtags de Twitter
tweets DStream
12
Exemple 1 - Récupérer les hashtags de Twitter
new DStream transformation: modify data in one Dstream to create another DStream
tweets DStream
…
[#cat, #dog, … ] every batch
13
Exemple 1 - Récupérer les hashtags de Twitter
14
Exemple Java
Scala
val tweets = ssc.twitterStream(<Twitter username>, <Twitter password>)
val hashTags = tweets.flatMap (status => getTags(status))
hashTags.saveAsHadoopFiles("hdfs://...")
Java
JavaDStream<Status> tweets = ssc.twitterStream(<Twitter username>, <Twitter
password>)
JavaDstream<String> hashTags = tweets.flatMap(new Function<...> { })
hashTags.saveAsHadoopFiles("hdfs://...")
Function object to define the transformation
15
Tolérance aux fautes
flatMap
Les lots de données d'entrée sont répliqués
dans la mémoire de plusieurs nœuds « Worker »,
donc tolérants aux pannes hashTags
RDD lost partitions
recomputed on
Les données perdues en raison d'une
other workers
défaillance de l'opérateur, peuvent être
recalculées à partir des données d'entrée
16
Concepts clés
17
Exemple 2 - Compter les hashtags
hashTags
map map map
…
reduceByKey reduceByKey reduceByKey
tagCounts
[(#cat, 10), (#dog, 25), ... ]
18
Exemple 3 - Comptez les hashtags sur les
10 dernières minutes
val tweets = ssc.twitterStream(<Twitter username>, <Twitter password>)
val hashTags = tweets.flatMap (status => getTags(status))
val tagCounts = hashTags.window(Minutes(10), Seconds(1)).countByValue()
sliding window
window length sliding interval
operation
19
Exemple 3 - Comptez les hashtags sur les
10 dernières minutes
val tagCounts = hashTags.window(Minutes(10), Seconds(1)).countByValue()
sliding window
countByValue
tagCounts count over all
the data in the
window
20
CountByValue basé sur Smart window
21
Reduce base sur Smart window
• Implémenter le calcul :
hashTags.reduceByKeyAndWindow(_ + _, _ - _, Minutes(1), …)
22
Traitement avec état à tolérance de pannes
Toutes les données intermédiaires sont des RDD, donc peuvent être recalculées en
cas de perte
t-1 t t+1 t+2 t+3
hashTags
tagCounts
23
Traitement avec état à tolérance de pannes
• Les données à état ne sont pas perdues même si un nœud « Worker » meurt
• Ne change pas la valeur de votre résultat
24
Autres opérations
25
Performances
Peut traiter 6 Go / seconde (60M d’enregistrements / seconde) de données sur
100 nœuds à une latence inférieure à 1 seconde
- Testé avec 100 flux de données sur 100 instances EC2 avec 4 cœurs chacun
7 3.5
Grep WordCount
Cluster Thhroughput (GB/s)
26
Récupération Rapide des erreurs
27
Applications réelles : Conviva
4000000
vidéo 2500000
2000000
• Atteint 1-2 secondes de latence
1500000
• Des millions de sessions vidéo traitées
1000000
• Échelle linéaire avec la taille du cluster
500000
0
0 10 20 30 40 50 60 70
# Nodes in Cluster
28
Applications réelles : Mobile Millennium
Project
2000
29