Spark
Spark
Spark
Lotfi NAJDI
Année Universitaire 2022 / 2023
Finance et Ingénierie Décisionnelle
ENSA Agadir
Spark
Hadoop MapReduce
• Après chaque opération map ou reduce, le résultat est écrit à nouveau sur disque.
• L'écriture sur disque fournit la tolérance aux pannes, par contre les I/O sur disque
sont couteux (latence importante )
Spark is a fast, in-memory data processing engine suitable for use in a wide range of
circumstances.
Apache Spark is a unified analytics engine for large-scale data processing. Apache
Spark
Spark
Spark écrit les données en RAM et non pas sur disque
Apache Spark exécute les applications de manière très rapide en mémoire (par rapport à
Hadoop) .
Apache Spark
Spark?
• Spark SQL : Requêtes sur les données structurées
relationnelles
Apache Spark
Cluster Spark
• Driver program: Le processus qui exécute la méthode main (le point de départ du programme).
• La création du SparkContext constitue la première étape à faire car elle permet à une application Spark
d'établir une connexion avec l'environnement d’exécution de Spark et d’accéder au cluster Spark
(ressources de traitement) à l'aide du cluster manager.
• SparkConf permet de spécifier les paramètres de configuration avant la création du SparkContext (master
URL , application name ..etc)
Cluster Spark
• A l'aide du cluster manager, une application Spark est lancée sur un ensemble de
machines.
• Standalone Cluster Manager (cluster managers autonome intégré par défaut dans Spark).
• Une application Spark est une combinaison de Driver et de ses propres executors.
• Worker node: Tout nœud qui peut exécuter du code d'application dans le cluster
• Executor: Processus lancé ,pour une application sur un worker node, qui exécute des tâches et
conserve des données en mémoire ou sur disque pendant leur exécution. Chaque application
• Job : Un calcul parallèle composé de plusieurs tâches qui sont lancées en réponse à une action
Specifically, to run on a cluster, the SparkContext can connect to several types of cluster
managers (either Spark’s own standalone cluster manager, Mesos or YARN), which allocate
resources across applications.
Once connected, Spark acquires executors on nodes in the cluster, which are processes that run
computations and store data for your application.
• Un RDD est une collection de données calculée à partir d'une source et conservée en mémoire vive.
• La manipulation des RDDs permet de mettre en œuvre des tâches de bas niveau. En pratique nous
allons utiliser d’autres API permettant une abstraction de plus haut niveau comme la DataFrame
API.
• Sont dits Résilient car les RDD sont immuables (immutable ) c.-à-d. ne peuvent pas être modifiés
les RDD.
Manipulation des RDD
• Les actions sont des opérations qui renvoient un résultat final au driver ou bien
Les actions sont des opérations qui renvoient un résultat final au driver ou bien
enregistrent le résultat dans un système de stockage.
• collect
• take
• reduce
• forEach
• count
• save
Actions
• Les actions sont des instructions qui sont traitées par Spark au moment de
leur exécution.
• Une action consiste à exécuter une ou plusieurs tâches par les workers de
transformations
invocations.
• Les transformations ne sont exécutées que lorsque Spark reçoit une action.
efficace.
Spark: DataFrame
• Semblable à une table dans une base de données relationnelle ou bien à un data frame
en R/Python, mais avec de plus riches optimisations
Spark: DataFrame
• Les RDD constituent le modèle de données de base le plus utilisé par Spark
• API de bas niveau (low-level) qui propose deux types de méthodes : les
• En plus de l'API RDD, Spark offre une interface pour travailler sur des données
Transformations :
• select()
• filter() orderBy(), sort()
• distinct(), dropDuplicates()
• join ()
• groupBy ()
Actions
• Count()
• show()
• collect()
• take()
• write
RDD vs DataFrame
• RDD :
• Dataframe
• High-level abstractions
• Interface SQL
• Machine Learning
• Spark offre un écosystème très riche de services permettant de travailler sur les Big data
grâce à des API de haut niveau en accessibles via plusieurs langages de programmation
• Spark DataFrame constitue l’abstraction la plus pratique pour la manipulation des données
Streaming Data
Spark Streaming
• Spark Streaming is an extension of the core Spark API that enables scalable, high-
• Les données peuvent être consommées à partir de nombreuses sources comme Kafka,
Flume, Kinesis ou les sockets TCP
• Les données peuvent être traitées par tous les algorithmes Spark (ML , graph)
• Enfin, les données traitées peuvent être exportées vers des systèmes de fichiers, des
bases de données et des tableaux de bord en temps réel.
Spark Streaming
Spark Streaming reçoit des flux de données d'entrée en temps réel et répartit les
données en lots, qui sont ensuite traités par le moteur Spark pour générer le flux final de
résultats par lots.
DStream
Streaming.
• Les DStreams peuvent être créés soit à partir de flux de données d'entrée provenant
de sources telles que Kafka , flume HDFS , soit en appliquant des opérations de haut
You can use the Dataset/DataFrame API in Scala, Java, Python or R to express streaming
aggregations, event-time windows, stream-to-batch joins, etc. The computation is
executed on the same optimized Spark SQL engine.
Spark
Structured Streaming
databriks
Unbounded Tables
• Nouveau modèle de traitement des flux (stream processing) qui est très similaire à
un modèle de traitement par lots (batch processing ).
• Nous allons exprimer notre calcul de streaming sous la forme d'une requête (query)
standard de type batch sur cette table conceptuelle, comme s'il s'agissait d'une table
statique
Query
input for new data
Query: operations on input usual
map/filter/reduce, result up result up result up
aggregations, joins Result
to t = 1 to t = 2 to t = 3
Nouveau modèle de stream processing
Chaque fois que le "Result Table" est mis à jour, nous voudrions écrire les lignes de
résultats dans un collecteur externe.
t=1 t=2 t=3
Time
Query
Result: final operated table Result result up result up result up
updated after every trigger to t = 1 to t = 2 to t = 3
Append output: write only new rows that got added to result table since previous batch
Quer
y
Result result up result up result up
to t = 1 to t = 2 to t = 3
Output
[append mode] write new rows since last trigger to storage
Nouveau modèle de stream processing
Query
Result result up result up result up
to t = 1 to t = 2 to t = 3
Output
[complete mode]
write all rows in result table to storage
API - Dataset/DataFrame
Une seule API pour faire à la fois des traitements batch et streaming
input = spark.read
.format("json") Lecture d’un fichier source json
.load("source-path")
result = input
.select("device", "signal") Query: projection , Filtre
.where("signal > 15")
result.write
.format("parquet") Ecriture dans un fichier parquet
.save("dest-path")
Streaming Queries avec DataFrames
result = input
.select("device", "signal") Query : projection , Filtre
.where("signal > 15")
t =1 t =2 t =3
input = spark.readStream Streaming
.format("json") Source
.load("source-path")
new files
new files
new files
process
process
process
.where("signal > 15")
Filter
result.writeStream signal >15
.format("parquet")
.start("dest-path") Streaming
Sink
Making-structured-streaming-ready-for-production