Introduction à!
Nantes - 08/07/2014!
Ludwine Probst - @nivdul
développeuse!
maths lover!
machine learning & big data
Leadeuse de Duchess France
@nivdulnivdul.wordpress.com
Etat des lieux
Mais…
• analytics pour de gros datasets et données en
mémoire!
• Resilient Distributed Datasets (RDD)!
• principe de lineage!
• compatible avec Hadoop / InputFormats!
• meilleures performances que Hadoop!
• plus de flexibilité d’implémentation
Interrogation de Spark
shell scala/python!
supporte les lambdas
expressions (Java8)
compatible avec
NumPy
Vue globale
todo schéma
SparkContext
SparkConf sparkConf = new SparkConf()
.setAppName("SimpleExample")
.setMaster("local");
!
//.setMaster(« spark://192.168.1.11:7077")
!
!
JavaSparkContext sc = new JavaSparkContext(sparkConf);
Resilient Distributed Datasets
(RDD)
• créé au démarrage!
• traitement en parallèle possible / partitionnement sur les différents
noeuds du cluster!
• opérations sur les RDDs = transformations + actions!
• contrôle sur la persistance : MEMORY, DISK…!
• resistance à la panne (principe de lineage avec le DAG)
Définition : collections distribuées fault-tolerant et
! immutable
Créer un RDD
// sc est le SparkContext
!
// à partir d’un fichier texte
JavaRDD<String[]> lines = sc.textFile("ensemble-des-equipements-
sportifs-de-lile-de-france.csv");
!
// à partir d’un fichier venant d’Hadoop
sc.hadoopFile(path, inputFormatClass, keyClass, valueClass);
!
Opérations sur les RDDs
JavaRDD<String[]> lines = sc.textFile("ensemble-des-equipements-
sportifs-de-lile-de-france.csv")
.map(line -> line.split(";"))
// suppression de la 1ère ligne
.filter(line -> !line[1].equals("ins_com"));
!
lines.count();
!
// nombre par type d'équipement rangé par ordre alphabétique
lines.mapToPair(line -> new Tuple2<>(line[3], 1))
.reduceByKey((x, y) -> x + y)
.sortByKey()
.foreach(t -> System.out.println(t._1 + " -> " + t._2));
!
Persistance des RDDs
// lines est un RDD
!
// persistance par défaut MEMORY_ONLY
lines.cache();
!
// spécifié
lines.persist(StorageLevel.DISK_ONLY());
lines.persist(StorageLevel.MEMORY_ONLY());
lines.persist(StorageLevel.MEMORY_AND_DISK());
!
// avec réplication
lines.persist(StorageLevel.apply(1, 3));
*Spark est fault-tolerant grâce au graphe d’exécution qui
enregistre la suite des opérations effectuées sur un RDD
Côté performances
Ecosystème Spark
Streaming
Introduction spark

Introduction spark

  • 1.
    Introduction à! Nantes -08/07/2014! Ludwine Probst - @nivdul
  • 2.
    développeuse! maths lover! machine learning& big data Leadeuse de Duchess France @nivdulnivdul.wordpress.com
  • 3.
  • 4.
  • 6.
    • analytics pourde gros datasets et données en mémoire! • Resilient Distributed Datasets (RDD)! • principe de lineage! • compatible avec Hadoop / InputFormats! • meilleures performances que Hadoop! • plus de flexibilité d’implémentation
  • 7.
    Interrogation de Spark shellscala/python! supporte les lambdas expressions (Java8) compatible avec NumPy
  • 8.
  • 9.
    SparkContext SparkConf sparkConf =new SparkConf() .setAppName("SimpleExample") .setMaster("local"); ! //.setMaster(« spark://192.168.1.11:7077") ! ! JavaSparkContext sc = new JavaSparkContext(sparkConf);
  • 10.
    Resilient Distributed Datasets (RDD) •créé au démarrage! • traitement en parallèle possible / partitionnement sur les différents noeuds du cluster! • opérations sur les RDDs = transformations + actions! • contrôle sur la persistance : MEMORY, DISK…! • resistance à la panne (principe de lineage avec le DAG) Définition : collections distribuées fault-tolerant et ! immutable
  • 11.
    Créer un RDD //sc est le SparkContext ! // à partir d’un fichier texte JavaRDD<String[]> lines = sc.textFile("ensemble-des-equipements- sportifs-de-lile-de-france.csv"); ! // à partir d’un fichier venant d’Hadoop sc.hadoopFile(path, inputFormatClass, keyClass, valueClass); !
  • 12.
    Opérations sur lesRDDs JavaRDD<String[]> lines = sc.textFile("ensemble-des-equipements- sportifs-de-lile-de-france.csv") .map(line -> line.split(";")) // suppression de la 1ère ligne .filter(line -> !line[1].equals("ins_com")); ! lines.count(); ! // nombre par type d'équipement rangé par ordre alphabétique lines.mapToPair(line -> new Tuple2<>(line[3], 1)) .reduceByKey((x, y) -> x + y) .sortByKey() .foreach(t -> System.out.println(t._1 + " -> " + t._2)); !
  • 13.
    Persistance des RDDs //lines est un RDD ! // persistance par défaut MEMORY_ONLY lines.cache(); ! // spécifié lines.persist(StorageLevel.DISK_ONLY()); lines.persist(StorageLevel.MEMORY_ONLY()); lines.persist(StorageLevel.MEMORY_AND_DISK()); ! // avec réplication lines.persist(StorageLevel.apply(1, 3)); *Spark est fault-tolerant grâce au graphe d’exécution qui enregistre la suite des opérations effectuées sur un RDD
  • 14.
  • 15.