Skip to content

Apache Spark

Overview

  • Système de traitement de données distribué open source
  • Conçu pour accélérer le traitement de données volumineuses
  • Charges de travail:
    • Traitement de lots
    • Traitement de flux de données
    • Apprentissage automatique
    • Analyse de graphes
  • Languages de programmation:
    • Java
    • Scala
    • Python
    • R
  • Process de setup:
    • Installer un cluster manager (= K8s)
    • Installer le runtime Spark
    • Configurer Spark pour utiliser le Cluster Manager
    • Tester l'installation

Distribution du calcul

  • Fonctionne sur des clusters de serveurs
  • Spark est écrit en utilisant une API de haut niveau
  • Les calculs sont exécutées sur les nœuds de manière distribuée en utilisant la RAM de chaque nœud
  • Spark gère automatiquement la répartition de la charge de travail entre les nœuds
  • Spark divise les données en partitions équitables pour les distribuer afin que les noeuds ne travaillent pas sur les mêmes données
  • Chaque partition est traitée de manière indépendante par un seul nœud à la fois
  • Spark utilise le "shuffling" pour réorganiser les données entre les nœuds afin que chaque nœud puisse traiter les partitions qu'il lui a été assignées.
  • Consolidation des résultats:
    • Chaque nœud traite ses partitions de manière indépendante et renvoie un résultat partiel
    • Pour obtenir le résultat final, Spark doit consolider les résultats partiels
    • Spark utilise des opérations de transformation et d'action pour traiter les données distribuées et consolider les résultats:
      • Les opérations de transformation sont utilisées pour transformer les données
      • Les opérations d'action sont utilisées pour déclencher le traitement et renvoyer les résultats
  • Execution d'un programme spécifique:
    • possible d'indiquer à Spark d'exécuter un programme spécifique pour une partition donnée plutôt que le programme principal
    • Utiliser la fonction mapPartitions()
    • = opération de transformation qui permet d'appliquer une fonction spécifique à chaque partition d'une RDD (Resilient Distributed Dataset)
  • Scale in/out:
    • gestionnaire de cluster => "Cluster Manager"
    • = une technologie compatible Apache Spark
    • ex: Apache Mesos, Hadoop YARN et Kubernetes
    • Le cluster manager est contrôlé par Spark

Programmation

  • Via l'API Spark (+ SDK)
  • S'occupe automatiquement de distribuer le traitement des données sur le cluster en fonction des traitements que vous avez programmés
  • API pour l'ingestion de données:
    • API Spark Core: coeur de Spark (ingestion txt, CSV, Parquet, JSON, Avro etc)
    • API Spark SQL: module pour intéragir avec les données en mode SQL
    • API Spark Streaming: Gestion des flux de données (Kafka, Flume, HDFS, Twitter)
    • API Spark Structured Streaming: extension Spark SQL pour gérer les données de flux comme si elles étaient structurées