Spark - An In-Memory Distributed Computing Engine
Présentation Spark le Framework de big data pour traitement et l'analyse des données massives réalisé par Anass Nabil et Marouane Benabdelkader
Les technologies big data avec speech commentaries
Spark - An In-Memory Distributed Computing Engine.pptx
1. Présenté par :
BENABDELKADER MAROUANE
NABIL Anass
Université Sultan Moulay Slimane
École Supérieure de technologie – Fkih Ben Salah
Licence Professionnelle Infrastructures, Traitement et Analyse de données Massives (BIG DATA)
Année universitaire : 2023-2024
Spark - An In-Memory Distributed
Computing Engine
Encadré par :
Prof A.Amine
2. Plan
I. Spark : Définition
II. Batch Processing et Stream Processing
III. Les composants de Spark
IV. Architecture de Spark
V. Les caractéristiques de Spark
VI. Difference entre Spark et MapReduce
VII. RDD ( Resilient Distributed Datasets )
VIII.RDD : Transformations et Actions
IX. PySpark , Tp Pyspark
2
3. I - Spark :
● Apache Spark est un Framework Big Data de traitement de données open source à grande échelle. Il est
particulièrement adapté pour les très grandes volumétries de données et fonctionne de manière distribuée,
sous forme de clusters. Son utilisation est principalement dédié aux applications du Machine Learning et des
pipelines de données ETL (Extract, Transform, Load) .
● Spark Réalise des traitements par lots (Batch) ou à la volée (Streaming)
● Permet d’integrer tous les outils de BIG DATA (comme HDFS)
● Spark offre un traitement itératif et interactif
3
4. Traitement par lots “Batch Processing”
● Le traitement par lots (en anglais, "batch processing") est une technique de traitement de
données qui consiste à collecter, traiter et analyser un ensemble de données ou de tâches en
une seule opération, généralement de manière planifiée et périodique.
● Contrairement au traitement en temps réel, où les données sont traitées au fur et à mesure de
leur arrivée.
● le traitement par lots implique de rassembler un volume important de données avant de les
traiter en une seule fois.
4
5. Traitement par volée “ Stream Processing ”
● Le traitement par volée (ou « stream processing ») consiste à traiter les données en temps réel à mesure
qu'elles arrivent, contrairement au traitement par lots qui traite les données en ensembles complets. Il est
idéal pour les flux de données continus, permettant des réactions rapides, mais peut être plus complexe à
mettre en œuvre. Apache Spark propose Spark Streaming pour cette fonctionnalité.
● Le traitement de streaming via micro-batch dans Spark Streaming offre un équilibre entre les temps de
réponse rapides nécessaires dans le traitement en continu et l'efficacité du traitement par lots, le tout dans
un environnement unifié.
5
7. Les Composants de Spark:
● C’est le moteur d’exécution du spark, la base du
framework
● Il fournit les fonctionnalités de base de Spark,
telles que la distribution de données et la
parallélisation des tâches, des fonctionnalités
lectures/écritures de base. L’API RDD est
implémentée (Resilient Distributed Datasets)
sur Spark Core, qui est une collection logique de
données partitionnées sur le cluster.
7
Spark Core :
8. Les Composants de Spark:
● Spark SQL est une composante essentielle
d'Apache Spark qui offre une interface SQL pour
interagir avec des données structurées et semi-
structurées, améliorant ainsi la performance du
traitement de données.
● Il permet aux utilisateurs d'exécuter des
requêtes SQL ou HQL sur une variété de sources
de données, ce qui simplifie le traitement et
l'analyse des données dans l'écosystème Spark.
8
Spark SQL :
9. Les Composants de Spark:
● Spark Streaming est un composant d'Apache
Spark qui permet d'analyser des flux de
données en temps réel, idéal pour des
applications nécessitant une réponse
instantanée aux événements en cours.
9
Spark Streaming :
10. Les Composants de Spark:
● MLlib, intégrée à Apache Spark, est une
bibliothèque de machine learning robuste et
scalable. Elle offre des algorithmes divers
pour la classification, la régression, le
clustering, et le filtrage collaboratif, optimisés
pour le traitement de données massives.
Grâce à son intégration étroite avec Spark,
MLlib permet une analyse de données rapide
et efficace, rendant le machine learning
accessible et performant sur de grands
ensembles de données.
10
MLlib (librairie Machine Learning) :
11. Les Composants de Spark:
● GraphX est une bibliothèque de traitement de
graphes intégrée à Apache Spark. Elle offre des
outils pour construire, manipuler et analyser des
graphes à grande échelle de manière efficace et
distribuée. Il étend Spark RDD en introduisant le
concept de Resilient Distributed Property Graph,
un graphe où chaque nœud et chaque arête a des
propriétés associées. Cette bibliothèque inclut des
API pour la création de graphes, la modification de
leurs structures, la réalisation de calculs sur les
nœuds et les arêtes, et l'implémentation
d'algorithmes graphiques
11
GraphX :
12. Les Composants de Spark:
● Dans le contexte de Spark, les "packages" font
généralement référence à des bibliothèques
supplémentaires ou à des modules qui peuvent
être ajoutés à l'installation de Spark pour étendre
ses capacités. Ces packages peuvent inclure des
connecteurs pour diverses sources de données, des
bibliothèques pour le traitement avancé des
données, des extensions pour le machine learning,
etc.
12
Packages :
13. Les Composants de Spark:
● Il faut bien comprendre que Spark n’est pas
une base de données et ne stocke rien, il se
base sur des systèmes de stockage comme
Hadoop, AWS S3, Cassandra, MongoDB, etc.
13
Stockage
14. Les Composants de Spark:
● Spark Prise en charge de plusieurs langages
de programmation : Scala, Java, Python et R,
ce qui facilite le développement
d'applications Big Data dans le langage de
programmation de votre choix.
14
langage de programmation
15. Architecture Spark:
Apache Spark adopte une architecture maître-esclave, dans laquelle le programme Driver agit en tant que maître,
coordonnant et distribuant les tâches de traitement aux Workers, ou nœuds esclaves, chacun hébergeant des
Executors pour exécuter ces tâches, avec le Cluster Manager supervisant la gestion des ressources du cluster.
15
16. Architecture Spark:
Driver Program: Le driver program est le point d'entrée de l'application Spark. Il contient le code de l'application
Spark, y compris les transformations et les actions à effectuer sur les données. Le driver program communique avec
le Cluster Manager pour allouer des ressources et coordonner les tâches.
16
17. Architecture Spark:
Cluster Manager: responsable de la gestion des ressources du cluster, telles que les nœuds de calcul. Spark prend en
charge plusieurs gestionnaires de cluster, notamment Apache Mesos, Hadoop YARN, et son propre gestionnaire de
cluster appelé Standalone. Le cluster manager alloue des ressources aux applications Spark et surveille leur
exécution.
17
18. Architecture Spark:
Worker Node: un nœud (ou une machine) dans le cluster Spark qui est utilisé pour exécuter des parties des
applications Spark. Chaque Worker Node est contrôlé par le Master Node (ou Driver Node) et exécute les tâches
assignées.
18
19. Architecture Spark:
Executor: Un Executor dans Spark est un processus lancé sur les Worker Nodes qui exécute les tâches et stocke les
données pour les applications Spark. Chaque Worker Node peut avoir un ou plusieurs Executors. Les Executors sont
responsables de l'exécution des tâches assignées et du stockage de données en mémoire ou sur disque. Ils jouent un
rôle clé dans la performance de traitement des données.
19
20. Architecture Spark:
Cache: Le cache dans un Worker Node d'Apache Spark fait référence à l'utilisation de la mémoire (RAM) pour stocker
temporairement des données. Cela permet un accès rapide aux données fréquemment utilisées, ce qui peut améliorer
significativement les performances de l'application.
20
21. Architecture Spark:
Task: Une Tache dans Apache Spark est une unité de travail individuelle qui est exécutée sur un Executor dans un
Worker Node. Elle correspond à une opération spécifique sur une partition d'un RDD (Resilient Distributed Dataset)
ou d'un DataFrame, comme le traitement, le filtrage ou l'agrégation des données. Les tasks sont les éléments de base
du traitement parallèle dans Spark, permettant le traitement distribué des données sur plusieurs nœuds du cluster.
21
23. Architecture Spark:
Job: Dans Apache Spark, un "job" correspond à une série d'opérations de traitement de données initiées par une
action Spark. Lorsqu'une action est appelée sur un RDD (Resilient Distributed Dataset) ou un DataFrame, Spark
soumet un "job" au cluster pour traiter ces données.
Un job est composé de plusieurs "stages". Un stage est un ensemble de tâches qui peuvent être exécutées en
parallèle
Spark organise les opérations en stages en fonction des opérations de transformation qui nécessitent, un stage est
terminé lorsque toutes ses tâches sont terminées.
23
24. Architecture Spark:
24
1. Driver Program: Le Driver exécute le code principal de l'application Spark
et initialise le SparkContext, qui est le cœur de l'application et gère la
configuration, l'établissement de la connexion au cluster, la distribution du
code, et plus.
2. Resource Allocation by Spark Context: Le SparkContext communique avec
le Cluster Manager pour demander des ressources pour exécuter
l'application. Cela inclut la demande de lancement des Executors sur les
Worker Nodes.
3. Resource Allocation by Cluster Manager: Le Cluster Manager attribue les
ressources disponibles, en choisissant les Worker Nodes qui exécuteront
les Executors pour le job en question.
4. Confirmation to Spark Context: Une fois que le Cluster Manager a alloué
les ressources, il informe le SparkContext des détails des ressources
allouées, permettant au Task Scheduler de savoir où les tâches peuvent
être exécutées.
25. Architecture Spark:
25
5. Job Creation: Lorsqu'une action est rencontrée dans le code, le
SparkContext crée un job qui est une instance d'exécution des
transformations RDD nécessaires pour obtenir le résultat de l'action.
6. DAG Scheduler: Le DAG Scheduler crée un plan d'exécution sous la
forme d'un graphe acyclique dirigé qui illustre les RDDs, les
transformations et les actions. Les stages sont formés ici, où chaque
stage contient des tâches qui peuvent être exécutées en parallèle.
7. Task Scheduling: Le Task Scheduler ordonne les stages basés sur les
dépendances et les contraintes de données. Il décide de l'ordre
d'exécution des stages et prépare l'ordonnancement des tâches au
sein de chaque stage.
8. Task Distribution: Le Task Scheduler envoie ensuite les tâches aux
Executors sur les Worker Nodes pour être exécutées. Les Executors
exécutent les tâches et retournent les résultats au Driver.
26. Les principales caractéristiques de Spark
● In-Memory Processing : Spark stocke les données en mémoire, ce qui permet des
performances plus rapides par rapport à d'autres systèmes de traitement de données
qui utilisent un stockage sur disque.
● Traitements à la volée: L'un des avantages de Spark par rapport à Hadoop Map Reduce,
c'est qu'il permet de traiter les données à la volée, pas uniquement en batch.
● Traitement distribué : Spark est conçu pour fonctionner sur un cluster de machines,
permettant de traiter des volumes de données importants en parallèle.
26
27. Les principales caractéristiques de Spark
● Bibliothèques intégrées : Spark intègre de nombreuses bibliothèques pour des tâches
telles que le traitement de flux en temps réel (Spark Streaming), l'apprentissage
automatique (MLlib), le traitement graphique (GraphX) et l'analyse SQL (Spark SQL).
● Intégration avec d'autres outils : Spark s'intègre facilement avec d'autres outils de
l'écosystème Big Data, tels qu'Hadoop HDFS, Hive, et d'autres solutions de stockage et
de traitement de données.
27
28. Spark , MapReduce
● MapReduce et Spark sont deux frameworks
de traitement distribué largement utilisés
dans le domaine du traitement de données
à grande échelle.
● Cependant, Spark offre plusieurs avantages
par rapport à MapReduce et surmonte
certaines de ses limites
28
31. 31
Spark utilise quoi Pour stockage dans Mémoire ?
● Spark utilise une structure de données fondamentale connue sous le nom de RDD (Resilient
Distributed Datasets).
● Les RDD sont des collections distribuées d'éléments immuables, tolérants aux pannes et pouvant
être traités en parallèle.
● Les RDD sont divisés en partitions et peuvent être exécutés sur différents nœuds de cluster.
● Spark conserve l’historique des opérations qui a permis de constituer un RDD, et la reprise sur
panne s’appuie sur cet historique afin de reconstituer le RDD en cas de panne.
32. Operations sur RDD
● Pour travailler avec les RDD, Spark propose
deux types d'opérations : les
transformations et les actions.
● Les transformations sont les fonctions qui
sont appliquées sur un RDD existant pour en
dériver un nouveau. Il prend RDD en entrée
et produit un ou plusieurs RDDS en sortie.
● Les actions sont des opérations Spark RDD
qui donnent des valeurs non RDD. Action
renvoie une valeur au programme pilote
après avoir exécuté un calcul sur l'ensemble
de données.
32
33. 33
Transformation Narrow et Wide
chaque partition d’entrée ne
contribuera qu’à une seule
partition de sortie.
des partitions d'entrée contribuer
à de nombreuses partitions de
sortie
36. RDD
● Il existe trois façons de créer un RDD dans Spark :
1. Collections parallélisées : Les éléments de collection sont copiés dans un
ensemble de données distribué qui peut être exploité en parallèle.
2. Ensembles de données externes : lorsque les données sont importées de
l'extérieur de Spark, soit depuis local(Text,csv…), soit depuis hadoop(HDFS).
3. Transformations : Création d'un nouveau RDD à partir d'un existant.
36
37. 37
Apache Spark-RDD
● Des transformations créent des RDD à partir d’une ou deux sources de données.
● S’il n’est pas marqué comme persistant, le RDD sera transitoire et ne sera pas conservé en
mémoire après calcul
● Sinon, il est stocké en RAM, et disponible comme source de données pour d’autres
transformations.
38. 38
Exemple : Analyse de fichiers log
● On veut analyser le fichier journal (log) d’une application X dont un des modules (M) est suspect ,
et par beaucoup d’autres modules.
● On constate qu’un module M produit des résultats incorrects de temps en temps
39. 39
Exemple : Analyse de fichiers log
● On construit donc un programme qui charge le log sous forme de collection, ne conserve que les
messages produits par le module M , et analyse ensuite ces messages
● On peut analyser par
utilisateur, par période,
etc.
● Application de ca dans
Spark parsuite
40. 40
// Chargement de la collection
log = load ("app.log") as (...)
// Filtrage des messages du module M
logM = filter log with log.message.contains ("Module M")
// On rend logM persistant !
logM.persist();
Analyse à partir de logM
// Filtrage par utilisateur
logUtilisateur = filter logM with log.message.contains ("utilisateur U")
// .. analyse du contenu de logProduit
Code Spark :
Exemple : Analyse de fichiers log
42. Des RDD structurés
● Un RDD est une ”boîte” (typée) destinée à contenir n’importe quel document, sans aucun
préjugé sur sa structure (ou son absence de structure)
● Spark propose (depuis la version 1.3, avec des améliorations en 1.6 puis 2.0) des RDD
structurés dans lesquels les données sont sous forme tabulaire.
● Ces RDDs structurés sont nommés :
○ Dataset
○ Dataframe
Nous avons centré sur les RDDs (API bas niveau), mais il est aujourd’hui(presque) toujours
préférable d’utiliser les API de haut niveau, Dataframes et Datasets
RDD Slow for non-JVM languages like Python
Ces structures, Datasets et Dataframes, sont assimilables à des tables relationnelles, ou à
d’autres structures tabulaires (Pandas)
42
43. DataFrame
● Il a été introduit pour la première fois dans la version 1.3 de Spark pour surmonter les
limitations du Spark RDD.
● Les DataFrames :
○ sont des structures de données tabulaires, similaires à des tables de DB
○ sont conçus pour bénéficier des optimisations de requête de Spark.
○ sont étroitement intégrés avec Spark SQL, ce qui signifie que vous pouvez effectuer
des opérations SQL directement sur les DataFrames
43
45. Différence entre Spark et PySpark :
● PySpark est une bibliothèque Python qui fournit une interface pour Apache
Spark, qui est un framework de traitement de données distribué et open
source.
● La principale différence entre les deux est que Spark est écrit en Scala, tandis
que PySpark permet aux développeurs d'utiliser Python pour interagir avec
Spark.
45