SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
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

Tendances

Spark Streaming
Spark StreamingSpark Streaming
Spark StreamingPALO IT
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & SparkAlexia Audevart
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielParis Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielModern Data Stack France
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreMICHRAFY MUSTAFA
 
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Modern Data Stack France
 
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à HadoopCasablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à HadoopBenoît de CHATEAUVIEUX
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5Amal Abid
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
Stats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.itStats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.ithibnico
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6Amal Abid
 
Annexe Big Data
Annexe Big DataAnnexe Big Data
Annexe Big DataAmal Abid
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsMICHRAFY MUSTAFA
 
Hadoop et son écosystème - v2
Hadoop et son écosystème - v2Hadoop et son écosystème - v2
Hadoop et son écosystème - v2Khanh Maudoux
 
Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystèmeKhanh Maudoux
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 

Tendances (20)

Spark Streaming
Spark StreamingSpark Streaming
Spark Streaming
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & Spark
 
Chapitre 4 no sql
Chapitre 4 no sqlChapitre 4 no sql
Chapitre 4 no sql
 
Tech day hadoop, Spark
Tech day hadoop, SparkTech day hadoop, Spark
Tech day hadoop, Spark
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielParis Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvre
 
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
 
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à HadoopCasablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
HADOOP + R
HADOOP + RHADOOP + R
HADOOP + R
 
Stats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.itStats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.it
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6
 
Annexe Big Data
Annexe Big DataAnnexe Big Data
Annexe Big Data
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & Actions
 
Hadoop et son écosystème - v2
Hadoop et son écosystème - v2Hadoop et son écosystème - v2
Hadoop et son écosystème - v2
 
Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystème
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 

En vedette

Heuritech: Apache Spark REX
Heuritech: Apache Spark REXHeuritech: Apache Spark REX
Heuritech: Apache Spark REXdidmarin
 
Spark + Cassandra = Real Time Analytics on Operational Data
Spark + Cassandra = Real Time Analytics on Operational DataSpark + Cassandra = Real Time Analytics on Operational Data
Spark + Cassandra = Real Time Analytics on Operational DataVictor Coustenoble
 
Spark - Alexis Seigneurin (English)
Spark - Alexis Seigneurin (English)Spark - Alexis Seigneurin (English)
Spark - Alexis Seigneurin (English)Alexis Seigneurin
 
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
Building Realtim Data Pipelines with Kafka Connect and Spark StreamingBuilding Realtim Data Pipelines with Kafka Connect and Spark Streaming
Building Realtim Data Pipelines with Kafka Connect and Spark StreamingGuozhang Wang
 
I Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache KafkaI Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache KafkaJay Kreps
 
Intro to Spark and Spark SQL
Intro to Spark and Spark SQLIntro to Spark and Spark SQL
Intro to Spark and Spark SQLjeykottalam
 

En vedette (7)

Heuritech: Apache Spark REX
Heuritech: Apache Spark REXHeuritech: Apache Spark REX
Heuritech: Apache Spark REX
 
Spark + Cassandra = Real Time Analytics on Operational Data
Spark + Cassandra = Real Time Analytics on Operational DataSpark + Cassandra = Real Time Analytics on Operational Data
Spark + Cassandra = Real Time Analytics on Operational Data
 
Spark - Alexis Seigneurin (English)
Spark - Alexis Seigneurin (English)Spark - Alexis Seigneurin (English)
Spark - Alexis Seigneurin (English)
 
0712_Seigneurin
0712_Seigneurin0712_Seigneurin
0712_Seigneurin
 
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
Building Realtim Data Pipelines with Kafka Connect and Spark StreamingBuilding Realtim Data Pipelines with Kafka Connect and Spark Streaming
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
 
I Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache KafkaI Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache Kafka
 
Intro to Spark and Spark SQL
Intro to Spark and Spark SQLIntro to Spark and Spark SQL
Intro to Spark and Spark SQL
 

Similaire à Spark - Ippevent 19-02-2015

Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataArrow Group
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.xDr Hajji Hicham
 
Hadoop Introduction in Paris
Hadoop Introduction in ParisHadoop Introduction in Paris
Hadoop Introduction in ParisTed Drake
 
Affichage d'un document Office sous Android
Affichage d'un document Office sous AndroidAffichage d'un document Office sous Android
Affichage d'un document Office sous AndroidStéphane Liétard
 
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdfCHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdfYounesOuladSayad1
 
Utiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingUtiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingDavid Morel
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big DataJournées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big DataDavid Joubert
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KJulien Anguenot
 
10 big data hadoop
10 big data hadoop10 big data hadoop
10 big data hadoopPatrick Bury
 
10 big data hadoop
10 big data hadoop10 big data hadoop
10 big data hadoopPatrick Bury
 
P8 03 presentation
P8 03 presentationP8 03 presentation
P8 03 presentationrajiasellami
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 

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

Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big Data
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.x
 
Hadoop Introduction in Paris
Hadoop Introduction in ParisHadoop Introduction in Paris
Hadoop Introduction in Paris
 
Affichage d'un document Office sous Android
Affichage d'un document Office sous AndroidAffichage d'un document Office sous Android
Affichage d'un document Office sous Android
 
L'avenir de LAMP
L'avenir de LAMPL'avenir de LAMP
L'avenir de LAMP
 
Introduction Apche Spark
Introduction Apche SparkIntroduction Apche Spark
Introduction Apche Spark
 
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdfCHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
 
Utiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingUtiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreaming
 
Spark
SparkSpark
Spark
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big DataJournées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
 
Elastic serach
Elastic serachElastic serach
Elastic serach
 
Big sql4meetup
Big sql4meetupBig sql4meetup
Big sql4meetup
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.K
 
10 big data hadoop
10 big data hadoop10 big data hadoop
10 big data hadoop
 
10 big data hadoop
10 big data hadoop10 big data hadoop
10 big data hadoop
 
P8 03 presentation
P8 03 presentationP8 03 presentation
P8 03 presentation
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 

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