Découvrir Spark

Effectué

À son cœur, Spark est un moteur de traitement des données, ce qui signifie qu’il permet aux ingénieurs de données d’extraire, de transformer et d’analyser efficacement des jeux de données massifs sur des systèmes distribués. Ce qui la distingue est sa capacité à unifier différents types de charges de travail de données dans un même framework. Avec Spark, vous n’avez pas besoin de systèmes distincts pour la diffusion en continu en temps réel, le traitement par lots, les requêtes SQL ou le Machine Learning. Tout peut être fait dans Spark avec un ensemble cohérent d’API.

Une autre force réside dans sa facilité d’utilisation. Spark prend en charge plusieurs langages de programmation, notamment Python, Java, Scala et R. Si vous êtes déjà à l’aise avec Python, vous pouvez utiliser PySpark, l’interface Python pour Spark, pour commencer à analyser immédiatement les données.

Peut-être plus important encore, Spark a été conçu avec une scalabilité à l’esprit. Vous pouvez commencer à expérimenter sur votre ordinateur local, puis, sans modifier votre code, exécutez la même application sur un cluster de centaines ou de milliers d’ordinateurs.

Écosystème de Spark

Bien que les gens parlent souvent de Spark comme une seule chose, il s’agit en fait d’un écosystème de bibliothèques basées sur le moteur principal :

  • Spark Core fournit la base de l’informatique distribuée, notamment la planification des tâches, la gestion de la mémoire et la récupération des erreurs.

  • Spark SQL vous permet d’utiliser des données structurées à l’aide d’un langage que la plupart des analystes connaissent déjà : SQL. Il s’intègre également à des sources de données externes telles que Hive, Parquet et JSON.

  • Spark Streaming vous permet de traiter des données en quasi-temps réel, ce qui est utile pour les applications telles que la détection de fraude ou la surveillance des journaux système.

  • MLlib est la bibliothèque Machine Learning de Spark. Il fournit des implémentations évolutives d’algorithmes pour la classification, le clustering, la régression et la recommandation.

  • GraphX est utilisé pour le calcul de graphe, comme l’analyse des réseaux sociaux ou la modélisation des relations entre les entités.

Diagramme des bibliothèques Spark.

Ensemble, ces composants rendent Spark une solution unique pour la plupart des problèmes de Big Data.

Comment Spark fonctionne

Vous vous demandez peut-être : pourquoi devrais-je écrire un programme Spark en premier lieu ? La réponse est l'échelle. Lorsque votre jeu de données est trop volumineux pour tenir dans la mémoire d'une seule machine, ou lorsque vous avez besoin d'effectuer des calculs beaucoup plus rapidement que les outils traditionnels tels que Pandas ou Excel peuvent gérer, Spark intervient. Spark vous permet d’écrire du code très similaire à l’utilisation de données locales, mais il distribue automatiquement ce code sur de nombreux ordinateurs d’un cluster. Le résultat est que vous pouvez analyser des gigaoctets, des téraoctets ou même des pétaoctets de données sans réécrire votre logique chaque fois que le jeu de données augmente.

Supposons que votre entreprise stocke des données de flux de site web dans Azure Data Lake Storage. Vous souhaitez comprendre le comportement du client en filtrant tous les clics des dernières 24 heures, en joignant cela à une table de profil utilisateur, puis en calculant les cinq premières catégories de produits les plus visitées.

Voici ce qui se passe lorsque vous implémentez ceci dans Databricks :

  • Votre notebook contient le code que vous avez écrit en Python (PySpark), et cela s’exécute sur le programme de pilote. Le pilote est chargé de transformer vos commandes de haut niveau (telles que le filtrage des lignes ou le regroupement de données) en un plan de tâches plus petites.

  • Le gestionnaire de cluster affecte ensuite ces tâches à différents exécuteurs. Chaque exécuteur est un processus de travail s’exécutant sur un ordinateur de votre cluster. Les clusters Apache Spark sont des groupes de serveurs interconnectés qui sont traités comme un moteur de calcul unique et gèrent l’exécution des commandes émises à partir de notebooks. Un exécuteur peut filtrer les clics d’hier pour les ID utilisateur 1 à 100 000, un autre exécuteur (sur le même ou un autre serveur) pour les ID 100 001 à 200 000, et ainsi de suite.

  • Une fois que tous les exécuteurs terminent leur partie du travail, Spark collecte les résultats, les combine et vous donne un DataFrame propre affichant les principales catégories de produits.

Diagramme montrant l’architecture Spark.

