Introduction à Apache Spark - Atelier Apache Spark

Ce matériel présente une introduction complète à Apache Spark, une plateforme de traitement de données massives sur cluster. Il s'adresse aux étudiants et professionnels souhaitant comprendre les bases, l'architecture, les composants, les caractéristiques ainsi que les limitations de Spark dans le contexte du Big Data.

D'après le document Introduction à Apache Spark - Atelier Apache Spark

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Introduction à Apache Spark - Atelier Apache Spark

Document source

Introduction à Apache Spark - Atelier Apache Spark

Big Data Processing · PDF · 7 pages · 2021

Afficher l'aperçu du document

Consulter le document original →

Ce matériel présente une introduction complète à Apache Spark, une plateforme de traitement de données massives sur cluster. Il s'adresse aux étudiants et professionnels souhaitant comprendre les bases, l'architecture, les composants, les caractéristiques ainsi que les limitations de Spark dans le contexte du Big Data.

Présentation d'Apache Spark

Apache Spark est une plateforme de traitement sur cluster générique, libre et open-source, conçue pour le traitement parallèle et distribué de grandes quantités de données. Il permet de réaliser des traitements par lot (batch processing) ou à la volée (stream processing) et offre une API de développement pour le streaming, l'apprentissage automatique et la gestion de requêtes SQL. Spark peut accéder aux sources de données Hadoop et s'exécuter sur un cluster Hadoop, tirant parti du système de fichiers distribué HDFS.

Contrairement à Hadoop Map Reduce, Spark propose des performances supérieures grâce au traitement en mémoire (in-memory processing), ce qui permet des traitements itératifs, interactifs et en temps quasi réel. Il supporte plusieurs langages de programmation : Java, Scala, Python et R.

Créé en 2009 au laboratoire UC Berkeley (AMPLab), Spark est devenu open-source en 2010 et a intégré la fondation Apache en 2013, devenant un projet de haut niveau en 2014.

Composants d'Apache Spark

Apache Spark repose sur une architecture en couches, composée de plusieurs composants clés :

  • Spark Core : Le cœur de Spark, fournissant la plateforme d'exécution pour toutes les applications Spark et supportant un large éventail d'applications.
  • Spark SQL : Permet l'utilisation de requêtes SQL/HQL sur des données structurées et semi-structurées avec des performances améliorées.
  • Spark Streaming : Facilite la création d'applications d'analyse de données interactives en traitant les flux de données sous forme de micro-lots.
  • Spark MLlib : Bibliothèque d'apprentissage automatique offrant des algorithmes performants pour le machine learning, optimisés pour le traitement en mémoire.
  • Spark GraphX : Moteur d'exécution pour le traitement scalable de graphes, basé sur Spark Core.

Architecture de Spark

Les applications Spark s'exécutent sous forme d'ensembles indépendants de processus sur un cluster, coordonnés par un objet appelé SparkContext dans le programme principal (driver program).

