2.
Spark
● Traitement de larges volumes de données
● Traitement distribué (commodity hardware)
● Ecrit en Scala, bindings Java et Python
3.
Histoire
● 2009 : AMPLab de l'Université de Berkeley
● Juin 2013 : "Top-level project" de la
fondation Apache
● Mai 2014 : version 1.0.0
● Actuellement : version 1.2.0
4.
Use cases
● Analyse de logs
● Traitement de fichiers texte
● Analytics
● Recherche distribuée (Google, avant)
● Détection de fraude
● Recommendation (articles, produits...)
5.
Proximité avec Hadoop
● Mêmes use cases
● Même modèle de
développement :
MapReduce
● Intégration dans
l'écosystème
6.
Plus simple qu’Hadoop
● API plus simple à prendre en main
● Modèle MapReduce "relâché"
● Spark Shell : traitement interactif
7.
Plus rapide qu’Hadoop
Spark officially sets a new record in large-scale
sorting (5 novembre 2014)
● Tri de 100 To de données
● Hadoop MR : 72 minutes
○ Avec 2100 noeuds (50400 cores)
● Spark : 23 minutes
○ Avec 206 noeuds (6592 cores)
11.
● Resilient Distributed Dataset
● Abstraction, collection traitée en parallèle
● Tolérant à la panne
● Manipulation de tuples :
○ Clé - Valeur
○ Tuples indépendants les uns des autres
RDD
12.
Sources
● Fichier sur HDFS
● Fichier local
● Collection en mémoire
● Amazon S3
● Base NoSQL
● ...
● Ou une implémentation custom de
InputFormat
13.
Transformations
● Manipule un RDD, retourne un autre RDD
● Lazy !
● Exemples :
○ map() : une valeur → une valeur
○ mapToPair() : une valeur → un tuple
○ filter() : filtre les valeurs/tuples
○ groupByKey() : regroupe la valeurs par clés
○ reduceByKey() : aggrège les valeurs par clés
○ join(), cogroup()... : jointure entre deux RDD
14.
Actions finales
● Ne retournent pas un RDD
● Exemples :
○ count() : compte les valeurs/tuples
○ saveAsHadoopFile() : sauve les résultats au
format Hadoop
○ foreach() : exécute une fonction sur chaque
valeur/tuple
○ collect() : récupère les valeurs dans une liste
(List<T>)
16.
● Arbres de Paris : fichier CSV en Open Data
● Comptage d’arbres par espèce
Spark - Exemple
geom_x_y;circonfere;adresse;hauteurenm;espece;varieteouc;dateplanta
48.8648454814, 2.3094155344;140.0;COURS ALBERT 1ER;10.0;Aesculus hippocastanum;;
48.8782668139, 2.29806967519;100.0;PLACE DES TERNES;15.0;Tilia platyphyllos;;
48.889306184, 2.30400164126;38.0;BOULEVARD MALESHERBES;0.0;Platanus x hispanica;;
48.8599934405, 2.29504883623;65.0;QUAI BRANLY;10.0;Paulownia tomentosa;;1996-02-29
...
17.
Spark - Exemple
JavaSparkContext sc = new JavaSparkContext("local", "arbres");
sc.textFile("data/arbresalignementparis2010.csv")
.filter(line -> !line.startsWith("geom"))
.map(line -> line.split(";"))
.mapToPair(fields -> new Tuple2<String, Integer>(fields[4], 1))
.reduceByKey((x, y) -> x + y)
.sortByKey()
.foreach(t -> System.out.println(t._1 + " : " + t._2));
[... ; … ; …]
[... ; … ; …]
[... ; … ; …]
[... ; … ; …]
[... ; … ; …]
[... ; … ; …]
u
m
k
m
a
a
textFile mapToPairmap
reduceByKey
foreach
1
1
1
1
1
u
m
k
1
2
1
2a
...
...
...
...
filter
...
...
sortByKey
a
m
2
1
2
1u
...
...
...
...
...
...
geom;...
1 k
32.
● 4,6 Go de données
● Shell
○ 10 secondes
○ 460 Mo/seconde
● Spark 1.2.0
○ 1 worker avec 16 threads
○ 16 secondes
○ 287 Mo/seconde
Expérimentation
33.
● 6 machines sur Google Compute Engine
○ n1-highcpu-4 : 4 vCPU et 3,6 Go de mémoire
○ 1 master, 5 workers
● 230 Go de données sur HDFS
○ Fichiers agrégés (4,6 Go chacun)
● Respect de la data locality
○ Worker Spark = Datanode HDFS
Spark, ça scale vraiment ?
34.
● 4,6 Go : Shell plus rapide
● 46 Go : Spark plus rapide
● HDFS ~= disque local
● 230 Go + 5 workers ~= 46 Go + 1 worker
Durée de traitement
35.
● Spark : se maintient quand le volume augmente
● Spark : plus de workers = plus de débit
○ “Impossible” avec le Shell
Débit de traitement
36.
● Efficace sur données de taille moyenne
● Scalabilité horizontale efficace
● Stockage :
○ gros fichiers : OK sur HDFS
○ petits fichiers : Cassandra ?
Spark sur GCE - Conclusions
Il semblerait que vous ayez déjà ajouté cette diapositive à .
Créer un clipboard
Vous avez clippé votre première diapositive !
En clippant ainsi les diapos qui vous intéressent, vous pourrez les revoir plus tard. Personnalisez le nom d’un clipboard pour mettre de côté vos diapositives.
Créer un clipboard
Partager ce SlideShare
Vous avez les pubs en horreur?
Obtenez SlideShare sans publicité
Bénéficiez d'un accès à des millions de présentations, documents, e-books, de livres audio, de magazines et bien plus encore, sans la moindre publicité.
Offre spéciale pour les lecteurs de SlideShare
Juste pour vous: Essai GRATUIT de 60 jours dans la plus grande bibliothèque numérique du monde.
La famille SlideShare vient de s'agrandir. Profitez de l'accès à des millions de livres numériques, livres audio, magazines et bien plus encore sur Scribd.
Apparemment, vous utilisez un bloqueur de publicités qui est en cours d'exécution. En ajoutant SlideShare à la liste blanche de votre bloqueur de publicités, vous soutenez notre communauté de créateurs de contenu.
Vous détestez les publicités?
Nous avons mis à jour notre politique de confidentialité.
Nous avons mis à jour notre politique de confidentialité pour nous conformer à l'évolution des réglementations mondiales en matière de confidentialité et pour vous informer de la manière dont nous utilisons vos données de façon limitée.
Vous pouvez consulter les détails ci-dessous. En cliquant sur Accepter, vous acceptez la politique de confidentialité mise à jour.