REJOIGNEZ-NOUS !

Beezen recrute de nouveaux

talents en 2016
Serez-vous le prochain ? Nos offres d'emploi
Candidature spontanée

Pourquoi opter pour Spark ?

De nos jours, les données ne cessent de se multiplier à travers la digitalisation de l’économie. Ces données structurées et non structurées provenant de différentes sources telles que les capteurs, les réseaux sociaux, les images et les vidéos numérique doublent tous les quarante mois depuis 1980.

 

Ces chiffres mènent à l’émergence d’un nouveau champ, celui du big data.

 

Afin de tirer profit de la puissance du big data et ainsi en assurer la très haute performance, les ingénieurs travaillent sur des solutions innovantes.

 

Apache Spark se présente comme l’une d’entre elles. Apache Spark est une plateforme de calcul distribué qui offre de nombreux avantages comparés à ses concurrents.

 

Les avantages de Spark :

 

  • Facilité d’utilisation : développer une application pour le traitement des données distribuées est beaucoup plus facile avec Spark. En effet, Spark offre une riche interface de programmation d’application ” application programming interface (API)” pour développer des applications Big Data.

 

  • Rapidité : Spark peut être cent fois plus rapide que MapReduce et ceci revient essentiellement à deux raisons : Spark permet de stocker les données intermédiaires en mémoire. D’autre part, il possède un moteur d’exécution avancé.

 

  • Usage général : Spark intègre un ensemble de librairies pour le traitement par lots, analyse interactive, traitement en streaming, apprentissage automatique et théorie des graphes. Ainsi, Spark permet à ses utilisateurs de travailler sur une seule plateforme pour développer un pipeline de traitement des données qui pourrait englober différents types de tâches pour le traitement des données.

 

  • Passage à l’échelle : Spark est évolutif, sa capacité de traitement des données peut être augmentée par ajout d’un nouveau nœud au cluster.

 

 Architecture de Spark

Comme illustrée par la figure, une application Spark fait intervenir un pilote de programme “program driver“, un gestionnaire de cluster “cluster manager”, des travailleurs “workers” et des exécuteurs “executors” et des tâches “tasks“.

L’architecture de Spark : des acteurs divers

 

 

 

Le travailleur : le travailleur fournit le CPU (Central Processing Unit), la mémoire et les ressources de stockage à l’application Spark. Les travailleurs exécutent une application Spark comme des processus distribués sur un cluster de nœuds.

 

Les gestionnaires de cluster : comme son nom l’indique le gestionnaire de cluster gère les ressources d’un cluster de wokers. Il permet à plusieurs applications de partager les ressources d’un cluster et de s’exécuter sur un même nœud worker. Actuellement Spark supporte trois cluster managers : standalone, Mesos et YARN

 

Le pilote de programme : un pilote de programme est une application qui utilise Spark comme librairie. Il fournit le code de traitement des données que Spark exécute sur les nœuds “workers“.

 

Les exécuteurs : un exécuteur est un JVM crée par Spark sur chaque worker pour une application donnée.

 

Les tâches : une tâche ou un “task” est la plus petite entité de travail que Spark envoie à l’exécuteur. Il est exécuté par un thread dans l’exécuteur d’un nœud travailleur.

 

Le fonctionnement d’une application Spark

 

Lorsqu’une application Spark est exécutée, Spark se connecte à un gestionnaire de cluster et s’approprie des exécuteurs sur des nœuds travailleurs. Une application Spark soumet un algorithme de traitement des données comme un job qui sera divisé en un DAG d’étapes. Ensuite, il planifie l’exécution de ces étapes sur les exécuteurs en ayant recours à un planificateur de bas niveau fournit par le gestionnaire. Pour finir, les exécuteurs exécutent parallèlement les tâches soumises par Spark. Chaque application de Spark possède ses propres executors sur les nœuds workers. Cette conception présente des avantages :

 

Premièrement, les tâches des différentes applications sont isolées les unes aux autres puisqu’elles sont exécutées dans différents processus JVM et par conséquent une tâche défectueuse d’une application ne pourra pas influer sur une autre application.

 

Deuxièmement, la planification des tâches devient plus simple. En effet, Spark doit assurer la planification des tâches appartenant à une seule application. Toutefois, cette conception présente aussi des inconvénients. Étant donné que les applications s’exécutent dans différents processus JVM, elles ne peuvent pas partager les données aisément. Même si elles peuvent tourner sur un même nœud, elles ne peuvent pas partager les données sans les écrire sur le disque. Comme expliqué ci-haut, la lecture et l’écriture des données depuis le disque sont des opérations coûteuses ainsi ces applications rencontreront des problèmes de performance.