Dans cet article, nous allons surtout parler d’Apache Spark, qui est considéré comme étant l’avenir des systèmes de traitement de données. Nous allons voir ses principaux outils, avantages et cas d’utilisation afin de comprendre les raisons pour lesquelles tout le monde l’utilise.
Apache Spark : c’est quoi ?
Apache Spark est un moteur de traitement et de calcul open source utilisé dans le domaine essentiellement dans le domaine du Big Data et de l’apprentissage automatique. Il a été créé en 2009 dans le cadre du doctorat de l’informaticien Matei Zaharia. Il a intégré Apache en 2010 et devient à partir de ce moment un framework open source.
Plus concrètement, il s’agit d’un système permettant d’effectuer des calculs et divers autres traitements sur les données volumineuses distribuées dans diverses machines appelées clusters.
Il a été initialement développé en Scala, mais de nos jours, on peut également développer des applications avec Java, Python et R à l’aide de Spark.
C’est également le plus performant moteur qui prend en charge les traitements In-Memory distribués. Il offre la possibilité de traiter des données venant de HDFS, des bases de données relationnelles et NoSql ou encore des données sur disque si ces dernières sont trop importantes. Avec Spark, toutes ces opérations sont effectuées de façon rapide tout en consommant le moins de ressources possible.
Apache Spark : ses outils
L’un des points forts d’Apache Spark est la panoplie de modules qu’il propose. Grâce à ces derniers, plusieurs traitements peuvent être effectués de manière efficace et performante. Il faut noter que l’on peut utiliser ces modules dans la même application, ce qui produit une solution très complète et un résultat plus cohérent. Voyons maintenant ces outils un à un :
Spark SQL
Spark SQL est le module qui sert à traiter les données structurées dans Spark. Il permet d’exécuter des requêtes SQL sur des données au format structuré comme les fichiers JSON, CSV, Parquet ou les tables Hive, etc.
Il prend également en charge différentes sources, que ce soit des SGBDR, des outils de Business Intelligence et surtout les RDDs existants. Il faut savoir qu’un RDD (Resilient Distributed Datasets) est une collection de données distribuées dans des nœuds de cluster qui peut persister en mémoire afin d’être réutilisé plus tard.
On peut utiliser Spark SQL de différentes façons : avec l’API SQL, l’API Datasets ou l’API Dataframes. Il fournit également une interface qui offre plus de détails sur les traitements qui sont actuellement effectués.
Spark Streaming
Spark Streaming est un système de traitement de données en temps réel avec une forte tolérance aux pannes. Pour cela, il effectue des traitements par lots et par flux dans une fenêtre de temps déterminée afin de construire des petits RDDs. Les données collectées sont appelées des microbatchs. Le fait de procéder de cette manière lui permet d’interagir avec les autres bibliothèques de Spark, mais offre également une meilleure gestion des ressources existantes et une efficacité plus élevée.
On peut utiliser Spark Streaming pour traiter des données venant de différentes sources telles que Kafka, Flume, les sockets TCP, Azure Event Hubs, Amazon Kinesis ou encore Twitter. Et puisque ces données sont directement traitées, on peut donc s’en servir ou bien les transférer vers d’autres systèmes.
Spark GraphX
Spark GraphX est le module Spark qui permet de traiter les graphes et d’effectuer les calculs relatifs à cela. Une version améliorée de l’API Pregel, qui est une API de Google proposant plusieurs opérateurs, ainsi que d’autres opérateurs sont utilisés par Spark GraphX afin de gérer ces graphes. En ce qui concerne leurs traitements et leurs analyses, il dispose de nombreux algorithmes et générateurs de graphe afin de les effectuer de manière simple et efficace.
Plusieurs raisons font que Spark GraphX soit un composant de choix pour le traitement des graphes. Tout d’abord, l’étape de l’ETL, de l’analyse et du traitement sont beaucoup plus fluides en l’utilisant.
On peut traiter ces graphes de manière distribuée, ce qui fait qu’il peut étendre le module Spark RDD en ajoutant une abstraction sous forme de graphe de propriété. Un graphe de propriété est un multigraphe pouvant avoir plusieurs arêtes en parallèle. Dans celui-ci, plusieurs relations peuvent subsister entre les mêmes sommets, selon la définition que l’utilisateur a soumise.
Sa rapidité de traitement, sa fluidité ainsi que sa facilité d’utilisation font également partie de l’un des moteurs de calcul pour les graphes les plus performants qui existent sur le marché. Et avec sa panoplie de bibliothèques qui est toujours en expansion, cette performance qu’il propose ne cessera de croître.
Attention, ici, lorsque l’on parle de graphe, on fait référence à toutes les opérations concernant les théories des graphes. L’utilisation de ces derniers se reflète par exemple dans les maps de Google, l’interaction entre amis Facebook, les systèmes de routeurs, etc.
Spark MLlib
Spark MLlib ou Machine Learning Library est, comme son nom l’indique, la librairie évolutive de Spark qui sert à effectuer de l’apprentissage automatique (Machine Learning en anglais). Comme il fait partie des librairies de base d’Apache Spark, il bénéficie donc de sa rapidité, de sa facilité d’utilisation et de sa scalabilité. Elle est dite évolutive, car à chaque mise à jour de Spark, elle est également améliorée.
Elle fonctionne avec diverses plateformes telles que Hadoop, Kubernetes ou même dans le cloud. Pour ceux qui utilisent Python, par exemple, on peut l’associer avec PySpark, qui est une interface pour Apache Spark en Python.
Spark MLlib propose plusieurs algorithmes et utilitaires performant pour les tâches d’apprentissage automatique. Parmi ces algorithmes, nous pouvons par exemple citer le clustering, les arbres de décision, la régression linéaire, la classification, la prédiction, etc. Et parmi les utilitaires, nous avons la construction de pipelines, la persistance ou encore l’évaluation de modèles. Il propose même des utilitaires secondaires tels que l’algèbre linéaire distribuée ou les statistiques.
Spark MLlib appuie la construction des pipelines sur les Dataframes plutôt que sur Apache RDD, cela rend l’apprentissage plus uniforme pour les autres langages et tous les algorithmes de Machine Learning.
Apache Spark : ses avantages
La première raison pour laquelle il est judicieux d’utiliser Apache Spark est sans doute sa rapidité. En effet, il est 100 fois plus rapide que Hadoop pour les traitements in-memory et 10 fois plus rapide pour les traitements sur disque. Il a même battu le record de la vitesse de traitement de données avec 100 To de données en 23 minutes.
Cette rapidité est due au fait qu’il s’appuie sur les opérations en mémoire, c’est-à-dire qu’il stocke certaines informations en mémoire pour une réutilisation future. Le “lazy evaluation” est également la cause de cette haute performance qu’offre Apache Spark. Cela consiste à effectuer tous les traitements et les calculs nécessaires sur les données. Les résultats obtenus seront par la suite stockés dans une pile d’instruction en attente d’exécution. Ce procédé permet de ne plus perdre de temps avant d’utiliser les données.
Apache Spark permet d’obtenir une application quasi complète et uniforme grâce aux outils et bibliothèques que nous avons vus précédemment. Et au-delà de cela, il s’intègre parfaitement à d’autres architectures comme Hadoop.
Il est également important de mentionner le langage utilisé lors de son développement qui est Scala, car son succès est en partie dû à ce choix de langage. Scala est un langage multiparadigme. On bénéficie donc d’un codage simplifié et d’une maintenance facilitée avec la programmation orientée objet tout en travaillant sur des données distribuées qui sont possibles grâce à la programmation fonctionnelle.
Enfin, il permet d’effectuer plusieurs tâches relatives aux données volumineuses, en passant par le traitement, l’intégration et l’analyse de ces dernières.