Le SparkContext peut se connecter à différents gestionnaires de clusters :

  • Gestionnaire autonome Spark (inclus dans Spark, simple à déployer)
  • Apache Mesos (gestionnaire général pouvant aussi tourner sur Hadoop Map Reduce)
  • Hadoop YARN (gestionnaire de ressources de Hadoop 2)
  • Kubernetes (système open-source pour le déploiement et la gestion d'applications conteneurisées)

Ces gestionnaires allouent les ressources nécessaires à l'exécution des applications Spark. Spark lance des exécuteurs sur les nœuds du cluster, qui exécutent les tâches et stockent les données pour les applications. Le code de l'application est envoyé aux exécuteurs, qui exécutent les tâches sur plusieurs threads.

Chaque application possède ses propres exécuteurs isolés, ce qui signifie que les applications Spark ne peuvent pas échanger directement des données sans passer par un stockage externe.

Enfin, Spark est indépendant du gestionnaire de cluster sous-jacent, ce qui lui permet de gérer ses ressources en parallèle avec d'autres applications, même non-Spark.

Exemple d'architecture

Supposons une application Spark qui analyse un grand jeu de données stocké sur HDFS. Le SparkContext se connecte au gestionnaire YARN, qui alloue des ressources sur plusieurs nœuds. Spark lance des exécuteurs sur ces nœuds, envoie le code de l'application et distribue les tâches. Chaque exécuteur traite sa part des données en mémoire, puis renvoie les résultats au driver.

Caractéristiques principales d'Apache Spark

  • Performance de traitement : Spark peut être jusqu'à 100 fois plus rapide que Hadoop Map Reduce grâce au traitement en mémoire, à la réduction des lectures/écritures disque et à l'utilisation de caches.
  • Dynamicité : Le développement d'applications parallèles est facilité par environ 80 opérateurs haut niveau disponibles dans Spark.
  • Tolérance aux fautes : Les RDD (Resilient Distributed Datasets) permettent de récupérer les données en cas de panne.
  • Traitement à la volée : Spark supporte le traitement en streaming via le traitement en micro-lots, contrairement à Hadoop Map Reduce qui est limité au batch.
  • Évaluations paresseuses (Lazy Evaluations) : Les transformations sur les RDD ne sont pas exécutées immédiatement, mais seulement lorsqu'une action est lancée, ce qui optimise les traitements.
  • Support multi-langages : Java, Scala, Python et R sont supportés.
  • Communauté active : Plus de 50 entreprises contribuent au développement de Spark, assurant une évolution constante.
  • Support d'analyses sophistiquées : Outils intégré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, utilisant HDFS pour le stockage.

Exemple d'évaluation paresseuse

Supposons que l'on crée un RDD à partir d'un fichier texte, puis qu'on applique une transformation pour filtrer les lignes contenant un mot clé :

val lines = sc.textFile("data.txt")
val filtered = lines.filter(line => line.contains("Spark"))

Cette transformation filter est paresseuse : elle ne déclenche pas le traitement. Ce n'est qu'en appelant une action, par exemple :

filtered.count()

que Spark exécute réellement les opérations pour compter les lignes filtrées.

Limitations d'Apache Spark

  • Pas de traitement en temps réel strict : Spark utilise le traitement en micro-lots, ce qui induit une latence plus élevée que des solutions de streaming natives comme Flink.
  • Problèmes avec les petits fichiers : Spark est optimisé pour les gros volumes de données. Traiter de petits fichiers peut engendrer un surcoût important, rendant un traitement séquentiel plus efficace dans ce cas.
  • Absence de système de gestion des fichiers : Spark ne fournit pas de solution de stockage, il doit s'appuyer sur des systèmes externes comme HDFS ou Amazon S3.
  • Coût élevé : Le traitement en mémoire nécessite une importante consommation de ressources mémoire, ce qui peut être coûteux sur un cluster.
  • Nombre limité d'algorithmes ML : La bibliothèque MLlib, bien que riche, reste limitée en termes d'algorithmes disponibles.
  • Latence plus élevée pour le streaming : La latence des jobs à la volée est plus importante que celle d'autres plateformes spécialisées dans le streaming.

Glossaire des termes clés

  • Apache Spark : Plateforme open-source de traitement distribué de données massives.
  • Batch processing : Traitement par lots de données statiques.
  • Stream processing : Traitement continu de flux de données en temps quasi réel.
  • SparkContext : Objet principal coordonnant l'exécution des applications Spark sur un cluster.
  • Gestionnaire de cluster (Cluster Manager) : Système allouant les ressources du cluster aux applications Spark (ex : YARN, Mesos, Kubernetes).
  • Exécuteur (Executor) : Processus lancé sur un nœud du cluster qui exécute les tâches Spark et stocke les données intermédiaires.
  • RDD (Resilient Distributed Dataset) : Structure de données distribuée en mémoire, tolérante aux fautes, utilisée par Spark.
  • Évaluation paresseuse (Lazy Evaluation) : Mécanisme où les transformations sur les RDD ne sont exécutées qu'au moment d'une action.
  • MLlib : Bibliothèque d'apprentissage automatique intégrée à Spark.
  • HDFS : Hadoop Distributed File System, système de fichiers distribué utilisé pour le stockage des données.

Points clés à retenir

  • Apache Spark est une plateforme puissante pour le traitement distribué de données massives, combinant vitesse et flexibilité.
  • Son architecture modulaire comprend plusieurs composants adaptés à différents types de traitements (SQL, streaming, machine learning, graphes).
  • Le traitement en mémoire et l'évaluation paresseuse sont au cœur des performances de Spark.
  • Spark s'intègre facilement avec les systèmes Big Data existants, notamment Hadoop et ses gestionnaires de clusters.
  • Malgré ses avantages, Spark présente des limitations, notamment en termes de latence pour le streaming et de gestion des petits fichiers.
  • La communauté active et le support multi-langages font de Spark un outil incontournable dans le domaine du Big Data.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions