Aller au contenu principal
Version: 1.3.1.0

Aperçu d'Apache Spark

Apache Spark est un moteur d'analytique unifié conçu pour le traitement de données à grande échelle. Il offre une plateforme unique qui gère le traitement par lots, l'analytique SQL, le traitement de flux, l'apprentissage automatique et le calcul sur graphes — éliminant le besoin de maintenir des systèmes séparés pour chaque type de charge de travail. ODP 1.3.1.0 embarque Spark 3.5.6.

Qu'est-ce que Spark ?

Spark traite les données en mémoire en utilisant une abstraction de collection distribuée. Plutôt que d'écrire les résultats intermédiaires sur disque entre les étapes (comme le fait MapReduce), Spark conserve les données en RAM tout au long des opérations, réduisant considérablement les E/S. Une application Spark s'exécute comme un processus driver qui coordonne un ensemble de processus exécuteurs distribués sur le cluster YARN.

APIs principales

RDD (Resilient Distributed Dataset)

Le RDD est l'abstraction de données fondamentale de Spark : une collection immuable et partitionnée d'enregistrements sur lesquels on peut opérer en parallèle. Les RDDs suivent leur lignage (la séquence de transformations qui les a produits), ce qui permet de recalculer les partitions perdues à partir des données d'origine sans réplication. Bien que la plupart des nouveaux codes utilisent des DataFrames, les RDDs restent la primitive d'exécution sous-jacente.

APIs DataFrame et Dataset

Les DataFrames sont des collections distribuées de données organisées en colonnes nommées — conceptuellement équivalentes à une table dans une base de données relationnelle. L'optimiseur Catalyst optimise automatiquement les opérations sur les DataFrames (pushdown de prédicats, élagage de colonnes, réordonnancement des jointures), produisant des plans physiques efficaces quelle que soit l'ordre dans lequel les transformations sont écrites.

Les Datasets étendent les DataFrames avec une sécurité de type à la compilation utilisant des objets JVM. Ils sont principalement utilisés en Java et Scala ; les utilisateurs Python et R travaillent avec des DataFrames.

Spark SQL

Spark SQL permet de mélanger librement des requêtes SQL avec des opérations DataFrame. Une seule application peut charger des données depuis HDFS, les filtrer avec une clause SQL WHERE, les joindre avec une table du Hive Metastore et écrire le résultat dans Iceberg — le tout dans un seul job Spark. Spark SQL supporte le dialecte HiveQL et utilise le Hive Metastore pour la résolution des schémas lorsqu'il est déployé avec ODP.

Spark Streaming (Structured Streaming)

Structured Streaming modélise un flux de données en direct comme une table non bornée qui croît dans le temps. Les requêtes écrites contre cette table utilisent la même API DataFrame/SQL que les jobs par lots, rendant le traitement de flux accessible aux ingénieurs familiers avec l'analytique par lots. Structured Streaming fournit :

  • Sémantique exactly-once via des journaux d'écriture anticipée et des sinks idempotents
  • Filigranage (watermarking) pour gérer les événements arrivant en retard
  • Opérations avec état (agrégations sur fenêtres, sessionisation, jointures flux-flux)
  • Intégration native avec Apache Kafka en tant que source et sink

Dans ODP, Spark Structured Streaming est l'approche recommandée pour construire des pipelines temps-réel qui consomment depuis Kafka et écrivent dans des tables ACID Hive ou Iceberg.

Spark MLlib

MLlib est la bibliothèque d'apprentissage automatique évolutive de Spark. Elle fournit :

  • Des algorithmes de classification, régression, clustering et recommandation
  • Des pipelines d'ingénierie des caractéristiques (tokenisation, mise à l'échelle, encodage, ACP)
  • La sélection de modèles via la validation croisée et l'optimisation des hyperparamètres
  • ML Pipelines : une API inspirée de scikit-learn pour composer et persister des workflows ML multi-étapes

MLlib s'adapte aux jeux de données qui ne tiennent pas en mémoire sur une seule machine en distribuant le calcul sur le cluster. Pour les équipes qui construisent des modèles ML sur des données stockées dans Hadoop, MLlib élimine l'étape d'exportation des données vers une plateforme ML autonome.

Spark 3.5.6 dans ODP

ODP 1.3.1.0 livre Spark 3.5.6 avec les intégrations suivantes préconfigurées :

  • Hive Metastore : Spark utilise le Hive Metastore ODP comme catalogue par défaut pour la résolution des tables et la gestion des schémas.
  • Hive Warehouse Connector (HWC) : Permet les lectures et écritures transactionnelles dans les tables ACID Hive. Voir l'Aperçu de Hive pour les détails.
  • Kerberos : Les jobs Spark soumis à YARN s'authentifient automatiquement en utilisant la configuration Kerberos du cluster.
  • Plugin Ranger : Les requêtes Spark SQL sont soumises aux politiques d'accès au niveau colonne et au niveau ligne de Ranger.
  • Allocation dynamique des ressources : Les exécuteurs Spark sont demandés et libérés en fonction de la charge de travail, améliorant l'utilisation du cluster.

Support natif d'Iceberg

Spark 3.5.6 inclut l'Iceberg Spark Runtime nativement intégré dans ODP. Spark peut lire et écrire des tables Iceberg en utilisant l'API DataFrame standard :

# Écriture
df.writeTo("catalog.db.evenements").using("iceberg").createOrReplace()

# Lecture avec voyage dans le temps
spark.read.option("as-of-timestamp", "2025-01-01").table("catalog.db.evenements")

Comme les tables Iceberg écrites par Spark partagent les mêmes métadonnées avec Hive, Impala et Trino, les données produites par les pipelines Spark sont immédiatement interrogeables par les analystes utilisant des outils SQL sans aucune conversion de format.

Exécution sur YARN

Dans ODP, Spark s'exécute sur YARN en mode client (driver sur la machine de soumission) ou cluster (driver dans un conteneur YARN). YARN fournit :

  • L'isolation des ressources entre Spark et les autres charges de travail
  • Des files d'attente du Capacity Scheduler pour la gestion des priorités multi-tenant
  • L'intégration avec les jetons de délégation Kerberos pour un accès sécurisé aux données

Support Kubernetes (à venir dans ODP 1.3.2.0)

Le support pour l'exécution de Spark sur Kubernetes comme alternative à YARN est prévu pour ODP 1.3.2.0. Cela permettra aux charges de travail Spark de s'exécuter dans des environnements conteneurisés aux côtés du cluster YARN existant, supportant des modèles de déploiement hybrides.