Apache Spark
Spark : Plateforme Open-Source conçu pour le traitement distribué des données en mémoire.
Avantages : Rapidité par rapport à Hadoop Map Reduce, Traitement des opérations en mémoire,
Support multi-langages (API pour : Java, Python, R, Scala), Tolérance aux pannes, Simple à utiliser.
Écosystème Spark :
Mode d’exécution (Context) : Runs on Hadoop clusters (YARN) or on apache Mesos or as Stand-alone.
Spark Core : Gestion des RDD et exécution des applications (batch processing, map reduce).
Les bibliothèques de Spark :
Streaming : Traitement en temps réel des flux de données. (exp : les transactions financières)
DStreams : Séquence de RDD pour traiter des données en lots (on regroupe les données).
Mécanisme de traitement : Données reçues, divisées en lots, résultats générés en continu.
Fenêtres glissantes : Compatible avec les besoins, Micro-batch processing : Calculs par fenêtre
basés sur la taille de fenêtre et l'intervalle de glissement.
Sources de données : Kafka, Flume, HDFS, Kinesis, Twitter.
Destinations des résultats : HDFS, bases de données, tableaux de bord.
Spark SQL : requêtes SQL pour manipuler des données structurées sur des datasets massifs.
Langage supportés : SQL (BDD Relationnelles), Hive QL (requêtes simples limités), Scala (fonctions SQL)
Schéma RDD : RDD existants, Fichiers Parquet, JSON dataset, requêtes Hive QL
MLlib : Fournit des algorithmes de Machine Learning. (exp : clustering K-means, régression linéaire…)
GraphX : Analyse de graphes complexes pour des modèles. (exp : les réseaux sociaux ou logistiques)
Qui utilise Spark ?
Professions concernées :
Data Scientists : Pour créer et exécuter des modèles de Machine Learning et Statistiques.
Data Engineers : Pour construire des pipelines de données robustes.
Analystes : Pour explorer les données et découvrir des tendances.
Tout le monde : Les grandes entreprises, les startups, et les utilisateurs individuels.
Apache Spark modes :
1) Mode interactive (prompt) : le Context est initialisé automatiquement. (l’environnement de travail)
Scala : (Spark shell) scala> Langage natif de Spark, s’exécute sur Java Virtual Machine (JVM), optimisé
pour la performance, avec la propriété tout est un objet. (les nombres, les fonctions..)
Lancer le Scala shell : ./bin/spark-shell
La prompt (le terminal) : scala>
Lire un fichier texte : val textFile = sc.textFile ("README.md")
Python : (Pyspark ) >>> Simple et idéal pour le Machine Learning, à l’intégration d’applications.
Lancer le Scala shell : ./bin/pyspark
La prompt (le terminal) : >>>
Lire un fichier texte : textFile = sc.textFile ("README.md")
(Ctrl+D : quitter le shell)
Pour accéder à un cluster HDFS, on doit ajouter une dépendance au hadoop-client pour notre version de HDFS.
2) Mode développement / programmation (code) : Il faut initialiser le Context :
importer les bibliothèques > initialiser la configuration > initialiser le context (voir diapo 207-213) (diapo 217)
R : Spécialisé dans l’analyse statistique et les visualisations complexes.
Java : Fournit une solution robuste pour des applications d'entreprise, initialiser context avec Maven
Scala : Configuration, créer/initialiser context avec Maven.
Python : Langage interprété : initialiser context sans Maven. *Maven : fichier qui contient
les dépendances (libraries)
Fonction Lambda : une fonction anonyme utilisée une seule fois pour simplifier les opérations sur les RDD.
( exp : map, filter ou reduce) (rdd.map(lambda x: x * 2)
Les différentes façons pour déclarer Lambda (somme) :
A , B => A + B exp : rdd.reduce( (A, B) => A + B
-1 , 2 => -1 + 2 exp : rdd.reduce( -1 + 2 )
_+_ exp : rdd.reduce( _ + _ )
Lambda A , B : A + B exp : rdd.reduce(lambda A, B : A + B)
Composants clés de Spark :
RDD (Resilient Distributed Dataset) : RDD est une structure de données clé dans Spark,
collection immuable d’éléments à exécuter en parallele, offrant tolérance aux pannes grâce au suivi
des transformations. (*tolérance aux pannes : lors d’une panne, on laisse une trace, on va réexécuter la
dernière opération et on va réévaluer (en action) les valeurs manquantes.)
Directed Acyclic Graph (DAG) : Spark convertit les opérations des utilisateurs en un graphe orienté
acyclique (pas de retour à l’ancien) pour optimiser l’exécution des tâches.
Création des RDD : à partir d'un dataset existant, fonction parallelize ou transformation d'un RDD existant.
RDD Opérations ( voir diapo 190-199) :
Transformation : Créer un nouvel RDD sans exécuter immédiatement les calculs (lazy evaluation),
retourne un pointeur vers un élément RDD.
exp : map( func ) , filter( func ) , reduceByKey( func ) agrégation, join() jointure, flatMap().
Action : Déclencher les calculs et renvoyer un résultat. retourne un élément .
exp : count(), collect(), take().
Persistance : Garder les RDD dans la mémoire RAM pour la réutilisation / pour éviter le recalcul.
exp : Memory-Only() fastest, Memory-and-Disk(), Memory-Only-Ser() serialisation, Disk-Only()…
Les variables partagées (voir diapo 204) :
Read-Only : Variables immuables partagées, à ne pas modifier par tous les Workers
comme les Broadcast variables avec les algorithmes Broadcast.
Read-Write : Variables modifiables partagées entre les différents Workers, de type numérique
(somme, compteur) comme les Accumulators. read only by the driver en lecture finale,
pas de lecture en cours de l’exécution.
Fonctionnement pratique (voir diapo 204-218) :
1) Création du contexte Spark : Point d’entrée pour Spark (exp : SparkSession).
2) Chargement des données : Depuis des sources comme HDFS ou bases de données SQL.
3) Application des transformations et actions : map(), count()...
4) Exécution sur le cluster : Les tâches sont distribuées et exécutées parallèlement.
Architecture de Spark : Spark utilise une architecture distribuée maître-esclave avec :
Driver : Gère le contexte, alloue les ressources et coordonne les tâches.
Clusters Manager : Gère l’ensemble des Workers.
Workers (Executors) : Exécutent les tâches et stockent les données sur les nœuds de travail.
Apache Spark monitoring : Il existe 3 façons pour le monitoring (visualisation/surveillance) :
Web User Interface : Accéder à l'état des applications Spark en temps réel via un navigateur web.
Metrics : Basé sur Coda Hale Metrics Library, rapport vers des systèmes (HTTP, JMX, CSV) pour l’analyse.
Instruments Externes : Surveiller la performance du système (OS) et de la machine virtuelle Java (JVM).
Limites et défis de Spark :
Gestion mémoire : Utilisation excessive de la mémoire RAM.
Courbe d’apprentissage : Nécessite une connaissance des concepts distribués et du big data.
Coût infrastructurel : Nécessite des clusters performants pour maximiser les avantages.