Présentation de Spark
Spark est un outil permettant de distribuer des calculs sur une ou plusieurs machines. Il se présente sous la forme d’une interface de programmation (API) disponible dans de nombreux langages (Scala, Java, Python, R). Il est lui-même écrit en langage Scala et son approche est basée sur la programmation fonctionnelle.
Spark peut être vue comme le successeur de Hadoop MapReduce car il en reprend les fondements (le paradigme Map/Reduce) et est capable d’utiliser les outils de distribution de calculs YARN ou MESOS et de stockage HDFS. Cependant, ses cas d’application sont beaucoup plus larges que MapReduce de par la flexibilité de son modèle de données (le RDD – Resilient Distributed Dataset). Ainsi, de nombreux cas d’application ont rapidement émergé en apprentissage statistique (machine learning) ou en traitement des graphes là où Hadoop MapReduce n’était pas du tout adapté.
Comparé à Hadoop MapReduce, Spark est généralement beaucoup plus rapide car il tente de garder les données manipulées en mémoire là où MapReduce effectue énormément de lectures et d’écritures disque.
A la manière de Hadoop, Spark manipule des *ensembles* de données pouvant être traitées séparément. L’exemple le plus typique est le comptage d’occurrences de chaque mot dans un texte : pour cette application, on peut découper le texte à l’infini (par page, par ligne, par phrase, …), chaque sous-ensemble étant composé de mots. Chacun de ces sous-ensembles peut être traité séparément, quel que soit sa taille, et les comptages partiels peuvent ensuite être agrégés pour obtenir le comptage final.
Historique de Spark
Spark a été développé à partir de 2009 à l’AMPLab [AMPLab de l’UC Berkeley] de l’UC Berkeley par un doctorant nommé Matei Zaharia.
En 2013, le code source a été cédé à la fondation Apache et en 2014 la version 1.0 est parue.
Dès cette année, Spark a battu MapReduce au benchmark de référence TeraSort[Benchmark Terasort] en étant jusqu’à 30x plus performant.
Les sections suivantes listent les ajouts notables survenus dans les différentes versions de Spark. Les améliorations de performances ne sont pas listées car elles sont une constante des différentes versions.
Modèles de données
Spark propose deux grandes familles de représentation des données :
- les RDD, qui permettent de stocker des objets au sens classique (instances de classe Java, “case classes” Scala, objets Python, etc). Ces objets sont ensuite manipulés via des opérateurs ensemblistes type “map” ou “reduce”
- les Datasets (ex-Dataframes) qui permettent de représenter des données tabulaires pour ensuite être manipulées soit via des commandes en SQL pur (ou leur équivalent en fonctions SparkSQL), soit via des opérations ensemblistes comme sur les RDD (depuis Spark 2.0)
En termes de fonctionnalités comme de performances, les Datasets sont beaucoup plus aboutis que les RDD à partir de Spark 2.0. Cependant, l’avantage des RDD est que l’on peut paralléliser et distribuer des structures de données d’un programme existant sans avoir à réécrire son modèle de données.
Ressources complémentaires
Moteur d’exécution et optimisation de requêtes
[Optimisation de requêtes]
Stockage des données
[Stockage des données].
API
Spark propose une interface pour les langages [Scala, Java, Python (pyspark)] et [R (SparkR)].
En plus des fonctionnalités de base, plusieurs extensions existent :
Ressources complémentaires
Tuning, configuration et déploiement
[Tuning, configuration et déploiement]
Ressources complémentaires
Vue d’ensemble
Apprendre Spark
Outils liés
Références