De votre point de vue en tant qu’ingénieur données, vous écrivez simplement du code DataFrame familier dans votre notebook Databricks. Spark s’occupe de distribuer les données, de paralléliser le calcul et de réessayer des tâches en cas d’échec dans le cluster. Cette conception rend Spark accessible, presque comme vous travaillez avec des outils de données locaux, mais sous le capot, il orchestre un calcul hautement parallèle et tolérant aux pannes sur des centaines de machines potentiellement.

Évaluation différée et le DAG

L’un des choix de conception les plus importants de Spark est l’évaluation différée. Contrairement aux outils tels que Pandas, où chaque opération s’exécute immédiatement, Spark n’exécute pas vos commandes dès que vous les écrivez. Au lieu de cela, lorsque vous appliquez des transformations, comme le filtrage de lignes, la jointure de tables ou la sélection de colonnes, Spark enregistre simplement ces opérations dans un plan. Rien n’est encore calculé. Cette approche permet à Spark d’examiner la séquence complète d’opérations avant de décider de la façon la plus efficace de les exécuter.

En arrière-plan, Spark génère un graphe acyclique dirigé (DAG) d’opérations. Chaque nœud du graphique représente un jeu de données, et chaque bord représente une transformation appliquée à ce jeu de données. Étant donné que le graphique est acyclique, il circule dans une direction , de vos données d’entrée brutes au résultat final, sans boucler sur lui-même. L’optimiseur spark analyse ce DAG pour combiner les étapes, réduire le déplacement des données et déterminer la meilleure stratégie d’exécution sur le cluster.

Diagramme montrant un graphe acyclique dirigé Spark (DAG).

L’exécution commence uniquement lorsque vous effectuez une action, telle que la collecte des résultats dans le pilote, l’écriture de données dans le stockage ou le comptage de lignes. À ce stade, Spark envoie le DAG optimisé en tant que série de tâches au gestionnaire de cluster, qui les distribue entre les exécuteurs. Cette conception permet à Spark d’obtenir des performances élevées : elle évite les calculs inutiles, réduit le shuffling des données entre les nœuds et garantit que les ressources de cluster sont utilisées aussi efficacement que possible.

Cas d'usage réels

Les organisations de nombreux secteurs utilisent Spark chaque fois qu’elles ont besoin de traiter et d’analyser des jeux de données volumineux ou en déplacement rapide. Par exemple, un service de streaming vidéo peut utiliser Spark pour créer un moteur de recommandation qui suggère un nouveau contenu basé sur l’historique d’affichage. Une institution financière peut s’appuyer sur Spark Streaming pour surveiller les transactions en temps réel et signaler les activités suspectes. Dans le secteur de la santé, les chercheurs peuvent utiliser Spark pour analyser les données génétiques à grande échelle afin d’identifier les modèles liés aux maladies. Même dans les paramètres métier plus traditionnels, Spark joue souvent un rôle dans la préparation et la transformation des données opérationnelles brutes afin qu’elles puissent être utilisées pour les tableaux de bord et les rapports.

D’autres applications courantes incluent l’analyse de grands volumes de journaux de serveur web, l’alimentation des tableaux de bord en temps réel pour les appareils Internet des objets (IoT), l’apprentissage de modèles Machine Learning sur des jeux de données très volumineux et la création de pipelines ETL qui extraient, nettoient et combinent des données brutes à partir de plusieurs sources.

Options de compatibilité et de déploiement

L’une des forces de Spark est qu’elle ne vous verrouille pas dans une seule infrastructure. Au lieu de cela, il est conçu pour s’exécuter sur un large éventail de systèmes distribués, ce qui vous donne une flexibilité quant à la façon et à l’endroit où vous le déployez. Au niveau le plus simple, Spark peut s’exécuter localement sur votre propre ordinateur, ce qui facilite l’expérimentation de petits jeux de données ou l’apprentissage des concepts de base sans configurer de cluster. Lorsque vous avez besoin d’une plus grande puissance, vous pouvez effectuer un scale-out en exécutant Spark sur un cluster autonome de machines, ou l’intégrer à des gestionnaires de ressources tels que Hadoop YARN ou Apache Mesos, qui gèrent la planification et l’allocation des ressources.

Dans le cloud, Spark est largement pris en charge parmi les fournisseurs. Par exemple, les services comme Azure Databricks, Azure Synapse Analytics et Microsoft Fabric facilitent le lancement de clusters Spark sans vous soucier des détails de la configuration et de la gestion des clusters. Spark est également de plus en plus déployé sur Kubernetes, ce qui permet aux organisations de conteneuriser leurs applications Spark et de les exécuter dans des environnements modernes natifs cloud. Cette flexibilité signifie que, à mesure que vos besoins évoluent , du développement local aux clusters locaux, aux déploiements cloud à grande échelle, vous pouvez continuer à utiliser les mêmes applications Spark sans les réécrire pour une autre plateforme.