• Machine virtuelle • Contient Cassandra + une appli à importer dans VirtualBox • Un repository Maven pour Java 8 (backup du votre avant!) • m2repo.(zip|tgz) à décompresser pour remplacer ~/.m2 • Un repo Ivy2 pour Scala (backup du votre avant!) • ivy2cache.(zip|tgz) à décompresser pour remplacer ~/.ivy2 • Un projet HomeSpotifiy-Scala/HomeSpotifiy-Java • À importer dans Eclipse ou IntelliJ IDEA
pas de Single Point Of Failure • Répartition par hash de la partition (clé primaire) • Hashage : Murmur3 • Données distribuées et répliquées n1 n2 n3 n4 n5 n6 n7 n8
INTO users(login, name, age) VALUES(‘jdoe’, ‘John DOE’, 33); UPDATE users SET age = 34 WHERE login = ‘jdoe’; DELETE age FROM users WHERE login = ‘jdoe’; SELECT age FROM users WHERE login = ‘jdoe’;
• Applique une fonction sur chaque élément mapToPair(x -> new Tuple2<T1,T2>(…,…)) • Applique une fonction, retourne un tuple filter(x -> true/false) • Sélectionne des éléments reduceByKey((x,y) -> …) • Combine les valeurs de tuples ayant les mêmes clés, 2 à 2
• Trie les éléments take(n) • Conserve n éléments foreach(x -> System.out.println(x)) • Itère sur les élements (pratique pour le debug) join(unAutreRDD) • Jointure entre deux RDD : • Sur les clés : nécessite des RDD de tuples clé/valeur • Valeur obtenue : tuple contenant la valeur de "gauche" et la valeur de "droite"
+ traitement distribués • Haute disponibilité des clusters • Multi data-centers • Permet des opérations "complexes" • JOIN, GROUP BY… • Traitements batch
DataStax, Open Source • https://github.com/datastax/spark-cassandra-connector • Utilisable en Java ou Scala • Lecture de données Cassandra → RDD Spark • Lecture d'une table entière ou requête CQL • RDD Spark → Écriture dans Cassandra
• En lecture • En écriture : répartition dans Spark avant écriture • Jointure: répartition dans Spark avant une jointure • Push predicates • Projections (select) • Restrictions (where) • Mapping de records en objets
sc: SparkContext = ... val cc = new CassandraSQLContext(sc) val rdd: SchemaRDD = cc.sql("SELECT * from keyspace.table WHERE ...") import org.apache.spark.sql.cassandra.CassandraSQLContext SparkContext sc = ... CassandraSQLContext cc = new CassandraSQLContext(sc) SchemaRDD rdd = cc.sql("SELECT * from keyspace.table WHERE ...") Scala Java
ou HomeSpotify-Java • À importer dans Eclipse ou IntelliJ IDEA • Contient les stubs des exercices • Branches • > git checkout <branch> • scala • scala_solution • java • java_solution