M2 GL UE DOC «In memory analytics» Alexandre Termier 2014/2015
Sources Travaux Amplab, U.C. Berkeley Slides Ion Stoica Présentations Databricks Slides Pat McDonough Articles de M. Zaharia et al. sur les RDD et Spark
Introduction «Data is the new oil» Monétiser les données : Google, Facebook, Twitter Grande distribution Opérateurs de télécommunications Nouveaux services Bitly (2008) Moniteurs Fitbit (2011). Améliorer la QoS Analyse de logs (ex: attaques réseaux) Analyses de traces d exécution
Méthodes pour analyser de grosses données BD relationnelles -> taille (très) limitée Entrepôts de données -> prix élevé, taille limitée Cluster Hadoop -> prix abordable, taille importante Données = fichiers HDFS / tables Hbase Requêtes = Code Map/Reduce PIG -> compilé en Map/Reduce Hive -> compilé en Map/Reduce
Limitations de Map/Reduce Difficulté d écriture du code Modèle contraint Une phase de Map puis une phase de Reduce Parfois, besoin de faire plusieurs phases Map/Reduce Algorithmes complexes Algorithmes itératifs (PageRank, K-Means) Transfert de données entre ces phases : stockage sur disque (HDFS)
Problème Analyse de données : Successions de traitements (filtrages, transformations) Algos de machine learning / data mining : itératifs Ex: k-means Buts Réponses interactives sur données historiques Analyse de flux en temps réel Analyses complexes de données massives http://www.iterativemapreduce.org/samples.html
Premières solutions Cascading Workflows complexes en MapReduce Limites : Facilite le codage, mais n accélère pas les traitements! Le runtime est toujours basé sur Map/Reduce Haloop Modif de MapReduce pour gérer les calculs itératifs Utilise des mécanismes de cache pour accélérer les calculs Limites Il faut changer Hadoop!
Nouveau moteur d exécution distribué Logistic regression Exécution des calculs en mémoire ou sur disque Suites de transformations complexes Itérations Applications interactives Peut exploiter les infrastructures Hadoop avec YARN Données dans HDFS, Hbase,
Spark : une popularité grandissante http://radar.oreilly.com/2014/06/a-growing-number-of-applications-are-being-built-with-spark.html
Au cœur de Spark : les RDDs RDD = Resilient Distributed Dataset Collections distribuées d objets en lecture seule Stockés en mémoire ou sur le disque Collections construites par des transformations parallèles Reconstruction en cas de panne
Premier exemple Rouge : opération sur les RDD Noir : code Scala classique Vert : résultat scala> val lesmiserables = sc.textfile("data/*.txt") lesmiserables: org.apache.spark.rdd.rdd[string] = data/*.txt MappedRDD[5] at textfile at <console>:12 scala> lesmiserables.take(5).foreach(println) The Project Gutenberg EBook of Les misérables Tome I, by Victor Hugo This ebook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included scala> lesmiserables.count() res1: Long = 52711
scala> val linesvaljean = lesmiserables.filter(x => x.contains("valjean")) linesvaljean: org.apache.spark.rdd.rdd[string] = FilteredRDD[6] at filter at <console>:14 scala> linesvaljean.cache() res2: linesvaljean.type = FilteredRDD[2] at filter at <console>:14 scala> linesvaljean.count() res3: Long = 911 scala> linesvaljean.take(10).foreach(println) Chapitre VI Jean Valjean nom? Vous vous appelez Jean Valjean. Maintenant voulez-vous que je vous --Voici. Je m'appelle Jean Valjean. Je suis un galérien. J'ai passé qu'on a mis sur le passeport: «Jean Valjean, forçat libéré, natif «--Monsieur Jean Valjean, c'est à Pontarlier que vous allez? Pontarlier, où vous allez, monsieur Valjean, une industrie toute homme, qui s'appelle Jean Valjean, n'avait que trop sa misère présente à que tous les soirs, et il a soupé avec ce Jean Valjean du même air et de Jean Valjean Vers le milieu de la nuit, Jean Valjean se réveilla. Rouge : opération sur les RDD Noir : code Scala classique Vert : résultat
Spark UI
Opérations sur les RDD Transformations RDD -> RDD transformé Suite des transformations loggée «lignée» (lineage en anglais) Exécution paresseuse et parallèle Quelques transformations map reduce filter groupby join sort Actions Exécution d un calcul Stockage extene Quelques actions count take first save fold sample
RDD lineage (lignée en français) Un RDD enregistre toutes les transformations nécessaires pour le construire Reconstruction efficace en cas de panne val lesmiserables = sc.textfile("data/*.txt") val linesvaljean = lesmiserables.filter(x => x.contains("valjean")).textfile( ).filter( ) Fichier MappedRDD FilteredRDD
Partitions et dépendances partitions RDD RDD divisé en partitions Contrôle sur le partitionnement Dépendances différentes en fonction des transformations Narrow Wide Impact sur les performances en cas de panne Figure : Matei Zaharia, PhD dissertation
Persistance Contrôle sur la persistance : Mémoire seulement, objets désérialisés (défaut) Stocke RDD en mémoire, partitions qui ne tiennent pas sont recalculées à la volée Mémoire seulement, objets sérialisés Stocke RDD en mémoire en sérialisant : prend moins de place, coûte plus de CPU Mémoire et disque, objets désérialisés Stocke RDD en mémoire, partitions qui ne tiennent pas sauvées sur disque Mémoire et disque, objets sérialisés Disque seulement
scala> val wc = lesmiserables.flatmap(_.split(" ")).map((_,1)).reducebykey(_+_) wc: org.apache.spark.rdd.rdd[(string, Int)] = ShuffledRDD[5] at reducebykey at <console>:14 scala> wc.take(5).foreach(println) (créanciers;,1) (abondent.,1) (plaisir,,5) (déplaçaient,1) (sociale,,7) scala> val cw = wc.map(p => (p._2, p._1)) Wordcount en Spark cw: org.apache.spark.rdd.rdd[(int, String)] = MappedRDD[5] at map at <console>:16 scala> val sortedcw = cw.sortbykey(false) sortedcw: org.apache.spark.rdd.rdd[(int, String)] = ShuffledRDD[11] at sortbykey at <console>:18 scala> sortedcw.take(5).foreach(println) (16757,de) (14683,) (11025,la) (9794,et) (8471,le) scala> sortedcw.filter(x => "Cosette".equals(x._2)).collect.foreach(println) (353,Cosette)
Performances, code itératif Figure : Matei Zaharia, PhD dissertation
Performance en cas de panne (k-means) Figure : Matei Zaharia, PhD dissertation
Performance w.r.t. utilisation mémoire Régression logistique, 100 GB données, 25 machines Figure : Matei Zaharia, PhD dissertation
Performances, requêtes interactives Utilisation de 100 machines Figure : Matei Zaharia, PhD dissertation
Berkley Data Analytics Stack (BDAS) https://amplab.cs.berkeley.edu/software/
Ecosystème BDAS Au dessus de Spark Shark -> Spark SQL https://spark.apache.org/sql/ Spark Streaming https://spark.apache.org/streaming/ GraphX https://spark.apache.org/graphx/ MLib https://spark.apache.org/mllib/
Autre approche : SAP Hana Spark : nécessite un cluster Pas accessible à tout le monde TCO (Total Cost of Ownership) assez important SAP Hana : base de donnée + analytics en mémoire sur une (grosse) machine Idée : dans 10 ans, n importe quelle machine aura > 1 TO de RAM
Promesses des «in-memory analytics» Accès beaucoup plus rapides aux données Intégration et traitement très rapide des données produites en temps réel Résultats à des requêtes complexes en quelques secondes => Améliorer la rapidité de réaction, décisions rapides
Exemples (source : Intel + SAP) Yodobashi Calcul de points de fidélités pour 5 millions de clients Avant : 1 fois par mois, 3 jours de calcul Maintenant : 2 secondes de calcul -> offres dynamiques basées sur points + inventaires T-Mobile Rapports sur 2 milliards d enregistrements de clients (21 millions de clients) 5 secondes de calcul Ont pu passer de 3 à 4 mois d historique pour les analyses Maintenance prédictive Normalement : maintenance de tous équipements tous les 3 mois Analyse des données de capteur pour prédire les pannes -> Maintenance préemptive pour équipements suspects, tous les 7 mois pour les autres
Conclusion Evolution rapide paysage BD / analytics Direction : la RAM! Besoin de traitements rapides Analyses de plus en plus poussées des données Conséquences pour vous? (M2 GL) Suivre ces technos de près Bien comprendre l utilisation des collections Accès facilité au parallélisme Se documenter sur les requêtes / algorithmes complexes permis par ces nouveaux systèmes Machine learning Data mining