Spark est la solution à la mode dans le monde complexe du Big Data. Mais connaissez vous réellement les raisons de cet engouement ?

Spark fonctionne en mémoire

Ceux qui ont déjà travaillé sur Hadoop ont noté le temps de réponse relativement long des traitements sous Pig ou Hive relativement à ce que nous connaissons avec une base de données. C’est la paradoxe de ce type de plateforme conçue pour être avant tout performante sur de gros volumes de données. (Certains savent aussi que les bases de données ne renvoient pas toujours des résultats quand la volumétrie est extrême.) Quoi qu’il en soit, cette première prise de contact peut en décourager certains. Ce n’est pas le cas avec Spark.

La solution s’appuie sur les mêmes concepts qu’Hadoop (calcul distribué, Map Reduce) mais ici les données sont montées en mémoire et les traitements sont de fait jusqu’à 100 fois plus rapide que sur Hadoop.

A noter que Spark reste un moteur d’exécution généraliste: il privilégie les traitements en mémoire mais peut aussi bien opérer avec des données sur disque. Spark a récemment battu le record détenu par hadoop pour trier 100 TB de données Daytona GraySort Contest en 23 minutes.

Spark s’intègre à votre architecture Hadoop

Spark peut fonctionner de manière autonome et en mode distribué car l’outil dispose de son propre mécanisme de clusterisation. Mais l’intérêt est de pouvoir bien entendu l’intégrer à un cluster Hadoop. Cela se fait très simplement. Yarn va centraliser les besoins et gérer le pilotage des ressources entre des traitements Spark et d’autres traitements de type Map Reduce.

Pourquoi garder Hadoop me direz vous si Spark est si performant ? Parce qu’Hadoop reste la meilleure solution de stockage avec des outils d’administration, de sécurité et de monitoring plus avancés.

Ce choix, Oracle l’a fait pour sa toute nouvelle solution de découverte et d’analyse de données, Big Data Discovery. Le produit s’installe sur un cluster Hadoop (exclusivement Cloudera) et s’appuie très largement sur Spark pour ses traitements.

Spark s’appuie sur un langage riche: Scala

On peut travailler sous Spark avec plusieurs langages comme Java ou Python. Mais Spark devient vraiment intéressant avec son langage natif Scala.

Des spécialistes comme James Gosling, l’inventeur de Java, prédisent d’ailleurs un bel avenir à ce langage. Scala, le langage qui va remplacer Java

Langage objet

Scala est un langage objet. Comme tous les langages objet, cette possibilité simplifie l’écriture de code complexe et rend plus lisible les programmes. La maintenance est facilitée. En Scala, tous les éléments sont objets, même un nombre de type entier par exemple.

Programmation fonctionnelle

Scala est un langage fonctionnel. La programmation fonctionnelle se distingue de la programmation impérative qui s’appuie elle sur des changements d’états d’une variable. Scala, à contrario, préconise l’utilisation de variables non modifiables. Un calcul consiste alors à appliquer des fonctions successives à une variable pour définir une nouvelle variable. Cette approche est particulièrement bien adaptée au traitement de données réparties sur différents datanodes.

Exemple:

val immobilisations = depenses.filter(x => (x.date_fin).after(x.date_debut)).distinct()

Dans cet exemple, je pars d’une variable ‘depenses’ (distribuée sur plusieurs datanodes). Cette variable est composée de plusieurs atributs. J’applique un filtre sur un attribut de type date pour ne garder que les lignes dont la date de fin est strictement supérieure à la date de début puis j’opère un distinct pour dédoublonner mes lignes résultats. Le tout tient sur une seule ligne de code 😉

Spark est paresseux … et c’est bien 😉

Lorsque Spark charge les données sur son cluster, les données deviennent de type RDD (Resilient Distributed Datasets). Deux types de méthodes sont disponibles pour travailler avec ces RDD. Les méthodes de type “transformation” modifient les données, opèrent des calculs mais elles ne sont pas exécutées tout de suite. Elles sont stockées dans une pile d’instructions dans l’attente de l’appel d’une méthode de type “action” qui va déclencher l’exécution de l’ensemble des instructions en mémoire.

Cette approche paresseuse (Lazy Evaluation) est très intéressante car elle permet de développer ses programmes en ligne de commande, sans perte de temps entre chaque instruction (car on utilise le plus souvent des transformations). Cette approche permet aussi à l’optimiseur d’être plus efficace.

Spark intègre tous les outils du datascientiste: Streaming, SQL, Machine Learning et Graphes

Spark dispose de nombreuses librairies avancées. L’objectif recherché par les inventeurs de Spark est d’offrir différentes vues et moyens d’accéder aux données sans devoir changer d’outil. La dernière librairie disponible est SparkR qui va permettre aux habitués de ce langage de travailler nativement sur un cluster distribué.

On peut imaginer un cas théorique où le datascientiste récupère par exemple des données en temps réel en provenance de capteurs (librairie Spark Streaming), modélise les données dans des tables et exécute des requêtes SQL pour démarrer une analyse de données (librairie DataFrames and SQL). Au regard des résultats, il s’intéresse à une série de capteurs et cherche à identifier des corrélations (librairie MLlib Machine Learning).

Conclusion

Au delà du buzz, Spark dispose de vrais atouts. J’espère vous avoir convaincu de tester cette solution. Pour aller plus loin, rendez vous sur le site de Spark.