Salut la communauté 👋
De nos jours, la quantité de données dans le monde ne fait que devenir plus gigantesque que ce qu’elle était déjà . Et pendant longtemps, on a souffert de moteurs lents, rigides et difficiles à faire évoluer. Mais depuis sa naissance, Spark a changé la donne.
Aujourd’hui avec ma collègue on va vous présenter :
- Ce qu’est vraiment Spark,
- Comment il fonctionne,
- Quelles sont ses limites et défis,
- Comment il révolutionne les calculs distribués à grande échelle ?
Spark, c’est quoi exactement 💫?
Apache Spark est un framework de traitement distribué qui permet d’exécuter très rapidement des calculs sur de grands volumes de données en s’appuyant sur un cluster de machines. On peut donc, le voir comme un moteur de calcul distribué capable de prendre en charge avec le même cœur d’exécution, différents types de workloads : traitement batch, streaming pour les flux données quasi temps réel, machine learning distribué (via MLlib),traitement de graphes (via GraphX).
Ce qui fait la particularité de Spark, par rapport aux outils utilisés dans la Big Data, ce sont trois point :
- Sa performance :
Spark repose sur le traitement en mémoire ,plutôt que d’écrire les résultats intermédiaires sur disque après chaque étape, comme le fait Hadoop MapReduce, il conserve les données en RAM lorsqu’elles doivent être réutilisées. Cela réduit fortement la latence, en particulier pour les algorithmes itératifs (apprentissage supervisé, etc.).
- Sa flexibilité :
Le même moteur permet de faire du batch, du streaming, du ML et du graph.On n’a plus besoin d’empiler plusieurs moteurs spécialisés pour couvrir tous les cas d’usage.
- Sa simplicité de développement :
Spark propose des API de haut niveau dans plusieurs langages (Scala, Java, Python, R) avec des abstractions comme les RDD, DataFrames et les Datasets qui simplifient le code par rapport au modèle MapReduce classique .
Un point important par rapport Ă Hadoop :
Dans beaucoup d’architectures, Spark vient au-dessus de Hadoop :
Spark, lit et écrit dans HDFS pour le stockage distribué,il peut utiliser YARN pour la gestion des ressources et il peut aussi fonctionner avec d’autres stockages comme S3, Cassandra, HBase, etc.
On peut donc voir Hadoop comme l’infrastructure de base (stockage + cluster) et Spark comme le moteur de calcul moderne qui l’exploite.
Comment fonctionne Spark ✨?
Spark est comme un orchestre de plusieurs travailleurs sur un cluster.
Quand on lance un job sur Spark : il passe par ces deux éléments :
Le Driver : Il lit notre code, construit le plan de l’exécution, coupe le travail en petites tâches qu’il envoie par la suite aux machines du cluster.
Les Executors : Ce sont les workers répartis sur les nœuds. Ils exécutent les tâches, enregistrent en mémoire les données du cache, et renvoient les résultats au driver.
Le driver il réfléchit, les executors ils calculent.
L’abstraction clé : les RDD
La brique de base de Spark, le RDD (Resilient Distributed Dataset) est un ensemble immuable de données divisé sur plusieurs machines. On applique dessus des transformations (map, filter, groupBy, join, etc.) et des actions (count, collect, save…).
Spark fait des évaluations paresseuses. Il ne calcule rien sauf si on fait une action.
Par exemple la transformation :
val rdd1 = sc.textFile("...")
val rdd2 = rdd1.filter(...)
val rdd3 = rdd2.map(...)
Ne fait rien tant qu’on n’a pas fait l’action.
rdd3.count()
À ce moment, Spark regarde tout le graphe de transformations (RDD1 -> RDD2 -> RDD3), il construit un graphe acyclique (DAG), trouve l’ordre et le regroupement optimal des opérations. Découpe le tout en stages et tasks envoyés aux executors.
Ce mécanisme d’évaluation paresseuse permet à Spark de repérer les étapes inutiles, de fusionner plusieurs opérations en un seul passage, et de réduire les coûts d’exécution.
Sur ce, la question de comment Spark gère les pannes nous traverse l’esprit.
Chaque RDD a un lineage, c'est-à -dire l’historique des transformations qui lui ont été appliquées. Si un nœud tombe, Spark ne recharge pas tout, il reprend uniquement les transformations nécessaires pour reconstruire la partie manquante, sinon le reste continue normalement.
Ce qui le rend plus léger et plus efficace.
Quels problèmes Spark cherche-t-il à résoudre 💥?
Les premiers frameworks Big Data, comme Hadoop MapReduce, étaient conçus autour de traitements centrés sur le disque : chaque étape lisait de grandes quantités de données sur disque, puis écrivait à nouveau les résultats sur disque avant l’étape reprend ces résultats . Ce qui donne comme conséquence : des traitements très lents,des jobs peu adaptés aux algorithmes itératifs et très peu d’interactivité c'est-à -dire lancer une expérience pouvait prendre plusieurs minutes, voire plusieurs heures.
Spark répond à ce problème avec une idée simple : le traitement en mémoire: Une fois les données chargées dans un RDD ou un DataFrame, Spark peut enchaîner plusieurs opérations sans repasser à chaque fois par le disque.
Une fois les données chargées dans un RDD ou un DataFrame, Spark peut enchaîner plusieurs transformations sans repasser par le disque.C’est ce changement qui permet des gains de performance de l’ordre de ×10 à ×100 sur certains workloads (par exemple, une régression logistique sur 100 Go qui passe d’environ 110 secondes par itération sous MapReduce à environ 1 seconde sous Spark.
Le deuxième problème c’est que dans la pratique, on a besoin de tester rapidement une nouvelle feature,ajuster un paramètre de modèle, explorer un échantillon de données. Avec les anciens moteurs, chaque essai pouvait demander de lancer un gros job batch avec des temps de réponse de plusieurs minutes.
Avec Spark les temps de cycle sont beaucoup plus courts, l’exécution en mémoire rend possibles des explorations interactives,c’est une évolution dans la manière de travailler en passant d’un mode “batch lent” à un mode plus agile et expérimental .
Limites et défis de Spark :
Spark a aussi ses contraintes :
Premièrement, son traitement en mémoire consomme beaucoup de RAM: Si on a des datasets plus gros que la mémoire disponible, il fait du spill sur disque ce qui cause une baisse de performances.
Deuxièmement, sa scalabilité dépend de la configuration du cluster, si un cluster Spark est mal configuré (mémoire, nombre d’exécuteurs, partitionnement) il peut se retrouver en OutOfMemory, générer des shuffles gros et lents, ou mal utiliser les ressouces CPU/RAM.
Comme il peut être limité par la quantité de données disponibles sur le cluster.
Pour conclure, Spark a transformé le Big Data, grâce à lui le traitement de données massives est devenu plus rapide, plus flexible et exploitable au quotidien. Malgré ses limites, il reste l’un des moteurs de calcul distribué à grande échelle les plus puissants.
https://spark.apache.org
https://staff.fnwi.uva.nl/a.s.z.belloum/Project-Descriptions/Literature_Study/Baris-cem-viral-spark.pdf
https://ieeexplore.ieee.org/document/10393086
https://www.researchgate.net/publication/347156062_Big_data_and_Spark_Comparison_with_Hadoop
https://link.springer.com/content/pdf/10.1007/s41060-016-0027-9.pdf