Alexis Seigneurin
@aseigneurin @ippontech
1 / 37
Spark
Traitement large volumes de données
Traitement distribué (commodity hardware)
Ecrit en Scala, binding Java
2 / 37
Histoire
2009 : AMPLab de l'Université de Berkeley
Juin 2013 : "Top-level project" de la fondation
Apache
Mai 2014 : versi...
Usecases
Analyse de logs
Traitement de fichiers texte
Analytics
Recherche distribuée (Google, avant)
Détection de fraude
R...
ProximitéavecHadoop
Mêmes use cases
Même modèle de
développement : MapReduce
Intégration dans l'écosystème
5 / 37
Plussimplequ'Hadoop
API plus simple à prendre en main
Modèle MapReduce "relâché"
Spark Shell : traitement interactif
6 / 37
Plusrapidequ'Hadoop
Spark officially sets a new record in large-scale
sorting (5 novembre 2014)
Tri de 100 To de données
H...
EcosystèmeSpark
Spark
Spark Shell
Spark Streaming
Spark SQL
MLlib
GraphX
8 / 37
Intégration
Yarn, Zookeeper, Mesos
HDFS
Cassandra
Elasticsearch
MongoDB
9 / 37
Fonctionnement deSpark
10 / 37
RDD
Resilient Distributed Dataset
Abstraction, collection traitée en parallèle
Tolérant à la panne
Manipulation de tuples ...
Sources:
Fichier sur HDFS
Fichier local
Collection en mémoire
S3
Base NoSQL
...
Ou une implémentation custom de InputForma...
Transformations
Manipule un RDD, retourne un autre RDD
Lazy !
Exemples :
map() : une valeur → une valeur
mapToPair() : une...
Actionsfinales
Ne retournent pas un RDD
Exemples :
count() : compte les valeurs/tuples
saveAsHadoopFile() : sauve les résu...
Exemple
15 / 37
Word count
Découpage des fichiers par fragments de 128
Mo (framework)
Découpage des fragments par lignes
(framework)
Décou...
Shakespeare, Hamlet, acteIII, scène1
17 / 37
Spark - Exemple
sc.textFile("some/text/files/*")
.flatMap(line->Arrays.asList(line.split("W")))
.mapToPair(word->newTuple2...
Démo
Spark Shell
19 / 37
Démo deSpark Shell
$spark-shell
>varlines=sc.textFile(".../data/arbresalignementparis2010.csv")
>lines.count()
>vartrees=l...
Spark en Cluster
21 / 37
Topologie
Un master / des workers
(+ un master en standby)
Communication bidirectionnelle
On soumet une application
22 / 37
Spark en Cluster
Plusieurs options
YARN
Mesos
Standalone
Workers démarrés individuellement
Workers démarrés par le master
...
Stockage& traitements
MapReduce
Spark (API)
Traitement parallèle
Tolérant à la panne
Stockage
HDFS, base NoSQL...
Stockage...
Colocation données& traitement
Traiter la donnée là où elle se trouve
Eviter les network I/Os
25 / 37
Colocation données& traitement
26 / 37
Démo
Spark en Cluster
27 / 37
Démo
$$SPARK_HOME/sbin/start-master.sh
$$SPARK_HOME/bin/spark-class
org.apache.spark.deploy.worker.Worker
spark://MBP-de-A...
Spark Streaming
29 / 37
Micro-batches
Découpe un flux continu en batches
API identique
≠ Apache Storm
30 / 37
DStream
Discretized Streams
Séquence de RDDs
Initialisé avec une Duration
31 / 37
Window operations
Fenêtre glissante
Réutilise des données d'autres fenêtres
Initialisé avec window length et slide interva...
Sources
Socket
Kafka
Flume
HDFS
MQ (ZeroMQ...)
Twitter
...
Ou une implémentation custom de Receiver
33 / 37
Démo
Spark Streaming
34 / 37
Démo deSpark Streaming
Consommation de Tweets #Android
Twitter4J
Détection de la langue du Tweet
Language Detection
Indexa...
Démo
Lancer ElasticSearch
$curl-XDELETElocalhost:9200
$curl-XPUTlocalhost:9200/spark/_mapping/tweets'{
"tweets":{
"propert...
@aseigneurin - @ippontech
aseigneurin.github.io - blog.ippon.fr
37 / 37
Prochain SlideShare
Chargement dans…5
×

Spark, ou comment traiter des données à la vitesse de l'éclair

1 985 vues

Publié le

Spark fait partie de la nouvelle génération de frameworks de manipulation de données basés sur Hadoop. L’outil utilise agressivement la mémoire pour offrir des temps de traitement jusqu’à 100 fois plus rapides qu'Hadoop. Dans cette session, nous découvrirons les principes de traitement de données (notamment MapReduce) et les options mises à disposition pour monter un cluster (Zookeper, Mesos…). Nous ferons un point sur les différents modules proposés par le framework, et notamment sur Spark Streaming pour le traitement de données en flux continu.

Présentation jouée chez Ippon le 11 décembre 2014.

Publié dans : Données & analyses
0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 985
Sur SlideShare
0
Issues des intégrations
0
Intégrations
51
Actions
Partages
0
Téléchargements
100
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Spark, ou comment traiter des données à la vitesse de l'éclair

  1. 1. Alexis Seigneurin @aseigneurin @ippontech 1 / 37
  2. 2. Spark Traitement large volumes de données Traitement distribué (commodity hardware) Ecrit en Scala, binding Java 2 / 37
  3. 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.1.0 3 / 37
  4. 4. Usecases Analyse de logs Traitement de fichiers texte Analytics Recherche distribuée (Google, avant) Détection de fraude Recommendation (articles, produits...) 4 / 37
  5. 5. ProximitéavecHadoop Mêmes use cases Même modèle de développement : MapReduce Intégration dans l'écosystème 5 / 37
  6. 6. Plussimplequ'Hadoop API plus simple à prendre en main Modèle MapReduce "relâché" Spark Shell : traitement interactif 6 / 37
  7. 7. Plusrapidequ'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) 7 / 37
  8. 8. EcosystèmeSpark Spark Spark Shell Spark Streaming Spark SQL MLlib GraphX 8 / 37
  9. 9. Intégration Yarn, Zookeeper, Mesos HDFS Cassandra Elasticsearch MongoDB 9 / 37
  10. 10. Fonctionnement deSpark 10 / 37
  11. 11. RDD 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 11 / 37
  12. 12. Sources: Fichier sur HDFS Fichier local Collection en mémoire S3 Base NoSQL ... Ou une implémentation custom de InputFormat 12 / 37
  13. 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 13 / 37
  14. 14. Actionsfinales 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 >) 14 / 37
  15. 15. Exemple 15 / 37
  16. 16. Word count Découpage des fichiers par fragments de 128 Mo (framework) Découpage des fragments par lignes (framework) Découpage des lignes en mots (map) Comptage des mots (reduce) Sur chaque noeud Puis sur un noeud pour le résultat final 16 / 37
  17. 17. Shakespeare, Hamlet, acteIII, scène1 17 / 37
  18. 18. Spark - Exemple sc.textFile("some/text/files/*") .flatMap(line->Arrays.asList(line.split("W"))) .mapToPair(word->newTuple2<String,Integer>(word,1)) .reduceByKey((x,y)->x+y) .collect(); 18 / 37
  19. 19. Démo Spark Shell 19 / 37
  20. 20. Démo deSpark Shell $spark-shell >varlines=sc.textFile(".../data/arbresalignementparis2010.csv") >lines.count() >vartrees=lines.filter(s=>!s.startsWith("geom")) >vartreesSplit=trees.map(line=>line.split(";")) >varheights=treesSplit.map(fields=>fields(3).toFloat) >heights=heights.filter(h=>h>0) >heights.sum()/heights.count() 20 / 37
  21. 21. Spark en Cluster 21 / 37
  22. 22. Topologie Un master / des workers (+ un master en standby) Communication bidirectionnelle On soumet une application 22 / 37
  23. 23. Spark en Cluster Plusieurs options YARN Mesos Standalone Workers démarrés individuellement Workers démarrés par le master 23 / 37
  24. 24. Stockage& traitements MapReduce Spark (API) Traitement parallèle Tolérant à la panne Stockage HDFS, base NoSQL... Stockage distribué Tolérant à la panne 24 / 37
  25. 25. Colocation données& traitement Traiter la donnée là où elle se trouve Eviter les network I/Os 25 / 37
  26. 26. Colocation données& traitement 26 / 37
  27. 27. Démo Spark en Cluster 27 / 37
  28. 28. Démo $$SPARK_HOME/sbin/start-master.sh $$SPARK_HOME/bin/spark-class org.apache.spark.deploy.worker.Worker spark://MBP-de-Alexis:7077 --cores2--memory2G $mvncleanpackage $$SPARK_HOME/bin/spark-submit --masterspark://MBP-de-Alexis:7077 --classcom.seigneurin.spark.WikipediaMapReduceByKey --deploy-modecluster target/pres-spark-0.0.1-SNAPSHOT.jar 28 / 37
  29. 29. Spark Streaming 29 / 37
  30. 30. Micro-batches Découpe un flux continu en batches API identique ≠ Apache Storm 30 / 37
  31. 31. DStream Discretized Streams Séquence de RDDs Initialisé avec une Duration 31 / 37
  32. 32. Window operations Fenêtre glissante Réutilise des données d'autres fenêtres Initialisé avec window length et slide interval 32 / 37
  33. 33. Sources Socket Kafka Flume HDFS MQ (ZeroMQ...) Twitter ... Ou une implémentation custom de Receiver 33 / 37
  34. 34. Démo Spark Streaming 34 / 37
  35. 35. Démo deSpark Streaming Consommation de Tweets #Android Twitter4J Détection de la langue du Tweet Language Detection Indexation dans ElasticSearch Analyse dans Kibana 4 35 / 37
  36. 36. Démo Lancer ElasticSearch $curl-XDELETElocalhost:9200 $curl-XPUTlocalhost:9200/spark/_mapping/tweets'{ "tweets":{ "properties":{ "user":{"type":"string","index":"not_analyzed"}, "text":{"type":"string"}, "createdAt":{"type":"date","format":"date_time"}, "language":{"type":"string","index":"not_analyzed"} } } }' Lancer Kibana http://localhost:5601 Lancer le traitement 36 / 37
  37. 37. @aseigneurin - @ippontech aseigneurin.github.io - blog.ippon.fr 37 / 37

×