Apache Spark
Introduction Générale
Historique
Historique
• Apache Spark a été créé en 2009
• laboratoire UC Berkeley R&D Lab (appelé maintenant AMPLab)
• Devenu open-source en 2010.
• Il a intégré Apache Software Foundation en 2013
• Utilisé par Databriks pour trier des données massives faisant un
record en 2014
C’est quoi Spark?
• Plateforme open-source de traitement de données
• Assurer un traitement parallèle et distribué des données massives
• Réalise des traitement par lot (batch) ou à la volée (streaming)
• Permet d’intégrer tous les outils et technologies Big Data
• Hadoop, yarn, …
• Offre un traitement itératif et interactif
• Offre des API de haut niveau en Java, Scala, Python et R
• SQL, machine learning, …
Hadoop vs Spark
Traitement des données très lent Spark est 100 fois plus rapide que MR (In memory)
Traitement en lot seulement Traitement en lot et en streaming (temps réel)
Hadoop est écrit en Java: prend plus de temps Spark est écrit en Scala: beaucoup moins de lignes
d’exécution de code
Hadoop supporte l'authentification kerberos Spark prend en charge l'authentification par le
qui est difficile à gérer. biais d'un secret partagé.
Hadoop vs Spark
Composants de Spark
Composants de Spark
• Spark Core:
• Spark Core est le moteur d'exécu_on sous-jacent de la plateforme Spark, sur
lequel reposent toutes les autres fonc_onnalités.
• Il apporte des capacités de calcul en mémoire pour plus de rapidité
• Il apporte aussi un modèle d'exécu_on généralisé capable de prendre en
charge une vaste gamme d'applica_ons
• Con_ent des API Python, Scala et java pour un développement facilité.
Composants de Spark
• Spark SQL:
• Spark SQL permet d'exécuter des requêtes en langages SQL pour charger et
transformer des données.
• Spark Streaming:
• Spark Streaming offre à son u_lisateur un traitement des données en flux.
• MLlib:
• Bibliothèque de programmes de machine learning (appren_ssage automa_que)
adaptés à des données distribuées
• Graph X:
• C’est un moteur de calculs de graphes conçu sur la base de Spark. Il permet aux
u_lisateurs de concevoir, transformer et raisonner sur des données structurées en
graphes, de manière interac_ve et à toute échelle.
Composants de Spark
• Gestionnaire de ressources
• Permet l’interaction avec le système de fichier
• Attribuer les jobs spark aux différentes machines (nœuds)
• Standalone scheduler: propre à spark qui peut fonctionner sur un
système de fichier classique
• Yarn: gestionnaire de ressources de Hadoop
• Mesos: gestionnaire open source développé par l’université de
Berkeley
Architecture système de Spark
• Architecture maître/esclave
• Un master et plusieurs workers
• Processus Driver Program
• Coordonner et gérer l’ensemble des
applications spark
• Utilise spark context pour se
connecter au gestionnaire du cluster
• Chaque noeud (worker) contient
un à plusieurs Executors (un par
application)
• Chaque exécuteur peut contenir
plusieurs tasks (tâches)
Architecture système de Spark
• Le driver est essen_el pour l’applica_on
• Il exécute la fonc_on main() et est responsable de 3 choses :
• conserver les informa_ons rela_ves à l’applica_on
• répondre aux saisies u_lisateur ou aux demandes de programmes externes
• analyser, distribuer et ordonnancer les taches
• Un executor n’est responsable que de 2 choses : exécuter le code qui
lui est assigné par le driver et lui rapporter l’état d’avancement de la
tâche.
Architecture système de Spark
• Le driver est accessible programma_quement par un point d’entrée
appelé SparkSession (version 2.) , que l’on trouve derrière une
variable spark.
• Spark Session comprend également toutes les APIs disponibles dans
différents contextes :
• Spark Context,
• SQL Context,
• Streaming Context,
• Hive Context.
Architecture système de Spark
• master(): gestionnaire de ressources:
• sur cluster: Yarn ou Mesos
• Local[x] en mode standalone, x : nombre de cores CPU
• appName(): nom de l’application
• getOrCreate(): retourne un objet SparkSession
Caractéristiques de Spark
• Performance de traitement
• la réduc_on du nombre de lectures écritures sur le disque, la valorisa_on du
traitement en mémoire et l'u_lisa_on des mémoires cache et RAM pour les données
intermédiaires.
• Dynamicité
• Il est facile de développer des applica_ons parallèles, grâce aux opérateurs haut
niveau fournis par Spark (allant jusqu'à 80 opérateurs).
• Tolérance aux fautes
• Apache Spark fournit un mécanisme de tolérance aux fautes grâce aux RDD. Ces
structures en mémoire sont conçues pour récupérer les données en cas de panne.
• Traitement à 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.
Caractéris<ques de Spark
• Evaluations paresseuses (Lazy Evaluations)
• On n'exécute effectivement les transformations qu'au moment de lancer une action sur
les données
• Support de plusieurs langages
• Plusieurs langages de programmation sont supportés par Spark, tel que Java, R, Scala et
Python.
• Une communauté active et en expansion
• Des développeurs de plus de 50 entreprises sont impliqués dans le développement et
l'amélioration de Spark.
• Support d’analyses sophistiquées
• Spark est fourni avec un ensemble d'outils dédiés pour le streaming, les requêtes
interactives, le machine learning, etc.
• Intégration avec Hadoop
• Spark peut s'exécuter indépendamment ou sur Hadoop YARN, et profiter ainsi de la
puissance du système de fichiers distribué Hadoop HDFS.
Limites de Spark
• Pas de support pour le traitement en temps réel
• Spark permet le traitement en temps-presque-réel, car il utilise le traitement
en micro-lot plutôt que le traitement en streaming.
• Problèmes avec les fichiers de petite taille
• Spark partitionne le traitement sur plusieurs exécuteurs, et est optimisé
principalement pour les grands volumes de données.
• L'utiliser pour des fichiers de petite taille va rajouter un coût supplémentaire.
• Il est plus judicieux dans ce cas d'utiliser un traitement séquentiel classique
sur une seule machine.
Limites de Spark
• Pas de système de gestion des fichiers
• Spark est principalement un système de traitement, et ne fournit pas de solution
pour le stockage des données. Il doit donc se baser sur d'autres systèmes de
stockage tel que Hadoop HDFS ou Amazon S3
• Couteux
• En tant que système de traitement en mémoire, le coût d'exécuter Spark sur un
cluster peut être très élevé en terme de consommation mémoire
• Nombre d’algorithmes limité
• Malgré la disponibilité de la bibliothèque MLlib, elle reste limitée en termes de
nombre d'algorithmes implémentés.
• Latence assez élevée
• La latence de Spark pour l'exécution de Jobs à la volée est plus élevée que d'autres
solutions de traitement en streaming tel que Flink.
Spark: Installation sous Ubuntu 20.04 LTS
• $ sudo apt update
• $ java –version
• $ sudo apt install default-jdk
• $ sudo apt install scala
• $ cd /opt
• $ wget hvps://archive.apache.org/dist/spark/spark-3.0.2/spark-3.0.2-
bin-hadoop2.7.tgz
• $ sudo tar –xvzf spark-3.0.2-bin-hadoop2.7.tgz
Spark: Installa<on sous Ubuntu 20.04 LTS
• $ sudo mv spark-3.0.2-bin-hadoop2.7 /opt/spark
• $ sudo cd /opt/spark
• $ export SPARK_HOME=/opt/spark
• $ export PATH=$PATH:SPARK_HOME/bin:/SPARK_HOME/sbin
• $ cd bin
• $ ./spark-shell