Hadoop MapReduce from scratch
Archived course material, in French. This lab course has since been replaced by BGD701 — Big Data, which covers the same ground from TCP sockets up to a distributed MapReduce, with exercises and solutions. The sample code is still available: client.py · server.py · deploy.sh · getMachines.sh
résumé: Dans ce cours, vous apprendrez à implémenter une version simple du concept MapReduce en partant de zéro. C’est une sorte de ré-implémentation de Hadoop, codé en langage Java ou en langage Python.
Travaux pratiques - implémentation de Hadoop MapReduce "from scratch" en Java ou Python.”
Objectifs pédagogiques
Ce cours se présente sous la forme de Travaux Pratiques guidés. Vous utiliserez plusieurs ordinateurs connectés en réseaux et le langage de programmation Java ou Python pour implémenter une version simple du concept MapReduce. L’implémentation la plus connue est codée en Java, il s’agit de Hadoop. Vous visualiserez la Loi d’Ahmdal et la démontrerez empiriquement. Vous implémenterez le concept MapReduce et définirez une architecture répartie. Vous comparerez cette architecture répartie en terme de performances avec une architecture non répartie, séquentielle et en tirerez des conclusions.
Préparez un document de travail qu’il faudra rendre à la fin de l’unité d’enseignement.
Créez un document dans lequel vous allez expliquer votre implémentation au fur et à mesure, les problèmes rencontrés, les solutions innovantes, vos idées et réflexions, vos pistes d’améliorations. Il s’agit plutôt d’écrire ce qui vous étonne et ce que vous avez appris d’intéressant plutôt que de répondre de manière directe aux questions posées. Les questions dans les étapes de mise en place du projet n’ont pas besoin de réponse dans ce document, uniquement celles faisant référence à l’implémentation de votre projet et aux résultats de calcul obtenus ainsi que les discussions autour de ces résultats. Ce document sera un rapport de travail à rendre à la fin du cours.
Chronométrage et justification de la loi d’Ahmdal.
Tout le long du projet, vous obtiendrez des mesures de chronométrage et calculerez différents “speedup” (des accélérations) pour en déduire des taux de parallélisation (c’est à dire la portion de code parallèle). Pour chaque nouvelle mesure, vous devez exploiter ces mesures et les discuter. Évidemment, pour obtenir une accélération il faut comparer deux systèmes et les comparer dans des conditions les plus similaires possibles, c’est à dire à minima avec le même jeu de donnée en entrée et en prouvant que vous avez le même résultat en sortie. Pour prouver que vous obtenez le même résultat en sortie avec deux systèmes différents, vous utiliserez un troisième système (un outil/logiciel que vous trouverez vous-même) qui fait le même calcul (par exemple la fréquence des mots) et piocherez au hasard des mots pour savoir si dans le cas du système 1 et dans le cas du système 2 vous avez les même résultats.
Etape 1
Faire un programme séquentiel non parallélisé qui compte le nombre d'occurrences des mots dans un fichier.
Prérequis et documentation
Si vous voulez faire une version Java:
- programmer en Java
https://perso.telecom-paristech.fr/bellot/CoursJava/ - manipuler l’environnement de développement Eclipse
https://perso.telecom-paristech.fr/bellot/CoursJava/tps/ - lire et écrire dans un fichier en java
https://perso.telecom-paristech.fr/bellot/CoursJava/JavaIO.html
Si vous voulez faire une version Python:
- programmer en Python
https://github.com/fran6w/MDI721
Premier comptage en séquentiel pur
Implémentez un logiciel en java ou en python qui compte le nombre d’occurrences des mots d’un fichier d’entrée de manière non parallélisée (monothread, un seul thread , un seul processus léger), en utilisant un seul processeur.
Quelle structure de donnée est la plus pertinente pour stocker les résultats: en Java List, HashMap ou HashSet en Python dict set ou une autre ? Pour quelle raison ?
Testez votre programme avec un fichier d’entrée input.txt avec comme contenu:
Deer Beer River
Car Car River
Deer Car Beer
Résultat:
Deer 2
Beer 2
River 2
Car 3
Premier tri en séquentiel pur
Modifiez votre programme pour trier par nombre d'occurrences:
Résultat:
Car 3
Deer 2
Beer 2
River 2
Deuxième tri alphabétique en séquentiel pur
Modifiez le programme pour trier alphabétiquement pour les mots à égalité du nombre d’occurrences:
Résultat:
Car 3
Beer 2
Deer 2
River 2
Test du programme séquentiel sur le code forestier de Mayotte
Testez ensuite votre programme avec le code forestier de Mayotte disponible sur github forestier_mayotte.txt :
https://github.com/legifrance/Les-codes-en-vigueur
Votre programme a-t-il fonctionné du premier coup ?
Vérifiez en ouvrant le fichier texte qu’il contient bien du texte et non du code HTML.
Ne perdez pas de temps à corriger les éventuelles erreurs dues aux caractères spéciaux ou à des mots suspects ou illisibles (de toutes façons par la suite il y aura du chinois dans le texte).
Les 50 mots du code de la déontologie de la police nationale
Testez votre programme avec le code de déontologie de la police nationale disponible sur github deontologie_police_nationale.txt : https://github.com/legifrance/Les-codes-en-vigueur
De même ne perdez pas de temps à filtrer les caractères spéciaux ou autres mots bizarres. Pourquoi ? Car nous travaillerons ensuite sur des textes en chinois, japonais, arabe et d’autres langues. Si vous implémentez une étape de filtrage ici en français elle ne servira à rien par la suite. Quels sont les 5 premiers mots (qui ressemblent à des mots) parmi les 50 premiers de la liste triée résultat ? Gardez la réponse pour l’intégrer au rapport.
Les 50 mots du code du domaine public fluvial
Testez votre programme avec le code du domaine public fluvial domaine_public_fluvial.txt.
Quels sont les 5 premiers mots (qui ressemblent à des mots) parmi les 50 premiers de la liste triée résultat ? Gardez la réponse pour l’intégrer au rapport.
Les 50 mots du code de la santé publique
Testez votre programme avec le code de la santé publique sante_publique.txt.
Quels sont les 5 premiers mots (qui ressemblent à des mots) parmi les 50 premiers de la liste triée résultat ? Gardez la réponse pour l’intégrer au rapport.
Chronométrage du programme séquentiel
Chronométrer votre programme sur le code de la santé publique.
Chronométrage possible avec:
long startTime = System.currentTimeMillis();
...
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
Combien de temps faut-il pour chacune des étapes:
Compter le nombre d’occurrences
Tri (par nombre d'occurrences et alphabétique)
Gardez la réponse pour l’intégrer au rapport.
Travailler sur des plus gros fichiers
Testez votre programme sur un cas réel: un extrait de toutes les pages internet transformées au format texte brut (format WET). Toutes les pages sur internet au format texte sont disponibles sur http://commoncrawl.org/ : chaque mois, environ 3 milliards de pages web, soit 250 To de données sont stockées. Ces données sont disponibles par tranche de moins d’1Go environ, vous travaillerez sur une tranche de 380Mo.
quelques conseils:
- Utilisez la version WET qui ne contient que le texte des sites web (pas les images etc).
- Décompressez le fichier wet.paths.gz pour obtenir wet.paths
- chaque ligne du fichier wet.paths contient l’URL d’un fichier WET compressé, il faut ajouter au début https://data.commoncrawl.org/ pour pouvoir le télécharger
- décompressez le fichier .wet.gz téléchargé pour obtenir finalement le fichier .wet (qui contient les données) avec la commande gzip -d nom_du_fichier_.warc.wet.gz
Testez votre programme avec un fichier WET en entrée. Chronométrez-le.
Gardez la réponse pour l’intégrer au rapport.
Si vous avez un erreur du type java.lang.OutOfMemoryError vous devez augmenter la taille mémoire de la machine virtuelle Java. Pour cela, sous Eclipse, suivez ce tutoriel: http://www.planetofbits.com/eclipse/increase-jvm-heap-size-in-eclipse/ . Par la suite, en ligne de commande, vous devrez ajouter l’option -Xms avec la valeur qui convient pour toutes les commandes java. Par exemple, java -Xms1000m pour avoir 1000Mo de mémoire alloués pour cette commande java.
Travailler sur plusieurs gros fichiers
j’ai téléchargé pour vous 3995 fichiers au hasard depuis le site commoncrawl. Vous les trouverez dans le dossier
/cal/commoncrawl
pour pouvoir y accéder, il faut se connecter à une machine de l’école puis aller dans ce dossier une première fois en faisant
cd /cal/commoncrawl
ce n’est qu’une fois que vous avez fait cette commande que les fichiers vont apparaître dedans.
Vous avez un total de 1,3 To de données pour vous amuser.
graphique sur le temps de calcul en fonction de la taille du fichier
Vous avez testé et chronométré votre programme séquentiel sur différentes tailles de fichier. Tracez un graphique du temps de calcul en fonction de la taille du fichier. Quel type de courbe obtenez-vous ? Gardez la réponse pour l’intégrer au rapport.
Pouvons-nous considérer que le temps de calcul est linéaire en fonction de la taille du fichier ? Si non, est-ce que la courbe devient linéaire à partir d’une certaine taille ? Si c’est le cas nous dirons que le temps de calcul est linéaire et nous pourront extrapoler le temps de calcul pour des fichiers plus gros que ceux testés (ou des tailles globales de données plus importantes). Gardez la réponse pour l’intégrer au rapport.
Travailler avec plusieurs ordinateurs en réseau.
Prérequis et documentation
avoir un compte et pouvoir se connecter aux machines de l’école (contacter la DSI de l’école dans le cas contraire)
lancer un interpréteur de commande (console linux , shell) pour taper des commandes:
https://fr.wikipedia.org/wiki/Interpréteur_de_commandes
https://fr.wikipedia.org/wiki/Shell_Unixconnaître quelques commandes de base sous Linux
https://fr.wikipedia.org/wiki/Commandes_Unixhttps://prod-edx-mktg-edit.edx.org/course/linux-basics-the-command-line-interface
savoir qu’un ordinateur a un nom d’hôte (hostname) et plusieurs adresses IP:
https://en.wikipedia.org/wiki/Hostname
https://fr.wikipedia.org/wiki/Adresse_IPsavoir qu’un ordinateur peut faire partie d’un domaine (comme à l’école, le domaine enst.fr ou le domaine telecom-paristech.fr )
https://fr.wikipedia.org/wiki/Nom_de_domainesavoir qu’un nom peut être transformé en adresse IP (et inversement) par un serveur qui gère le système du nom de domaine (DNS, Domain Name System)
https://fr.wikipedia.org/wiki/Domain_Name_Systemse connecter à distance à un ordinateur avec SSH en ligne de commande
https://fr.wikipedia.org/wiki/Secure_Shell
http://www.commentcamarche.net/faq/74-se-connecter-a-distance-avec-ssh-linux
Nom court, nom long
Quel est le nom COURT de votre ordinateur (le nom simple sans le domaine) ? quel est le nom LONG de votre ordinateur (le nom avec le domaine) ? Comment les connaître en ligne de commande ? Sur les ordinateurs de l’école, est-il possible d’obtenir ces noms autrement qu’en ligne de commande ? Ajoutez les réponses à votre rapport.
Adresse ip
Comment connaître les adresses (plusieurs) IP de votre ordinateur en ligne de commande ? Autrement (en passant par un site internet par exemple) ? Ajoutez les réponses à votre rapport.
Du nom vers l’IP
Comment à partir du nom d’un ordinateur, obtenir les adresses IP en ligne de commande ? Ajoutez les réponses à votre rapport.
De l’IP vers le nom
Comment, à partir d’une adresse IP, obtenir les noms associés en ligne de commande ? Ajoutez les réponses à votre rapport.
Ping pong à l’intérieur!
Testez la communication avec d’autres ordinateurs (pas le vôtre) depuis le réseau de l’école en utilisant la commande ping (pour arrêter le ping faire CTRL + C). suivi du nom court, du nom long, de l’IP. Les trois méthodes fonctionnent-elles ? Ajoutez les réponses à votre rapport.
Ping pong à l’extérieur
Si vous effectuez le ping depuis un réseau différent, il est possible que celui ne fonctionne pas (filtrage des accès vers le réseau de l’école depuis un réseau extérieur), contactez la DSI pour mettre en place une connection VPN / OpenVPN afin d’être sur le même réseau que les machines en salle de TP.
Calculer en ligne de commande sur l’ordinateur local
Comment lancer un calcul en ligne de commande sur votre ordinateur (par exemple 2 + 3) ? Parmi les multiples réponses possibles, lesquelles permettent de lancer le calcul et d’obtenir le résultat en appuyant une seule fois sur la touche <Entrée> ? Ajoutez les réponses à votre rapport.
Calculer en ligne de commande sur un ordinateur distant
Comment lancer un calcul (par exemple 2 + 3) en ligne de commande sur un autre ordinateur (à distance) ? Il faudra certainement vous authentifier avec un mot de passe. Comment obtenir le résultat du calcul immédiatement après avoir tapé son mot de passe ? Ajoutez les réponses à votre rapport.
Calculer à distance sans mot de passe
Comment lancer un calcul à distance en utilisant SSH sans taper le mot de passe et en une seule ligne de commande (c’est à dire qu’on appuie sur <Entrée> et on a le résultat directement)?
Attention: en utilisant vos ordinateurs personnels( a priori ce n’est pas le cas sur les ordinateurs de l’école), il faut parfois vérifier le “fingerprint” avec le message:
The authenticity of host 'mint.phcomp.co.uk (78.32.209.33)' can't be established.
RSA key fingerprint is 6a:de:e0:af:56:f8:0c:04:11:5b:ef:4d:49:ad:09:23.
Are you sure you want to continue connecting (yes/no)? yes
Pour ne plus avoir à rentrer quoi que ce soit dans le terminal, il faut donc désactiver la vérification de ce “fingerprint”, sinon vous aurez l’erreur
Host key verification failed
Suivez ce guide pour désactiver la vérification de “fingerprint”:
Travailler avec des fichiers locaux ou sur un serveur NFS.
Prérequis et documentation
pouvoir transférer un fichier d’un ordinateur à un autre en utilisant la commande SCP (Secure Copy): https://fr.wikipedia.org/wiki/Secure_copy
connaître l’architecture d’un système de fichier NFS (Network File System) : https://fr.wikipedia.org/wiki/Network_File_System
Chemin absolu
Quel est le chemin absolu de votre répertoire personnel, votre home directory ? (commandes “cd” puis “pwd”)
Un fichier dans le répertoire personnel
Créez un fichier fperso.txt contenant le texte “bonjour” dans votre répertoire personnel (sur un ordinateur de l’école).
Vérifiez le contenu du fichier avec cette commande exactement:
cat ~/fperso.txt
Ou se trouve le fichier dans le répertoire personnel
Ce fichier est-il sur le disque dur de l’ordinateur ou autre part ? Comment savoir où est stocké physiquement ce fichier, à l’aide de quelle commande ?
Un dossier et un fichier dans le répertoire temporaire
Créez un dossier /tmp/<votre nom d’utilisateur> en remplaçant <votre nom d’utilisateur> (ne pas mettre les caractères < et > ).
Créez un fichier ftemp.txt dans le répertoire /tmp/<votre nom d’utilisateur> .
Vérifiez le contenu du fichier avec cette commande exactement:
cat /tmp/<votre nom d’utilisateur>/ftemp.txt
Ce dossier et ce fichier sont-ils sur le disque dur de l’ordinateur ou autre part ? Comment savoir où sont stockés physiquement ces éléments, à l’aide de quelle commande ?
Trois ordinateurs A B C. On commence avec A. Utilisation du serveur NFS.
Pour les questions suivantes, utilisez trois ordinateurs: A, B C.
Connectez vous physiquement (avec un clavier, une souris et un écran) sur l’ordinateur A.
Sur A, créez un fichier text.txt contenant le texte “mon texte sur NFS” dans votre répertoire personnel.
Vérifiez que le fichier existe et vérifiez son contenu. Pour cela, sur A, utilisez la commande :
cat ~/text.txt
Trois ordinateurs A B C. On continue sur B et sur C. Utilisation du serveur NFS.
Connectez-vous à B (physiquement ou à distance) et vérifiez que le fichier text.txt est également présent dans votre répertoire personnel. Pour cela, sur B, utilisez la commande :
cat ~/text.txt
De même, connectez-vous à C et vérifiez que text.txt est aussi présent.
Remarquez que vous n’avez pas copié le fichier mais qu’il est présent sur A, B et C grâce au serveur NFS.
Trois ordinateurs A B C. On commence avec A. Utilisation des disques locaux.
Déconnectez vous de B et de C et revenez sur l’ordinateur A.
Sur A, créez un dossier /tmp/<votre nom d’utilisateur> et un fichier local.txt contenant le texte “mon texte sur disque local” dans ce dossier /tmp/<votre nom d’utilisateur>.
Vérifiez que le fichier existe et vérifiez son contenu. Pour cela, sur A, utilisez la commande :
cat /tmp/<votre nom d’utilisateur>/local.txt
Trois ordinateurs A B C. On continue sur B et sur C. Utilisation des disques locaux.
Connectez-vous à B et C (physiquement ou à distance) et vérifiez que le dossier <votre nom d’utilisateur> ainsi que le fichier local.txt ne sont pas présent dans /tmp . Pour cela vérifiez avec la commande:
ls /tmp
Depuis A, copier de A vers B avec les disques locaux.
Comment, à partir de A, transférer le fichier /tmp/local.txt sur B (dans /tmp/<votre nom d’utilisateur>/local.txt) en utilisant scp ? Vérifiez que le fichier est bien présent sur B. Attention: si vous avez une erreur “no such file or directory” (ou l’équivalent français), vous devez d’abord créer le répertoire /tmp/<votre nom d’utilisateur>/ avec la commande mkdir -p associée à un ssh pour l’ordinateur distant.
Depuis A, copier de B vers C avec les disques locaux.
Comment, à partir de A, transférer le fichier de B (depuis /tmp/<votre nom d’utilisateur>/local.txt) vers C (dans /tmp/<votre nom d’utilisateur>/local.txt) ? Vérifiez que le fichier est bien présent sur C. De même que la question précédentes, vous devez créer les répertoires /tmp/<votre nom d’utilisateur>/ correspondants.
Lancer des programmes à distance manuellement.
utilisez les scripts deploy.sh et getMachines.sh pour déployer votre programme sur les machines de l’école.
Testez les serveurs déployés avec un client (le MASTER).
Lancer des programmes sur plusieurs machines et afficher la sortie standard et la sortie d’erreur.
Prérequis et documentation
- connaître les sorties standard et les sorties d’erreurs
Un programme qui simule une erreur
Modifiez le serveur pour qu’il fasse une erreur (par exemple en divisant par zéro) et affiche un message d’erreur.
Vérifiez que le message d’erreur s’affiche bien sur la sortie d’erreur.
simulation de calcul.
Un WORKER qui simule un calcul de 10 secondes.
Modifiez votre programme WORKER pour qu’il simule une attente de 10 secondes avant d’afficher quelque-chose dans la sortie standard. Pour cela inventez un protocole et utilisez
en java:
Thread.sleep(10000);
en python:
time.sleep(10)
Vérifiez le bon fonctionnement du WORKER et constatez qu’il y a 10 secondes entre le démarrage du WORKER et l’affichage du résultat.
etape 7
déployez 5 WORKERS
faites un MASTER qui envoie la liste des 5 WORKERS aux 5 WORKERS (inventez un protocole)
une fois que les WORKERS ont reçu la liste des WORKERS, ils doivent se mettre en mode “accept” pour accepter des connections, envoyez une confirmation au MASTER comme quoi vous êtes prêt à recevoir des connections.
une fois que le MASTER a reçu toutes les confirmations, il envoie à tous les WORKERS un “GO” pour qu’ils se disent “hello”
vérifiez que tous les WORKERS se sont dit “hello”
etape8
etape 9
MapReduce - SPLIT et MAP
Prérequis et documentation pour les questions suivantes :
connaître l’architecture de MapReduce


création des splits
Créez trois fichiers correspondants à des “splits” dans le répertoire temporaire. Dans un premier temps, créez ces fichiers manuellement.
/tmp/<votre nom d’utilisateur>/splits
S0.txt S1.txt S2.txt.
S0.txt contient:
Deer Beer River
S1.txt contient:
Car Car River
S2.txt contient:
Deer Car Beer
Attention, le répertoire /tmp/<votre nom d’utilisateur>/splits doit être créé sur les 3 ordinateurs s’il n’existe pas.
Un WORKER qui fait la phase de map
Modifiez le WORKER pour qu’il calcule un map à partir d’un split.
Pour démarrer le calcul lors du déploiement réel du système réparti, vous inventerez un protocole qui permet de signaler au WORKER de commencer à calculer le MAP. Le nom du fichier sera aussi envoyé par le protocole de communication.
Un MASTER qui lance les WORKERS pour la phase de map.
Modifiez le MASTER pour qu’il lance la phase de map sur plusieurs machines à l’aide d’un protocole et affiche “MAP FINISHED”.
Pour bien synchroniser le MASTER avec les WORKERS, veillez à afficher “MAP FINISHED” qu’une fois tous les WORKERS terminés et uniquement quand tous les WORKERS sont terminés, PAS AVANT! Le MASTER doit donc attendre que WORKERS se terminent correctement. Il faut donc que votre protocole contienne une notification de fin du MAP.
MapReduce - SHUFFLE
Le MASTER qui prépare les WORKERS à la phase de shuffle.
Modifiez le MASTER pour qu’il envoie la liste des WORKERS à tous les WORKERS.
Le WORKER qui prépare la phase de shuffle.
Modifiez le WORKER pour qu’il prépare la phase de shuffle, en calculant le “hash” pour chacune des clés et avec un modulo sur le nombre de machines de la liste, qui calcule quelle est la machine responsable de cette clé.
Le WORKER qui exécute la phase de shuffle.
Modifiez le WORKER pour qu’il exécute la phase de shuffle.
Pour savoir sur quelle machine il faut envoyer les clés-valeurs, on utilise le hash calculé à partir de la clé (une valeur entière) et le nombre de machines du fichier. Il suffit de calculer le hash modulo le nombre de machine en considérant que la première machine du fichier a pour numéro 0, la deuxième 1 etc... La formule utilisée pour trouver la machine sur laquelle sera envoyée le shuffle sera donc
numeroMachine = hash % nbMachines
Un MASTER qui lance et attend la fin de la phase de shuffle.
Modifiez le MASTER pour qu’il lance la phase de shuffle une fois que la phase de map est terminée, sur plusieurs machines et affiche “SHUFFLE FINISHED”.
Pour bien synchroniser le MASTER avec les WORKERS, veillez à afficher “SHUFFLE FINISHED” qu’une fois tous les SLAVEs terminés et uniquement quand tous les SLAVEs sont terminés, PAS AVANT! Le MASTER doit donc attendre que SLAVEs se terminent correctement.
MapReduce - REDUCE
Le WORKER qui exécute la phase de reduce.
Modifiez le WORKER pour qu’il prépare la phase de reduce en regroupant les clés avec le même hash, en calculant le reduce pour chacune des clés
Un MASTER qui lance et attend la fin de la phase de reduce .
Modifiez le MASTER pour qu’il lance la phase de reduce une fois que la phase de shuffle est terminée, sur plusieurs machines et affiche “REDUCE FINISHED”.
Pour bien synchroniser le MASTER avec les WORKERS, veillez à afficher “REDUCE FINISHED” qu’une fois tous les WORKERS terminés et uniquement quand tous les WORKERS sont terminés, PAS AVANT! Le MASTER doit donc attendre que SLAVEs se terminent correctement.
Un MASTER qui chronomètre les phases.
Modifiez le MASTER pour qu’il chronomètre les différentes phases MAP, SHUFFLE, REDUCE et pour qu’il affiche le temps de chacune des phases.
Testez sur l’exemple de départ avec les trois splits suivants:
S0.txt S1.txt S2.txt.
S0.txt contient:
Deer Beer River
S1.txt contient:
Car Car River
S2.txt contient:
Deer Car Beer
Quelle est la phase qui prend le plus de temps ? Quelle est la phase la plus rapide ?
MapReduce - finalisations et optimisations
Un MASTER qui affiche le résultat à partir de plus gros splits
Modifiez le MASTER pour qu’il utilise des plus gros splits déjà existants dans le dossier /cal/commoncrawl
ATTENTION, ce dossier n’est pas visible, ni les fichiers à l’intérieur, tant que vous n’avez pas “parcouru” ce dossier.
Il faut donc écrire manuellement /cal/commoncrawl une première fois:
Par exemple, pour pouvoir y accéder, il faut, depuis une machine de l’école, aller dans ce dossier une première fois en faisant
cd /cal/commoncrawl
ce n’est qu’une fois que vous avez fait cette commande que les fichiers vont apparaître dedans.
Vous avez un total de 1,3 To de données pour vous amuser.
Démontrez empiriquement la loi d’Ahmdal
Démontrez empiriquement la loi d’Ahmdal, en faisant varier la quantité de donnée traitée ainsi que le nombre de machines. Vous ferez des graphiques explicatifs et en tirerez des conclusions. Le speedup doit se baser sur la version séquentielle vu au tout début du projet.
Une prise en compte des pannes
Créez une copie de votre projet sur laquelle vous travaillez sur la robustesse: faites en sorte que votre programme fonctionne malgré des pannes inopinées de certaines machines. Pour tester, vous pouvez éteindre une ou plusieurs machines au milieu de calculs. Vous pouvez inventer d’autres pannes vous-même et présenter vos résultats. Comparez avec la méthode de robustesse utilisée par Google : https://research.google.com/archive/mapreduce-osdi04.pdf