L'essentiel d'Apache Spark

Comprendre les RDD

Testez gratuitement nos 1324 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Les RDD, ou Resilient Distributed Dataset, sont les containers de données historiques d'Apache Spark. Initiez-vous à leur distribution et passez en revue les types de traitement que vous pouvez leur affecter.
07:15

Transcription

Abordons maintenant brièvement la façon dont Spark distribue le traitement et quelle est son abstraction de données de base. La distribution du traitement en Spark se fait d'abord avec un maître qui va distribuer le traitement sur un certain nombre de machines de travail. Le maître s'appelle un « driver », en français on pourrait dire pilote, mais je vous encourage fortement à utiliser la terminologie anglaise, donc « driver », parce que Spark n'est pas traduit, et que toute la documentation et toute l'aide que vous trouverez sur les forums sera en anglais. Donc on a un driver et ce driver va contenir une application qui va définir un contexte, de la classe qui s'appelle SparkContext. Ce contexte va permettre d'accéder à toutes les fonctionnalités de Spark et on va par exemple faire des opérations sur des données, à ce moment là le driver va distribuer les données et le traitement, par exemple en partionnant les données en les envoyant sur des nœuds de traitement, et en envoyant aussi le traitement sur ces nœuds. Alors on parlait de co-localisation des données selon les types de sources, si vous utilisez des données à partir de HDFS, vous avez la possibilité de ne pas envoyer les données, parce que c'est très très coûteux, mais d'utiliser des données co-localisées sur les nœuds de traitment si vous travaillez en co-localisation avec HDFS. Et donc, chaque nœud de traitement va avoir un processus qui s'appelle « l'Executor » et cette Executor va définir des tâches, il peut y avoir plusieurs tâches sur la même machine, si la même machine a plusieurs cœurs, c'est intéressant de dédier des threads pour l'exécution en parallèle aussi sur la machine. À ce niveau-là il y a donc deux niveaux de parallélisation, un même Executor peut exécuter plusieurs tâches qui sont parallélisées par des threads et puis on a une distribution à travers des machines qui vont permettre de distribuer le traitement. Donc je vous le disait on partitionne des données, pour cela il faut une structure de données qui soit partitionnable et c'est l'objet de la structure de base de données dans Spark qui s'appelle le RDD. RDD pour « Resilient Distributed Dataset. » Donc il s'agit bien sûr d'un Dataset, d'un ensemble ou d'une collection d'éléments, cette collection est partitionnable, est découpable par Spark pour pouvoir la distribuer sur la machine et donc le RDD est découpable et traitable de manière distribuée. Le RDD est également reconstructible, cela veut dire la chose suivante : si vous prenez un RDD à partir d'une source de données, vous fabriquez un RDD, et ensuite à partir de ce RDD vous fabriquez un deuxième RDD en le transformant, on va voir immédiatement de quoi il s'agit. Si je le transforme, et ensuite j'envoie ce RDD transformé à des machines de traitement, par exemple 120 nœuds, il se peut très bien qu'il y ait un ou deux nœuds qui tombent. Il faut donc que le driver soit capable de reconstruire les données qui sont perdues pour pouvoir les envoyer à des nœuds de traitement, pour pouvoir faire un traitement de l'intégralité des données. Donc, il est important que Spark puisse reconstruire à partir de la source tout ce qui s'est passé sur un RDD, donc il garde l'historique de toute la construction du RDD de façon à pouvoir faire ça. C'est pour cela que l'on appelle ça un Dataset, distribué et résilient et capable de se reconstruire. Qu'est-ce qu'on peut faire sur un RDD ? On a deux types de traitements. D'abord on peut prendre un RDD et le transformer en un autre et ensuite un autre etc. Cette opération s'appelle la transformation. Finalement, vous prenez un RDD, vous lui appliquez une opération, des choses qui sont natives dans Spark, et ça vous fabrique un deuxième RDD. Alors attention, cela ne vous transforme jamais le RDD existant, parce que le RDD est immuable « imutable » en anglais. On ne peut pas modifier un RDD, et d'ailleurs c'est logique parce que si vous faites un traitement distribué et même sur la même machine entre plusieurs threads, cela veut dire que si vous pouviez modifier les données en l'état, le multi-threading fabriquerait des catastrophes. Non, on va prendre un RDD existant, on n'y touche pas, on va pouvoir le traiter en parallèle et on fabrique un deuxième RDD. Donc toute transformation fabrique un nouveau RDD à partir d'un RDD existant. C'est pour cela que je vous l'ai dessiné comme ça, avec des couches de RDD. Donc la transformation c'est la fabrication d'un nouveau RDD et bien entendu on peut appliquer des actions différents à un RDD, par exemple si j'utilise la méthode « Count », je vais compter le nombre d'éléments, ça ne va pas me retourner un nouveau RDD, ça va me retourner un entier, qui va me dire il y a tant d'éléments. C'est donc une action, l'action retourne un résultat qui n'est pas un nouveau RDD. D'ailleurs, pour que votre travail soit efficace en Spark, il faut bien comprendre comment le RDD est réutilisé. Lorsque vous prenez des données, tout ce que Spark peut lire, par exemple du Parquet, du texte, ou d'autres formats qui nécessitent d'avoir des connecteurs spécifiques comme de l'Avro, on verra comment faire. Par exemple parce que le texte et Parquet sont des formats supportés nativement par Spark mais il y en a d'autres, on peut utiliser des connecteurs externes, on va voir comment faire pour Avro par exemple. Donc on prend des données, on en fait un RDD. Ce RDD, on utilise une transformation pour faire un nouveau RDD, et sur ce deuxième RDD, on va faire par exemple un « Count », qui est une action. À ce moment là, le deuxième RDD, la transformation va être faite. Il faut bien comprendre une chose, la transformation est « lazy », elle est paresseuse. Lorsque vous faites une transformation, elle ne va être réalisée que lorsqu'on a besoin de l'utiliser, c'est-à-dire au moment où on va faire quelque chose avec cette transformation. Ça c'est très important et très utile parce qu'imaginez, vous faites plusieurs transformations les unes après les autres et ensuite vous utilisez la troisième transformation pour quelque chose. Spark ne va pas faire les transformations les unes après les autres, il va comprendre qu'il y a trois transformations à faire, il va les faire en une seule fois, et par exemple si je vais un « map » et ensuite un « reduce », et bien il ne va pas récupérer le résultat intermédiaire du « map » par exemple sur votre machine, il va appliquer la série de transformations en une seule fois. Par exemple je fais un « count » sur ma transformation et ensuite, un peu plus loin, je refais un « Count », eh bien ça génère une transformation à nouveau. La transformation doit être refaite, un RDD transformé, lorsqu'il est utilisé dans les actions doit être recalculé à chaque fois. Donc de façon à mieux gérer ceci, ce que vous pouvez faire c'est lorsque vous avez un RDD transformé alors vous l'utilisez, peut-être une fois, et ensuite vous demandez sa persistance, vous demandez qu'il soit sérialisé en quelque sorte, ou qu'il soit caché. Parce que la persistance va se faire sur le type de sérialisation, le type de persistance de votre choix, mais par défaut c'est en mémoire, et c'est là un des gros avantages de Spark c'est sa capacité à charger des RDDs en mémoire, on va le faire ici manuellement avec un « persist » parce qu'on sait qu'on va faire plusieurs actions ensuite sur le RDD et donc on a plusieurs passages à faire, peut-être un « map », ou un « join » etc. Donc on aura caché, on aura persisté notre RDD en mémoire, et quand on aura de multiples opérations à faire sur ce RDD, et bien ce sera beaucoup beaucoup plus rapide.

L'essentiel d'Apache Spark

Analysez des données volumineuses avec Apache Spark. Chargez vos données pour les analyser, profitez des opérations de transformation et des actions pour agréger vos données, etc.

3h11 (38 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Votre/vos formateur(s) :
Date de parution :16 mars 2017
Durée :3h11 (38 vidéos)

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !