[Big Data] Spark: concepts généraux

Ce billet présente Apache Spark.

Pour comprendre les concepts associés aux Big Data, à Hadoop,… vous pouvez aller ici.

 

Présentation de Spark

Spark : késako ?

Spark est un système de traitement distribué de gros volumes de données construit autour de la vitesse, de la facilité d’utilisation, et de l’analyse temps-réel. Il a été développé, à l’origine, en 2009 au sein de l’AMPLab de l’UC Berkeley, avant d’être rendu open source en 2010 en tant que projet Apache.

 

Mais pourquoi Spark ?

Hadoop, comme vu ici, est un système distribué qui, grâce à sa technologie MapReduce, permet de traiter de gros volumes de données de façon parallèle.

Pour rappel, une opération MapReduce possède 2 phases-clés : Map et Reduce effectués en mode batch dont le résultat est stocké au sein d’un système de fichiers appelé HDFS (ou assimilé, comme MapRDFS pour MapR).

Spark présente plusieurs avantages par rapport à Hadoop MapReduce :

  1. Performance à Spark offre des performances jusqu’à 100 fois plus rapides en mémoire et jusqu’à 10 fois plus rapides sur disque (source : Apache Software Foundation). Techniquement parlant, Spark utilise les concepts de RDD et de DAG pour optimiser ses traitements (voir plus loin).
  2. Productivité à Spark inclut un mode interactif et supporte au moins 80 opérateurs de haut-niveau et une variété de langages de programmation puissants (Java, Scala, Python, notamment).
  3. Streaming temps-réel à Là où MapReduce est une opération qui se limite essentiellement au traitement d’un batch de données stockées à la fois, Spark permet également de traiter des flux continus de données, grâce à son extension Spark Streaming.
  4. Polyvalence à En plus des opérations traditionnelles de types Map et Reduce, Spark supporte le scripting SQL (via Spark SQL, ex-Shark), le Machine Learning, (via la librairie incluse MLlib) le traitement graphique de données (graph data processing, via GraphX),… là où Hadoop MapReduce doit passer par des technologies complémentaires (Mahout pour le Machine Learning, par exemple).
  5. Ergonomie à Spark est beaucoup moins complexe à administrer (gouvernance de ressources, débogage, archivage et monitoring de logs, etc…) qu’un cluster Hadoop notoirement austère, bien qu’il existe des plateformes d’administration interactives en complément conçues par quelques éditeurs (Hortonworks, Cloudera, MapR…).
Spark peut être vu comme le couteau suisse du traitement de données, capable de faire un maximum de choses, y compris du MapReduce, là où MapReduce serait plutôt le couteau de commandos du traitement de batches.

Pour connaître quelques cas d’utilisation de Spark, vous pouvez aller ici : https://cwiki.apache.org/confluence/display/SPARK/Powered+By+Spark.

 

Fonctionnement général de Spark

Présentation de l’écosystème Spark

Spark possède un ensemble de bibliothèques lui permettant de renforcer ses possibilités en matière d’analyse Big Data et de Machine Learning.

 


Les couches principales de base sont :

  • Spark SQL, qui permet à Spark d’exposer des jeux de données à travers l’API JDBC et de les requêter avec des scripts se rapprochant du langage SQL. Cette bibliothèque permet également d’effectuer des opérations ETL sur des données de formats divers (JSON, une base de données, etc…).
  • Spark Streaming, qui permet de traiter des flux de données en temps-réel, via une approche de micro-batching.
  • Spark MLlib, qui permet d’utiliser nativement des algorithmes communs au domaine du Machine Learning (classification, régression, clustering, etc…). Il s’agit d’une bibliothèque principalement dédiée à l’analyse prédictive.
  • Spark GraphX, qui permet d’étendre les propriétés des RDD en introduisant le concept de RDPG (Resilient Distributed Property Graph). Il s’agit d’une bibliothèque de calculs graphiques parallèles, très utilisé dans le traitement d’une variété de données souvent volumineuses (réseaux sociaux, où des graphes de corrélations sont utilisés pour traiter les connexions entre utilisateurs ; l’astrophysique, pour établir une corrélation de planètes et de galaxies ; réseau, pour détermination du plus court chemin graphique pour faire transiter un paquet de données au sein d’un internet à fort traffic ;…).
    • Pour comprendre les raisons de sa création et de son introduction au sein de l’écosystème Spark, plus de détails ici.
    • Pour en savoir plus sur la partie programmation, vous pouvez aller ici. 
  • SparkR, qui permet d’utiliser le langage de programmation phare du monde statistique : R.

