SlideShare une entreprise Scribd logo
Alexis Seigneurin
@aseigneurin @ippontech
Spark
● Traitement de larges volumes de données
● Traitement distribué (commodity hardware)
● Ecrit en Scala, bindings Java et Python
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
Use cases
● Analyse de logs
● Traitement de fichiers texte
● Analytics
● Recherche distribuée (Google, avant)
● Détection de fraude
● Recommendation (articles, produits...)
Proximité avec Hadoop
● Mêmes use cases
● Même modèle de
développement :
MapReduce
● Intégration dans
l'écosystème
Plus simple qu’Hadoop
● API plus simple à prendre en main
● Modèle MapReduce "relâché"
● Spark Shell : traitement interactif
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)
Écosystème Spark
● Spark
● Spark Shell
● Spark Streaming
● Spark SQL
● Spark ML
● GraphX
brownbaglunch.fr
Intégration
● Yarn, Zookeeper, Mesos
● HDFS
● Cassandra
● Elasticsearch
● MongoDB
Fonctionnement de Spark
● 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
Sources
● Fichier sur HDFS
● Fichier local
● Collection en mémoire
● Amazon S3
● Base NoSQL
● ...
● Ou une implémentation custom de
InputFormat
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
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>)
Exemple
● 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
...
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
Spark - Exemple
Acacia dealbata : 2
Acer acerifolius : 39
Acer buergerianum : 14
Acer campestre : 452
...
Spark en cluster
Topologie & Terminologie
● Un master / des workers
○ (+ un master en standby)
● On soumet une application
● Exécution pilotée par un driver
Spark en cluster
Plusieurs options
● YARN
● Mesos
● Standalone
○ Workers démarrés individuellement
○ Workers démarrés par le master
MapReduce
● Spark (API)
● Traitement distribué
● Tolérant à la panne
Stockage
● HDFS, base NoSQL...
● Stockage distribué
● Tolérant à la panne
Stockage & traitements
Colocation données & traitement
● “Data locality”
● Traiter la donnée là où elle se trouve
● Eviter les network I/Os
Colocation données & traitement
Spark
Worker
HDFS
Datanode
Spark
Worker
HDFS
Datanode
Spark
Worker
HDFS
Datanode
Spark Master
HDFS
Namenode
HDFS
Namenode
(Standby)
Spark
Master
(Standby)
Démo
Spark en cluster
Démo
$ $SPARK_HOME/sbin/start-master.sh
$ $SPARK_HOME/bin/spark-class
org.apache.spark.deploy.worker.Worker
spark://MacBook-Pro-de-Alexis.local:7077
--cores 2 --memory 2G
$ mvn clean package
$ $SPARK_HOME/bin/spark-submit
--master spark://MBP-de-Alexis:7077
--class com.seigneurin.spark.WikipediaMapReduceByKey
--deploy-mode cluster
target/pres-spark-0.0.1-SNAPSHOT.jar
Spark sur un cas pratique
[Event "BL 0809 Hamburger SK - TV Tegernsee"]
[Site "?"]
[Date "2008.10.04"]
[Round "1.3"]
[White "Sokolov, Andrei"]
[Black "Kempinski, Robert"]
[Result "1-0"]
[ECO "B85"]
[WhiteElo "2561"]
[BlackElo "2613"]
[PlyCount "101"]
[EventDate "2008.??.??"]
1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. f4 e6 7. Be2 Be7 8. O-O
O-O 9. Kh1 Qc7 10. a4 Nc6 11. Be3 Re8 12. Bf3 Rb8 13. g4 Nd7 14. g5 b6 15. Bg2
...
Statistiques de parties d’échecs
● Expérimentation de Tom Hayden sur
Hadoop
○ 1,75 Go de données
○ 7 machines c1.medium sur AWS
○ 26 minutes !
○ 1,14 Mo/seconde
Hadoop
● Command-line tools can be 235x faster than
your Hadoop cluster - Adam Drake
http://aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html
○ 3,46 Go de données
○ Shell : find, xargs, mawk
○ 12 secondes
○ 260 Mo/seconde
Hadoop vs Command line tools
$ find . -type f -name '*.pgn' -print0 | xargs -0 -n4 -P4 mawk '/Result/ { split($0, a,
"-"); res = substr(a[1], length(a[1]), 1); if (res == 1) white++; if (res == 0) black++;
if (res == 2) draw++ } END { print white+black+draw, white, black, draw }' | mawk
'{games += $1; white += $2; black += $3; draw += $4; } END { print games, white, black,
draw }'
package com.seigneurin.spark;
import org.apache.spark.api.java.JavaSparkContext;
public class Chess {
public static void main(String[] args) {
JavaSparkContext sc = new JavaSparkContext("local[16]", "chess");
long start = System.currentTimeMillis();
sc.textFile("ChessData-master/*/*.pgn")
.filter(line -> line.startsWith("[Result ") && line.contains("-"))
.map(res -> res.substring(res.indexOf(""") + 1, res.indexOf("-")))
.filter(res -> res.equals("0") || res.equals("1") || res.equals("1/2"))
.countByValue()
.entrySet()
.stream()
.forEach(s -> System.out.println(s.getKey() + " -> " + s.getValue()));
long duration = System.currentTimeMillis() - start;
System.out.println("Duration: " + duration + " ms");
sc.close();
}
}
Spark
● 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
● 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 ?
● 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
● Spark : se maintient quand le volume augmente
● Spark : plus de workers = plus de débit
○ “Impossible” avec le Shell
Débit de traitement
● Efficace sur données de taille moyenne
● Scalabilité horizontale efficace
● Stockage :
○ gros fichiers : OK sur HDFS
○ petits fichiers : Cassandra ?
Spark sur GCE - Conclusions
@aseigneurin
aseigneurin.github.io
@ippontech
blog.ippon.fr
brownbaglunch.fr

Contenu connexe

PDF
Introduction spark
PDF
Spark - Alexis Seigneurin (Français)
PPTX
spark_intro_1208
PDF
Spark (v1.3) - Présentation (Français)
PDF
Spark, ou comment traiter des données à la vitesse de l'éclair
PDF
Spark SQL principes et fonctions
PDF
Chapitre 3 spark
PDF
Spark dataframe
Introduction spark
Spark - Alexis Seigneurin (Français)
spark_intro_1208
Spark (v1.3) - Présentation (Français)
Spark, ou comment traiter des données à la vitesse de l'éclair
Spark SQL principes et fonctions
Chapitre 3 spark
Spark dataframe

Tendances (20)

PPTX
Spark Streaming
PDF
BigData_TP3 : Spark
PDF
Big Data, Hadoop & Spark
PDF
Chapitre 4 no sql
PDF
Tech day hadoop, Spark
PDF
Cours Big Data Chap4 - Spark
PPTX
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
PDF
Base de données graphe, Noe4j concepts et mise en oeuvre
PDF
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
PPTX
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
PDF
Cours Big Data Chap5
PPTX
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
PDF
HADOOP + R
PPTX
Stats web avec Hive chez Scoop.it
PDF
Cours Big Data Chap6
PDF
Annexe Big Data
PDF
Spark RDD : Transformations & Actions
PDF
Hadoop et son écosystème - v2
PPTX
Hadoop et son écosystème
PDF
Paris stormusergroup intrudocution
Spark Streaming
BigData_TP3 : Spark
Big Data, Hadoop & Spark
Chapitre 4 no sql
Tech day hadoop, Spark
Cours Big Data Chap4 - Spark
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Base de données graphe, Noe4j concepts et mise en oeuvre
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Cours Big Data Chap5
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
HADOOP + R
Stats web avec Hive chez Scoop.it
Cours Big Data Chap6
Annexe Big Data
Spark RDD : Transformations & Actions
Hadoop et son écosystème - v2
Hadoop et son écosystème
Paris stormusergroup intrudocution
Publicité

En vedette (7)

PDF
Heuritech: Apache Spark REX
PPTX
Spark + Cassandra = Real Time Analytics on Operational Data
PDF
Spark - Alexis Seigneurin (English)
PDF
0712_Seigneurin
PDF
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
PPTX
I Heart Log: Real-time Data and Apache Kafka
PDF
Intro to Spark and Spark SQL
Heuritech: Apache Spark REX
Spark + Cassandra = Real Time Analytics on Operational Data
Spark - Alexis Seigneurin (English)
0712_Seigneurin
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
I Heart Log: Real-time Data and Apache Kafka
Intro to Spark and Spark SQL
Publicité

Similaire à Spark - Ippevent 19-02-2015 (20)

PDF
Techday Arrow Group: Hadoop & le Big Data
DOCX
Résumkbjnnbuhb.jhyhuhuhhhhhhhhhhhhhhhhhhhhhhhé.docx
PDF
Distributed computing with Spark 2.x
PDF
Hadoop Introduction in Paris
PPTX
Affichage d'un document Office sous Android
KEY
L'avenir de LAMP
PDF
Introduction Apche Spark
PDF
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
PDF
Utiliser Hadoop en perl avec HadoopStreaming
PDF
PPTX
Présentation Javascript à l'ESI (Alger)
KEY
Hands on lab Elasticsearch
PDF
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
PPTX
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
PPTX
Elastic serach
PDF
Big sql4meetup
PDF
Architecture Big Data open source S.M.A.C.K
PPTX
10 big data hadoop
PPTX
10 big data hadoop
PDF
P8 03 presentation
Techday Arrow Group: Hadoop & le Big Data
Résumkbjnnbuhb.jhyhuhuhhhhhhhhhhhhhhhhhhhhhhhé.docx
Distributed computing with Spark 2.x
Hadoop Introduction in Paris
Affichage d'un document Office sous Android
L'avenir de LAMP
Introduction Apche Spark
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
Utiliser Hadoop en perl avec HadoopStreaming
Présentation Javascript à l'ESI (Alger)
Hands on lab Elasticsearch
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Elastic serach
Big sql4meetup
Architecture Big Data open source S.M.A.C.K
10 big data hadoop
10 big data hadoop
P8 03 presentation

Spark - Ippevent 19-02-2015

  • 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)
  • 8. Écosystème Spark ● Spark ● Spark Shell ● Spark Streaming ● Spark SQL ● Spark ML ● GraphX brownbaglunch.fr
  • 9. Intégration ● Yarn, Zookeeper, Mesos ● HDFS ● Cassandra ● Elasticsearch ● MongoDB
  • 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
  • 18. Spark - Exemple Acacia dealbata : 2 Acer acerifolius : 39 Acer buergerianum : 14 Acer campestre : 452 ...
  • 20. Topologie & Terminologie ● Un master / des workers ○ (+ un master en standby) ● On soumet une application ● Exécution pilotée par un driver
  • 21. Spark en cluster Plusieurs options ● YARN ● Mesos ● Standalone ○ Workers démarrés individuellement ○ Workers démarrés par le master
  • 22. MapReduce ● Spark (API) ● Traitement distribué ● Tolérant à la panne Stockage ● HDFS, base NoSQL... ● Stockage distribué ● Tolérant à la panne Stockage & traitements
  • 23. Colocation données & traitement ● “Data locality” ● Traiter la donnée là où elle se trouve ● Eviter les network I/Os
  • 24. Colocation données & traitement Spark Worker HDFS Datanode Spark Worker HDFS Datanode Spark Worker HDFS Datanode Spark Master HDFS Namenode HDFS Namenode (Standby) Spark Master (Standby)
  • 26. Démo $ $SPARK_HOME/sbin/start-master.sh $ $SPARK_HOME/bin/spark-class org.apache.spark.deploy.worker.Worker spark://MacBook-Pro-de-Alexis.local:7077 --cores 2 --memory 2G $ mvn clean package $ $SPARK_HOME/bin/spark-submit --master spark://MBP-de-Alexis:7077 --class com.seigneurin.spark.WikipediaMapReduceByKey --deploy-mode cluster target/pres-spark-0.0.1-SNAPSHOT.jar
  • 27. Spark sur un cas pratique
  • 28. [Event "BL 0809 Hamburger SK - TV Tegernsee"] [Site "?"] [Date "2008.10.04"] [Round "1.3"] [White "Sokolov, Andrei"] [Black "Kempinski, Robert"] [Result "1-0"] [ECO "B85"] [WhiteElo "2561"] [BlackElo "2613"] [PlyCount "101"] [EventDate "2008.??.??"] 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. f4 e6 7. Be2 Be7 8. O-O O-O 9. Kh1 Qc7 10. a4 Nc6 11. Be3 Re8 12. Bf3 Rb8 13. g4 Nd7 14. g5 b6 15. Bg2 ... Statistiques de parties d’échecs
  • 29. ● Expérimentation de Tom Hayden sur Hadoop ○ 1,75 Go de données ○ 7 machines c1.medium sur AWS ○ 26 minutes ! ○ 1,14 Mo/seconde Hadoop
  • 30. ● Command-line tools can be 235x faster than your Hadoop cluster - Adam Drake http://aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html ○ 3,46 Go de données ○ Shell : find, xargs, mawk ○ 12 secondes ○ 260 Mo/seconde Hadoop vs Command line tools $ find . -type f -name '*.pgn' -print0 | xargs -0 -n4 -P4 mawk '/Result/ { split($0, a, "-"); res = substr(a[1], length(a[1]), 1); if (res == 1) white++; if (res == 0) black++; if (res == 2) draw++ } END { print white+black+draw, white, black, draw }' | mawk '{games += $1; white += $2; black += $3; draw += $4; } END { print games, white, black, draw }'
  • 31. package com.seigneurin.spark; import org.apache.spark.api.java.JavaSparkContext; public class Chess { public static void main(String[] args) { JavaSparkContext sc = new JavaSparkContext("local[16]", "chess"); long start = System.currentTimeMillis(); sc.textFile("ChessData-master/*/*.pgn") .filter(line -> line.startsWith("[Result ") && line.contains("-")) .map(res -> res.substring(res.indexOf(""") + 1, res.indexOf("-"))) .filter(res -> res.equals("0") || res.equals("1") || res.equals("1/2")) .countByValue() .entrySet() .stream() .forEach(s -> System.out.println(s.getKey() + " -> " + s.getValue())); long duration = System.currentTimeMillis() - start; System.out.println("Duration: " + duration + " ms"); sc.close(); } } Spark
  • 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