Téléphone Next Decision02.34.09.31.70

Contact Next Decisioncontact@nextdecision.fr

Spark

Apache Spark

Présentation et concept de Spark

Spark constitue la nouvelle brique In-Memory des distributions Hadoop. Grâce à la richesse de ses bibliothèques, Spark répond à vos besoins Big Data ou nécessitant des temps de réponse rapides ou encore de réaliser des calculs avancés. La solution Spark s'interface avec Yarn pour bénéficier des ressources allouées.

Type de produit et caractéristiques de Spark

Spark travaille en mémoire

La méthode de traitement des données utilisée par Spark est beaucoup plus rapide que le MapReduce de Hadoop. Spark analyse toutes les données en mémoire presque en temps réel tandis que MapReduce va exécuter les opérations en plusieurs étapes. Spark est détenteur du record Daytona Graysort en 2014.

Apache Spark

Spark intègre des outils d'analyse de données et de Data Science

Spark Streaming permet d'accéder à des données en temps réel via les outils suivants : Spark SQL pour interroger et modifier les données comme avec des requêtes classiques, Spark MLib pour des modèles de Machine Learning et GraphX pour le calcul et la création de graphes.

Apache Spark

Spark s'intègre à de nombreux environnements

Spark peut être exécuté en mode standalone ou sur un cluster. Sur Hadoop, il est possible d’utiliser les ressources avec Yarn et de stocker des fichiers sous HDFS. Sur Apache Mesos ou Kubernetes. Il est également possible de l’utiliser dans le cloud.
Les principales sources de données utilisées sont Cassandra, HBase et Hive, mais il en existe des centaines d’autres.

Spark est basé sur un langage rapide, Scala

Scala est un langage objet et utilise la programmation fonctionnelle. Ce dernier étant régulièrement mis à jour, Spark bénéficie ainsi des améliorations et corrections apportées au langage.
Spark peut également être utilisé avec les langages Python, R et Java qui sont plus répandus.

Spark et le principe de "Lazy Evaluation"

Saprk évalue les traitements si et seulement s'ils sont nécessaires lors de l'exécution. C'est le principe de Lazy Evaluation. Cela permet d'avoir un temps d'exécution plus rapide.

Fonctionnalités principales de Spark

Le cluster de Spark

Apache Spark

Le programme principal (driver) s’exécute sur l’un des nœuds du cluster. Le Spark Context (équivalent d’une connexion) va permettre d’assurer le lien entre le driver et le code qui s’exécutent en mode distribué sur les différents worker nodes.
L’allocation des ressources pour les tâches est déléguée au manager de cluster (par exemple Yarn si Spark est déployé sur un cluster Hadoop).

Spark et le concept des Resilient Distributed Dataset (RDD)

Un RDD est une collection distribuée d’objets de même type (RDD d’entier, de chaines de caractères, d’objets Scala/Java/Python) et est l’équivalent in-memory du stockage HDFS.

Il existe trois méthodes pour créer un RDD :

Via une collection d’objets à partir du programme appelant à l’aide de la méthode "parallelize" :

Apache Spark

Par la création depuis la lecture d'un fichier :

Apache Spark

Et enfin via la transformation d'un RDD existant :

Apache Spark

Propriétés des RDD

Apache Spark

Les Transformations des RDD sont des opérations exécutées sur les nœuds workers. Spark enregistre l’enchaînement des transformations (DAG : Directed Acyclic Graph) mais n’exécute pas tout de suite les opérations.

Quelques exemples de transformations : map(func), filter(func), join(otherDataset, [numTasks]), reduceByKey(func), sortByKey([ascending],[numTasks])…

Les Actions déclenchent l’exécution des transformations, elles retournent une valeur ou écrivent dans un fichier. Par exemple words.first() va retourner le premier mot du RDD.

Il existe aussi un système de tolérance aux pannes, à savoir que si les données en mémoire sont perdues, le RDD est recréé à partir du Directed Acyclic Graph (DAG) ou Graphe Orienté Acyclique.

