Si vous suivez même de loin le monde du big data, vous avez forcément entendu parler du projet Spark. Et si vous n’en avez jamais entendu parler, il est temps de le découvrir.
Dans cet article je vais vous donner les clés pour comprendre ce qu’est Spark et la façon de l’utiliser.
Quel est la relation entre Spark et Hadoop ? Est-ce un langage ? Dans quel cas est-ce utile ? Quelles sont ses composantes ?…
SPARK c’est quoi ?
Il s’agit d’un projet de la fondation Apache issu de recherches à Berkeley. Ce projet fait maintenant partie des projets prioritaires de la fondation Apache avec des centaines de développeurs dans la plupart des gros acteurs du secteur big data.
Apache Spark est un framework open source de traitement de données. Il est né d’une constatation simple : la technologie MapReduce est très intéressante mais dès que des requêtes complexes (itérées) sont nécessaires et que plus de temps réel entre en jeu, elle atteint ses limites. D’où l’idée de créer un nouveau framework utilisant la parallélisation massive avec une technologie in memory. Cette phrase vous paraît indigeste ?
Avant d’aller plus loin voici deux petites définitions :
- parallélisation massive : il s’agit de distribuer les calculs dans un grand nombre de processeurs ou de machines suivant la taille de votre infrastructure
- in memory : il s’agit tout simplement de charger les données en mémoire c’est-à-dire dans la RAM des machines
On parle dans le cas de Spark de framework car il s’agit réellement d’un environnement s’appliquant et de nombreux formats pour le traitement et l’analyse des données massives.
Le fait de travailler sur une technologie in memory vient de deux constats :
- la plupart des jeux de données de Big data font quelques gigas et une utilisation de la mémoire RAM devient alors possible,
- le coût de la mémoire RAM a très fortement baissé et on peut facilement obtenir des grandes quantités de mémoire
Grâce à ses principes, Spark permet de diviser par 100 les temps de calcul par rapport à l’utilisation de Mapreduce sur du Hadoop. De plus, il permet d’appliquer des algorithmes impossibles à mettre en oeuvre jusqu’ici avec les opérations de map et de reduce.
Dans quel cas utiliser Spark ?
C’est aujourd’hui une des grandes questions que se posent de nombreuses entreprises. Après avoir été submergé par la déferlante Hadoop et ses opérations de MapReduce,, le passage à un autre environnement peut faire peur.
Une chose est sûre, Spark n’est pas adapté à tous les contextes big data. De plus, combiner des clusters Hadoop pour le stockage et du Spark pour les traitements est aussi plus onéreux sachant qu’en plus de l’espace de stockage, il faut beaucoup de RAM supplémentaire. Néanmoins deux cas se distinguent pour lesquels le passage à Spark aura tout son sens :
- Vous avez des besoins d’analyses en temps réel. C’est là que Spark excelle.
- Vous avez des besoins en terme d’analytics importants. Les composantes de Spark permettent de gérer de nombreux algorithmes puissants (grâce à MLlib).
On peut voir des applications avec Spark dans des cas de requêtes en temps réelles avec des temps de retour en seconde, des cas de traitement de flux notamment dans la détection de fraudes. On peut aussi l’utiliser pour les données issues de multiples capteurs et leur analyse en temps réel dans le cadre de l’Internet des Objet.
L’environnement Spark se combine naturellement avec un autre projet important de la fondation Apache : Apache Mahoot, l’outil de recommandation. Pour mettre en place des algorithmes de recommandation en temps réel avec une vitesse jamais égalée.
Où se situe Spark dans l’écosystème big data ?
Comme je le disais plus tôt, Spark est un framework permettant de traiter de manière complexe des données de types variés. Il se situe donc plutôt au niveau des étapes Map et Reduce qu’au niveau de l’infrastructure en elle-même. Spark se combine très bien avec des clusters Hadoop (en HDFS) et permet d’appliquer des algorithmes complexes sur des données issues de ces clusters. En effet, il permet de faire la même chose que MapReduce mais aussi de travailler sur du streaming, faire des requêtes interactives et appliquer des algorithmes d’apprentissage (machine learning).
Les capacités de cette technologie sont très importantes, on peut utiliser des clusters avec des milliers de nœuds et traiter des petabytes de données. Si votre jeu de données est trop grand pour être traité in memory, Spark va automatiquement utiliser uniquement les parties nécessaires pour pouvoir traiter ce jeu.
Principes de base
Apache Spark est entièrement codé en scala, ce langage assez récent intègre les paradigmes de programmation orientée objet et de programmation fonctionnelle, avec un typage statique (voici le site officiel du langage).
La notion centrale quand vous faites du Spark est le RDD, ou Resilient Distributed Dataset.
En décortiquant ce nom on peut un peu mieux le comprendre, on part de la fin :
- Dataset : Il s’agit d’un jeu de données qui se parcourt comme une collection.
- Distributed : Cette structure est distribuée afin d’être découpée pour être traitée dans les différents nœuds.
- Resilient : Il est résilient, car il pourra être relu en cas de problème.
Le RDD est simple à créer et peut être obtenu à partir de multiples sources :
- Une collection (List, Set), transformée en RDD
- Un fichier local ou distribué (HDFS) dont le format est configurable: texte, SequenceFile Hadoop, JSON…
- Une base de données: JDBC, HBase…
- Un autre RDD auquel on aura appliqué une transformation (un filtre, un mapping…).
On peut simplement exporter le contenu d’un RDD dans un fichier, dans une base de données ou dans une collection.
Les bibliothèques intégrées
Spark se base nativement sur le langage scala mais des API en Python ou en java existent. Je reviendrai plus tard sur ces langages.
L’écosystème Spark comporte ainsi aujourd’hui plusieurs outils :
- Spark pour les traitements “en batch”
- Spark Streaming pour le traitement en continu de flux de données
- MLlib pour le “machine learning”. Il s’agit d’une bibliothèque de méthodes d’apprentissage (type k-means…) optimisée pour Spark
- GraphX pour les calculs de graphes
- Spark SQL, une implémentation SQL-like d’interrogation de données.
- SparkR ou R on Spark, un package permettant de faire du spark depuis R, le langage de programmation spécialisé pour le traitement et l’analyse des données.
Chacun de ses outils apporte des fonctionnalités supplémentaires au framework, ce qui le rend si attractif.
Les langages
Spark est écrit en Scala et peut être indifféremment utilisé en Java, en Scala et en Python :
- Scala : certaines fonctionnalités du langage comme les tuples, l’inférence de type, les case classes, les conversions implicites, rendent l’utilisation de Spark fluide. De plus, le Spark Shell, qui s’appuie sur le shell Scala, permet l’écriture et l’exécution de traitements en direct.
- Python : on dispose, comme en Scala, d’un shell (PySpark), de tuples, d’un typage flexible… Mais certaines fonctionnalités purement Java ou Hadoop ne sont pas accessibles.
- Java : La couche d’adaptation Java/Scala et le typage explicite nécessaire rend l’utilisation un peu plus lourde, mais reste acceptable.
- R : Spark propose un package R permettant de piloter vos analyses depuis R en utilisant le langage R. Il s’agit d’un pont créé pour les data scientists qui ne ce sont pas encore mis à python et qui veulent utiliser apache spark.
En savoir plus
Apache spark apparaît aujourd’hui comme un environnement à explorer. Je vous conseille une seule chose, essayez-le si vous en avez la possibilité. La documentation du projet est très étendue et permet de faire beaucoup de chose.
Spark est en train de devenir un framework big data de référence et, même s’il reste quelques bugs, il vaut la peine d’être utilisé.
De nombreuses ressources supplémentaires sont disponibles pour aller plus loin :
- La documentation du projet bien entendu : ici
- Un article en français sur la comparaison Hadoop / Spark : ici
- Un article plus technique sur la mise en place d’un environnement spark (en français) : ici
- Vous trouverez bien d’autres références sur le web et n’hésitez pas à me contacter si vous avez des questions. L’équipe de STAT4DECISION se fera un plaisir de vous aider et de vous former.
Découvrez notre large choix de formations à la data science
Que vous soyez totalement novice ou data scientist confirmé, vous trouverez parmi nos formations la formation dont vous avez besoin pour élargir vos compétences (big data, python, R, machine learning…).Partager cet article
Comments 4
Pingback: Le big data, c'est quoi ? - STAT4DECISION
je suis en première année doctorat et je suis vraiment intéressé par ce sujet du big data et spark et je voudrais vraiment avoir une très bonne problématique sur laquelle je peux travailler. si possible de suggérer quelques sujets et merci
Pingback: IBM-SPSS, SAS, RapidMiner et KNIME toujours leaders parmi les data science platforms
Merci pour ces explications!