A celles-ci s’ajoutent des couches supplémentaires comme :

  • BlinkDB, qui est un moteur de requêtes permettant d’effectuer du requêtage SQL massivement parallèle et de façon interative sur un large volume de données, avec prise en compte des erreurs et de la précision des temps de réponse.
  • Tachyon, qui est un système de fichiers distribué orienté mémoire, permettant un partage optimal de fichiers/données à travers différents nœuds ou clusters. La mise-en-cache de fichiers contenant un jeu de données significatifs favorise l’accès rapide, en réduisant les temps I/O.
La liste est non-exhaustive (il existe des bibliothèques NoSQL intégrées pour Cassandra,… par exemple), Spark étant, à l’heure de l’écriture du billet, en perpétuelle évolution.

 

Présentation de l’architecture et des fonctionnalités de Spark

    Au cœur du moteur Spark

Comme indiqué plus haut, l’architecture du moteur Spark est basée sur 2 concepts-clés : RDD et DAG.

Le concept d’ensembles de données résilients RDD (Resilient Distributed Datasets) permet de conserver des données en mémoire et de les préserver du disque si nécessaire, favorisant ainsi la réduction considérable des temps I/O, grâce à un système de caching sophistiqué. Les RDD sont principalement de deux types :

  • Hadoop datasets à ensembles de données créés à partir de fichiers stockés au sein du système de fichiers HDFS.
  • Scala collections à collections de données du package scala.collection.

En matière d’opérations, les RDDs en supportent deux en particulier : les transformations (map, filter, sample,…) qui permettent de créer des datasets à partir des entrées et les actions (count, reduce, first,…) qui permettent de retourner un résultat (ou une valeur) après exécution de calculs sur les datasets transformés.

Notons que :

  • Les RDDs peuvent être vus, par analogie, comme des tables d’une base de données.
  • Les RDDs peuvent supporter un maximum de types de données.
  • Spark stocke les données des RDDs à travers différentes partitions.
  • Les RDDs sont réputés tolérants aux pannes, car capables de recréer et de recalculer les datasets en cas de reprise.
  • Les RDDs sont immutables : il est possible de modifier un RDD avec une opération de transformation, sauf que cette dernière retournera un nouveau RDD laissant l’original inchangé.

Le concept de graphes acycliques distribués DAG (Distributed Acyclic Graph) sur lequel sont basés les modèles d’exécution des jobs Spark permet de réaliser des opérations multi-étapes plus optimisées. Concrètement, un DAG peut être vu comme l’anatomie d’un job, sachant que dans le cas d’un job MapReduce traditionnel, 2 étapes sont prédéfinies (Map et Reduce), tandis que dans le cas d’un job Spark, il peut y avoir un certain nombre d’étapes.

De cette manière, dans le cas de l’exécution d’opérations complexes multi-étapes, un job Spark est en mesure de se terminer plus vite qu’un MapReduce, ce dernier nécessitant plusieurs jobs.

Notons que :

  • Les données peuvent être partagées en mémoire à travers plusieurs DAGs, permettant ainsi à différents jobs Spark de travailler avec la même donnée, en parallèle.

 

    Architecture générale de Spark

Spark est constitué de 3 composants principaux formant son architecture générale :

  • Un système de stockage à Spark peut utiliser HDFS le rendant ainsi interopérable avec l’écosystème Hadoop. Spark peut également utiliser d’autres systèmes de stockage comme celui en mémoire appelé Tachyon et déjà abordé plus haut.
  • Une API à Spark fournit une interface de développement permettant de créer des programmes Spark-compliant. Les principaux langages de programmation sont Scala, Java et Python.
  • Une plateforme de gestion de ressources à Spark peut être basé sur un serveur standalone, ou sur un système distribué (Mesos, YARN,…).

 

Pour aller plus loin…

Gardez un œil ici. D’autres articles autour du Big Data y seront pondus, y compris de nouvelles démonstrations techniques, comme l’utilisation de Spark en environnement Azure.

Si vous souhaitez approfondir votre lecture, vous pouvez également consulter la documentation officielle : https://spark.apache.org/documentation/Concepts.html.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s