vidéo donc je vais vous présenter les je vais revenir sur le MAP reduce le concept de map reduce un des concept les plus utilisés dans le domaine du Big Data pour faire des calculs parallèles comme je vous l'ai expliqué en cours donc il y a deux fonctions à définir c'est la fonction map et la fonction reduce je vais vous faire une première démonstration en utilisant couch dB pour essentiellement deux raisons la première et que cach dB c'est comme je vous l'ai présenté en cours donc au niveau du support du cours je suis là donc c'est
un système libre de droit bon c'est les sens àach qui propose un moteur d'exécution mapridius et il expose une appier reste donc facile de à appréhender à prendre en main et très important c'est pour ça la c'est la raison principale euh qui m'a amené à l'utiliser et que avec cou dB on n'est pas obligé de définir la fonction Redu donc qu'on peut définir uniquement la fonction map et puis la fonction reduce contrairement à d'autres systèmes et à ma connaissance c'est le seul qui permis de le faire et de les sauvegarder c'estàd qu'on peut voir les
résultats intermédiaires donc je vous rappelle le principe euh de ma prevus donc on a une une collection donc de documents g son généralement quand on parle de base de données documentairire comme mangodb et cach dB et ces documents ils sont indépendants donc c'est ce qui fait qu'on peut faire des calculs parallèles la fonction map elle est appliqué euh pour chacun des documents donc un par un d'une manière indépendante donc c'est une fonction qui prend paramètre un document il va faire un certain nombre de traitements sur ce document il peut en produire il peut ne pas
il peut ne pas produire de documents il peut en produire un ou plusieurs documents d'accord donc c'est vraiment et une fonction de transformation d'un document et chose importante cette fonction de transformation va définir ce qu'on appelle des groupes donc des cl de groupe d'accord donc c'est leur Identifiant et après il va y avoir une étape intermédiaire qu'on va pas forcément c'est la phase sortant chuffel ok le le trit et le et après l'envoi des résultats au différents serveurs constituant notre grappe donc là je je dégrappe mais pour l'instant on on le fait sur un seul
nœud donc un seul serveur d'accord donc il y a pas on a pas on on va pas l'appliquer là suite sur une grappe de serveur on va essentiellement se concentrer uniquement sur comment définir la fonction map comment définir la la fonction radius et essayer de voir l'intérêt donc maintenant une fois que Coch DB est démarré donc encore une fois vous avez une interface graphique donc vous pouvez l'avir directement et ici donc si je prends maintenant il est où Qub je ne vois pas c'est bizarre ah non je l'ai pas encore lancé pardon faut que je
le lance et là hop donc ouais c'est c'est si ça vous fait la même chose que moi c'est c'est le casach tout simplement donc euh c'est le CH ou peut-être le mot de passe carrément voilà je pense que c'est le mot de passe d'accord là je vais aller fil non je pense que c'est un problème de Ch ok donc c'est admin il veut pas je ve pas je sais pas pourquoi il fait ça je fais ça et je vais prendre un autre navigate donc on a des local host ok est-ce que c'est celui-là ouais c'est
celui-là d'accord donc j'ai déjà importé une collection de film donc je vous rappelle pour importer cette collection de film vous pouvez utiliser curl d'accord donc l'instruction à utiliser est là donc vous créez d'abord une base qui va s'appeler fil et après pour insérer une collection de documents vous pouvez passer par la méthode poste d'accord donc cur x po là vous précisez ici Youssef 2. login et le mot de passe localost le portcoute ça c'est la base et le slash c'est pour dire que je veux insérer en mass qu'est-ce que je veux insérer m un un
document qui contient une collection de fil d'accord donc vous pouvez retrouver sur et là c'est juste pour préciser c'est c'est un document gestion ok donc une fois qu'on a ça donc notre premier exemple c'est de calculer le nombre de films par année d'accord donc on veut calculer le nombre de films par année il faut savoir que la fonction map qui est définie par défaut donc encore une fois il traite document par document etci c'est pas un return voilà en programmation donc une fonction il vous renvoie un résultat ici il va émettre un résultat parce que
le résultat le document intermédiaire il sera par la suite groupé avec tous les autres documents qui ont le même identifiant et ils seront traités par un autre nud un autre serveur d'accord qui va faire de l'agrégation qui va faire de la par exemple la somme voilà donc voilà des fonctions d'agrégation on en verra quelques-unes juste après donc c'est une fonction qui prend un document en paramètrre traite les documents un par un et de manière indépendante ça il faut jamais le perdre de vue et c'est pour ça que on les structures se forme de documents Jon
et on on les imbrique comme ça d'une manière on peut créer des documents imbriqué voilà donc des documents imbriqués les uns dans les autres donc pour chaque document qu'est-ce qu'on va faire on va extraire l'année de sortie du film et son titre par exemple d'accord donc la fon fonction mapil là donc un paramètre doncc il va y mettre pour chacun des documents de la collection l'année et le titre tout simplement donc si je reviens au niveau de l'interface pour définir une fonction map il est là donc là par défaut par exemple il va pour chacun
des documents il va y mettre son identifiant et la valeur une donc si je l'exécute vous voyez ici il va émettre euh l'identifiant du document et une vous pouvez faire le test et dire par exemple au lieu que ça soit la valeur une je vais mettre par exemple une autre valeur 44 donc là c'est c'est une transformation etci au niveau de la fonction map je peux faire n'importe quelle transformation du document donc je je le prends je fais vraiment de je peux faire du nettoyage par exemple la restructuration plus précisément de tous les documents d'accord
un par un et c'est il va me produire la valeur 44 4 nous c'est pas ce qui nous intéresse nous ce qui nous intéresse c'est de calculer donc je reviens à la question le nombre de films par année si je veux calculer le nombre de films par année et que je veux faire une exécution parallèle comment je vais faire donc chacun des nœuds chacun des serveurs il va traiter un lot donc un sous-ensemble de documents et pour chacun des de ces ces documents encore une fois il va prendre juste l'année et son titre l'année s
titre la N son titre d'accord donc il suffit de mettre le doc point et la deuxème valeur ça va être le titre d'accord donc je vais faire un copier-coller tout simplement ici pardon hop pour ceux qui travaillent sur Windows et éviter de faire un copier-coller parce que on peut introduire des des caractères parasite hein donc voilà bon c'est une fonction très simple il a pas beaucoup de code donc vous pouvez la retaper facilement ok donc ici qu'est-ce qu'on produit donc on va produire l'année donc ça c'est la clé intermédiaire d'ailleurs si si vous remarquez là
déjà on anticipe il y a déjà la fonction de groupement là si vous regardez par exemple tous les films qui sont sortis en 1950 ils sont là donc il y a déjà la phase sorte qui est exécuté donc là c'est les années 40 et ainsi de suite d'accord donc vous pouvez voir bien sûr vous pouvez choisir le nombre de ésult que vous voulez voir donc si vous voulez voir plus de résultats ils sont là d'accord 79 79 79 et ainsi de suite donc on les prépare de sorte à ce que par la suite une fonction
de hachage et sera utilisée pour envoyer chacun des résultats intermédiaire pour qu'il puisse être traité par un serveur un nœud d'accord de votre grappe de serveur encore une fois donc ça c'est voilà donc vous avez vu le résultat de la fonction map qui sont qui sont encore une fois sauvegarder en utilisant co TB et à mon avis c'est le seul système dis de base don SQL qui le permet c'est vous en connaissez un vous pouvez me le dire ok donc maintenant on va appliquer une fonction reduce donc pour calculer le nombre de films par année
donc la question initiale c'était de calculer le nombre de films par année l'image je vais utiliser ici la suivante donc j'ai une j'ai un une collection de film bon la grappe du serveur pour utiliser une image vous pouvez imaginer que voilà chacun de vous va jouer le rôle d'un serveur donc il va prendre un sous-ensemble de film et qu'est-ce qu'il va faire donc il prend le film il regarde il prend l'année de sa sortie son titre l'année et son titre l'année son titre et s'arrête là donc ça c'est la fonction map chacun de donc chacun
de vous il va faire le même travail donc la fonction map et après soit ça sera les mêmes nœuds qui vont euh appliquer une fonction d'agrégation pour les résultats intermédiaires ou sinon on peut par exemple imaginer d'autres étudiants euh qui vont appliquer la fonction de d'agrégation donc pour la fonction d'agrégation pour calculer le nombre de films par par exemple ici la fonction d'agrégation donc il va prendre une clé intermédiaire donc là en l'occurrence la clé intermédiaire c'est l'année donc tous les films voilà qui qui qui qui sont sortis la même année donc ils seront agrégés
donc qu'est-ce qu'on va calculer on va calculer tout simplement la somme d'accord et là c'est la valeur donc le document donc clé intermédiaire le document et une fonction d'agrégation d'accord ok donc testons l'exemple donc je reviens ici donc voilà la fonction euh reduce comme je l'ai dit en l'introduction il n'est pas obligatoire avec Coch TB contrairement à d'autres systèmes ici je viens et je mets maintenant soit j'utilise la fonction somme donc il y a un certain nombre de fonctions déjà qui sont définies par défaut donc je vous laisse les regarder par la suite d'accord les
les explorer bah sinon je vais dire je vais définir ma propre fonction donc regardez ici dans la fonction c'est du javascript hein donc je peux utiliser des tests des boules tout ce que vous voulez d'accord tout ce que vous connaissez en Javascript pour faire encore une fois de la restructuration ok c'est parti donc là je mets Save et après quand je l'exécute maintenant ah il est où le résultat ah oui pardon j'ai dit que la fonction reduce n'est pas obligatoire d'accord donc là quand je mets quand j'ai met exécutter il n'a exécuté que la fonction
map c'est toujours le même résultat qui me le renvoie et me renvoie juste les clli intermédiaires qui est l'année de sortie d'un film et son et le titre des film en question bien sûr encore une fois en en anticipant donc on va regrouper tous les films qui ont la même clé intermédiaire d'accord qui seront par la suite envoyer vers d'autres éventuellement vers d'autres nœuds pour que ces n puissent appliquer des fonctions d'agrégation en utilisant une fonction de H qui a sur un équilibrage de la charge entre les différents nœuds de la grappe qu'on verra par
la suite quand on va aborder la deuxème partie du cours sur la partie système distribué donc pour exécuter la fonc la fonction map et reduce il faut cliquer ICI sur option et cocher reduce et là si on mine le résultat il est là donc vous voyez par exemple 1921 on a un seul fil euh 1936 on a de films dans notre collection et ainsi de suite d'accord donc voilà ok donc ça c'est pour le premier exemple donc je récapitule donc vous avez une collection de fils et on veut appliquer donc on veut calculer le nombre
de films par année donc le nombre de films par année donc comment vous pouvez voir la fonction euh mpredus vous pouvez le voir en comparant au base de est relationnel comme un groupe by donc c'est vraiment un un un groupement qu'on va faire donc le plus important c'est de dire quelle est la clé euh intermédiaire la clé du groupe qu'est-ce qui caractérise un groupe ce qui caractérise un groupe ici en l'occurrence c'est l'année de sortie d'un film parce que je veux les je veux compter le nombre de films donc la première transformation la première structuration
que je vais faire sur mes documents c'est l'année et le titre mais j'aurais pu choisir pas le le titre tout le document par exemple d'accord ou juste un metur en scène ou n'importe quelle autre information etci on a choisi de prendre le titre mais c'est pas le plus important le plus important c'est la clé intermédiaire qui va nous permettre encore une fois par la suite de faire un groupement donc l'agrégation une fois qu'on a défini donc cette fonction map qui s'applique enc une fois document par document et suffit si c'est pas un return donc c'est
il va y mettre un document pourquoi parce que voilà c'est pas un affichage à l'écran donc c'est c'est censé être envoyé pour qu'il puisse être traité par un autre nœud de la grappe de serveur dans un deuxème temps on va appliquer une fonction d'agrégation donc déjà un certain nombre de fonctions d'agrégation qui sont qui sont proposé par défaut mais sinon on peut définir notre propre fonction d'agrégation donc ça c'est pour le premier exemple bon maintenant voyons un deuxième exemple on veut calculer le nombre donc essayer de ne pas regarder la fonction la fonction qui a
S yeux donc ESS de de réfléchir donc si on veut calculer le nombre de film pour chaque acteur ici donc je vous laisse réfléchir 2 secondes la clé Prim la clé intermédiaire du document qu'on va y mettre après exécution de la fonction reduce logiquement et intuitivement ça doit être le mur en scène bon ici j'ai fait le choix de de prendre que de prendre le prénom et et le nom en affichant aussi une chaîne de caractère ça c'est juste pour vous montrer que c'est vraiment une restructuration donc je prends un document je je peux faire
toute restructuration utile donc je peux faire toute transformation de ce document d'accord et c'est une fonction quand une fois qui s'applique document par document d'une manière indépendante ça il faut jamais le perdre de vue d'accord donc voyons maintenant qu'est-ce que ça donne cette fonction donc je vais vous vous la mettre quelques commentaires sur cette fonction donc on prend pour chaque ici si vous regardez votre votre collection donc on veut calculer le nombre de films pour chaque acteur d'accord si vous regardez la collection qui est là pardon je prends par exemple un seul document etci si
je regarde actor c'est un tableau donc je vais avoir éventuellement plusieurs acteurs qui jouent dans un même film donc c'est pour ça que ici il va y avoir une boucleord qui va parcourir ce tableau V acteur et va extraire pour chacun des acteurs son prénom son nom et le titre du document mais ici encore une fois pour le titre on aurait pu choisir par exemple l'année ou tout ce que vous voulez d'accord le plus important dans la fonction map c'est la clé intermédiaire d'accord la clé intermédiaire pourquoi c'est l'équivalent de GROUP BY en relationnel mais
ici on distribu pourquoi on distribuit parce que c'est des bases de données qui manipule euh des documents JSON et c'est C ces documents ils sont indépendants les uns les autres donc les systèmes de gestion de base données SQL il assume le fait que on peut avoir de la redondance et se retrouver avec des données incohérentes mais on garantiss son un passage à l'échelle donc ça on l'a déjà discuté en cours avec des exemples si c'est pas très clair je vous invite à revoir les exemples qu'on a discuté en cours d'accord donc l'objectif en quoi une
fois c'est de manipuler des documents qui sont indépendant les uns les autres contrairement à une base de données relationnelle ou dans une table les pour récupérer une information sevon je dois faire euh je dois avoir recours à de la jointure donc utiliser plusieurs relations pour reconstituer l'information universelle l'information initiale alors que dans des systèmes de gestion de base de donnesusql cette information c'est des documents qui sont autodécrits d'accord donc j'ai pas à chercher d'autres informations par exemple concernant un film donc toutes les informations sur un film ils y sont d'accord mais si je prends par
exemple euh ce filml euh le le le cetraeur là pardon là je vois le le pardon la date de naissance et 1889 je peux l'avoir dans un autre document mais maintenant si je mets à jour et que je me rends compte que je me suis trompé dans la date de naissance c'est pas 1889 1890 par exemple je peux me retrouver dans la situation suivante où sur dans certain sur dans certains documents la date sera mise à jour donc ça sera 1890 alors que dans d'autres il sera pas mise à jour d'accord donc encore une fois
c'est des systèmes qui assument le fait que on peut se retrouver avec des incohérences mais en garantissant un passage à l'échelle de nos applications d'accord donc ici donc on va parcourir donc les acteurs le tableau et on va extraire à chaque fois donc en ajoutant une chaîne de caractèrees ça c'est juste pour euh voilà pour euh pour l'affichage hein donc le prénom le nom et pour vous dire que enc une fois une trè une 4e fois VO mais c'est très important que la fonction map c'est une fonction qui permet de la restructuration d'ailleurs on peut
l'utiliser par exemple pour faire euh pour très euh pour rendre par exemple une collection de documents gisson qui sont pas homogène euh de les rendre voilà donc les rendre homogène pour euh les utiliser par la su la suite pour faire des analyses et cetera d'accord donc testons maintenant notre fonction donc je fais un copier-coller je reviens dans la collection film et là je vais définir une nouvelle vue par exemple déjà donc new VI ici qu'est-ce qui s passé [Musique] là et là je prends la fonction map je l'exécute et là qu'est-ce qu'elle me produit donc
me produit pour chacun des acteurs les fil d'accord et là pareil donc si vous regardez ici donc il y a déjà une fonction de de regroupement d'accord initiale d'accord la fonction sor après il va y avoir la fonction shaffle on appliquant encore une fois une fonction d'agrégation et on voyait les documents donc les les documents intermédiaires donc c'est ce que j'appelle ici c'est ce que ce que j'appelle les documents intermédiaires ou les items intermédiaires d'accord ils sont caractérisés par une même clé de groupe OK et après maintenant on veut calculer le nombre de films d'accord
si on veut calculer maintenant le nombre de films il se fait de prendre à la clé intermédiaire les documents en question et de faire la son d'accord donc faisons un copiercollé donc revenons à notre vue qui s'appelle demo on va l'éditer on va dire que on va définir notre propre donc je vous laisse après explorer donc le somme le count le stat d'accord et ici je fais ça un copiercollé je fais un r donc il va me produire le même résultat donc je vous rappelle que la fonction reduce n'est pas n'est pas obligatoire avec CB
donc il suffit de de cocher ici R de faire un reen et là on aura par exemple pour cet acteur là il a de films de films de films je sais pas s'il y en a d'autres qui ont que de film le maximum c'est de fil d'accord voilà donc pour cette courte vidéo voilà donc c'est à vous