Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Spark - Alexis Seigneurin - Français

Spark - Alexis Seigneurin - Français

Présentation sur Spark en Français

Alexis Seigneurin

January 21, 2015
Tweet

More Decks by Alexis Seigneurin

Other Decks in Technology

Transcript

  1. Spark • Traitement de larges volumes de données • Traitement

    distribué (commodity hardware) • Ecrit en Scala, binding Java
  2. 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
  3. Use cases • Analyse de logs • Traitement de fichiers

    texte • Analytics • Recherche distribuée (Google, avant) • Détection de fraude • Recommendation (articles, produits...)
  4. Proximité avec Hadoop • Mêmes use cases • Même modèle

    de développement : MapReduce • Intégration dans l'écosystème
  5. Plus simple qu’Hadoop • API plus simple à prendre en

    main • Modèle MapReduce "relâché" • Spark Shell : traitement interactif
  6. 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)
  7. • 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
  8. Sources • Fichier sur HDFS • Fichier local • Collection

    en mémoire • Amazon S3 • Base NoSQL • ... • Ou une implémentation custom de InputFormat
  9. 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
  10. 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>)
  11. • 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 ...
  12. 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 mapToPair map reduceByKey foreach 1 1 1 1 1 u m k 1 2 1 2 a ... ... ... ... filter ... ... sortByKey a m 2 1 2 1 u ... ... ... ... ... ... geom;... 1 k
  13. Spark - Exemple Acacia dealbata : 2 Acer acerifolius :

    39 Acer buergerianum : 14 Acer campestre : 452 ...
  14. Topologie & Terminologie • Un master / des workers ◦

    (+ un master en standby) • On soumet une application • Exécution pilotée par un driver
  15. Spark en cluster Plusieurs options • YARN • Mesos •

    Standalone ◦ Workers démarrés individuellement ◦ Workers démarrés par le master
  16. MapReduce • Spark (API) • Traitement distribué • Tolérant à

    la panne Stockage • HDFS, base NoSQL... • Stockage distribué • Tolérant à la panne Stockage & traitements
  17. Colocation données & traitement • “Data locality” • Traiter la

    donnée là où elle se trouve • Eviter les network I/Os
  18. 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)
  19. Démo $ $SPARK_HOME/sbin/start-master.sh $ $SPARK_HOME/bin/spark-class org.apache.spark.deploy.worker.Worker spark://MBP-de-Alexis: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
  20. • Exploitation d’un RDD en SQL • Moteur d’exécution SQL

    : convertit les requêtes en instructions de base Spark SQL
  21. Spark SQL Préalable : • Disposer de données tabulaires •

    Décrire le schéma → SchemaRDD Description de schéma : • Description programmatique des données • Inférence de schéma par réflexion (POJO)
  22. JavaRDD<Row> rdd = trees.map(fields -> Row.create( Float.parseFloat(fields[3]), fields[4])); • Création

    de données tabulaires (type Row) Spark SQL - Exemple --------------------------------------- | 10.0 | Aesculus hippocastanum | | 15.0 | Tilia platyphyllos | | 0.0 | Platanus x hispanica | | 10.0 | Paulownia tomentosa | | ... | ... |
  23. Spark SQL - Exemple List<StructField> fields = new ArrayList<StructField>(); fields.add(DataType.createStructField("hauteurenm",

    DataType.FloatType, false)); fields.add(DataType.createStructField("espece", DataType.StringType, false)); StructType schema = DataType.createStructType(fields); JavaSchemaRDD schemaRDD = sqlContext.applySchema(rdd, schema); schemaRDD.registerTempTable("tree"); --------------------------------------- | hauteurenm | espece | --------------------------------------- | 10.0 | Aesculus hippocastanum | | 15.0 | Tilia platyphyllos | | 0.0 | Platanus x hispanica | | 10.0 | Paulownia tomentosa | | ... | ... | • Description du schéma
  24. • Comptage d’arbres par espèce Spark SQL - Exemple sqlContext.sql("SELECT

    espece, COUNT(*) FROM tree WHERE espece <> '' GROUP BY espece ORDER BY espece") .foreach(row -> System.out.println(row.getString(0)+" : "+row.getLong(1))); Acacia dealbata : 2 Acer acerifolius : 39 Acer buergerianum : 14 Acer campestre : 452 ...
  25. Window operations • Fenêtre glissante • Réutilise des données d'autres

    fenêtres • Initialisé avec window length et slide interval
  26. Sources • Socket • Kafka • Flume • HDFS •

    MQ (ZeroMQ...) • Twitter • ... • Ou une implémentation custom de Receiver
  27. Démo de Spark Streaming • Consommation de Tweets #Android ◦

    Twitter4J • Détection de la langue du Tweet ◦ Language Detection • Indexation dans Elasticsearch • Analyse dans Kibana 4
  28. $ curl -X DELETE localhost:9200 $ curl -X PUT localhost: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 ElasticSearch Démo • Lancer Kibana -> http://localhost:5601 • Lancer le traitement