Bien que Spark privilégie la mémoire, il est possible de lui demander de stocker certains résultats intermédiaires sur disque afin d’avoir des données persistantes.

Autres utilisations de Spark

Spark et la persistance des RDD

On peut indiquer à Spark de stocker un RDD. L’intérêt est de ne pas avoir à recalculer plusieurs fois le même RDD (par exemple pendant une phase de prototypage).
On applique la fonction persist() à un RDD en indiquant le niveau de stockage. On peut également utiliser la fonction cache() qui stocke le RDD en mémoire.

Apache Spark

Les variables distribuées : Broadcast

Si l’on a besoin d’une variable sur tous les nœuds, il est nécessaire de la passer en paramètre de notre fonction. On peut dans certains cas la distribuer avec la fonction broadcast. La distribution de données est très utile par exemple dans le cadre de jointure. On va ainsi distribuer la plus petite variable sur tous les nœuds, ce qui va permettre de faire des jointures « locales » avec la variable principale.

Apache Spark

Les variables partagées : Accumulator

Un accumulator est une variable partagée sur plusieurs nœuds qui supporte uniquement des opérations associatives. On peut l'utiliser par exemple pour créer un compteur dans les algorithmes

Apache Spark

Shuffle operations

Certaines opérations comme "ReduceByKey" entraînent une réorganisation des données : c'est le "Shuffling". Ceci a un impact sur les performances, comme pour MapReduce, les données doivent être lues avant d'être regroupées par clé. Si les données ne tiennent pas en mémoire, elles seront écrites sur disque, ce qui va faire chuter les performances.

Ces opérations génèrent de nombreux fichiers temporaires, beaucoup d'espace disque peut ainsi être rempli si les traitements sont longs.

Apache Spark

Le schéma ci-dessus représente le processus de MapReduce.

Comme avec le MapReduce, il faut que les traitements Spark se basent sur les données locales. C'est pourquoi, dans le cas de Hadoop par exemple, on déploie le service Spark sur l'ensemble des datanodes du cluster.

Spark Streaming

Présentation de Spark Streaming

Spark Streaming permet de traiter des flux de données en provenance de différentes sources. On parle ici de micro-batch car les données sont traitées dans une fenêtre de temps à paramétrer dans notre programme. Exemples de cas d'usages : analyse de logs, analyse de tweets... Après avoir récupéré les données, il est possible d'effectuer des traitements plus classiques.

Apache Spark

Les données sont capturées dans des "blocs" de RDD, les DStream (Discretized Stream).

Apache Spark

Les transformations sont ensuite effectuées sur chaque DStream.

Apache Spark

Certaines opérations ne sont pas permises sur les DStream. Il n'est pas possible par exemple de faire une jointure entre un DStream et un RDD. Pour reéaliser cette opération, il faut passer par la fonction transform() :

Apache Spark

Par défaut, les transformations opèrent sur les données récoltées sur la période du micro-batch, mais il est possible de traiter de manière globale plusieurs périodes de micro-batchs :

Apache Spark

Opérations sur une fenêtre Batch

Apache Spark

Retour aux éditeurs du Big Data

Vous souhaitez bénéficier d'experts, de développeurs ou d'une formation sur Spark ? Rendez vous sur la page Contact

Expertise, conseil, et formation sur Nantes, Angers, Paris, Niort, Brest, La Roche Sur Yon, Le Mans, Lyon, Grenoble, Saint-Etienne, Bordeaux, Angoulême, Toulouse, La Rochelle, Agen, Bayonne, Nîmes, Montpellier, Marseille, Aix-en-provence...

Des experts en Spark en Région Pays de Loire, région Parisienne, Ile de France, Bretagne, Poitou-Charentes, Nouvelle-Aquitaine, Midi-Pyrénées, Provence-Alpes-Côte d'Azur etLanguedoc-Roussillon...

Laissez-nous vos coordonnées et nous vous rappellerons sous 24 heures.

 

Web Demo

webconference

Suivez notre prochaine Web Demo sur la technologie :

Spark

Le Mardi 02/06/2020 10:00:00

Inscrivez-vous

Les adresses
Next Decision