MapReduce distribué et performance
BGD701 — Télécom Paris
| Programme | Combien | Rôle |
|---|---|---|
| Travailleur | un par machine | un serveur : fait les maps et les reduces |
| Maître | un seul | distribue les tâches, relance en cas d’échec. Ne calcule rien |
| Déployeur | un script | lance et arrête les travailleurs par SSH |
Tout vient des séances 1 à 6 : sockets, threads, protocole.py, horloge monotone, MapReduce.
Chaque réducteur demande sa partition à chaque map : demandes. Est-ce un compte exact ou un maximum ?
| Cas mesuré | Demandes | Utiles |
|---|---|---|
| 32 fichiers de texte, | 256 | presque toutes |
30 fichiers ne contenant que chat |
240 | 30 |
est le maximum. Notre code, naïf, l’atteint toujours : il demande aussi les partitions vides. Et avec un seul mot, un seul reduce sert à quelque chose.
| Chemin | Où sont les octets | 64 petits fichiers |
|---|---|---|
/tmp/... |
sur le disque local | 0,30 s |
~/... |
sur le serveur NFS, partagé par toute l’école | de 1,06 à 2,60 s |
machines sur /tmp = disques. machines sur ~ = un seul serveur, pour tout le monde. Intermédiaires → /tmp.
| Règle | Pourquoi |
|---|---|
Un port à votre nom : 40000 + uid % 20000 |
sinon deux étudiants se volent le port 50007 |
Un PING qui renvoie votre login |
le succès de ssh ne prouve pas que le travailleur tourne |
| Une connexion SSH à la fois | l’école limite les sessions simultanées |
| Nettoyer, et vérifier | sinon des processus orphelins gênent tout le monde |
[t]ravailleur.py reconnaît le travailleur, pas la commande elle-mêmeno matches found et n’exécute rienUn système qui ne plante pas n’est pas forcément juste. Seule la comparaison avec un calcul de référence le prouve.
La règle absolue
Le même jeu de données à tous les points.
32 fichiers de 1 Mo, , travailleurs déjà lancés.
| Machines | 1 | 2 | 4 | 8 | 16 |
|---|---|---|---|---|---|
| Temps (s) | 18,38 | 9,47 | 5,03 | 2,97 | 2,02 |
| Accélération | 1,00 | 1,94 | 3,65 | 6,19 | 9,10 |
| Efficacité | 100 % | 97 % | 91 % | 77 % | 57 % |
Et le déploiement ?
19 s pour lancer 16 travailleurs, dix fois le calcul. On les lance une fois, puis on s’en sert pour tous les calculs.
Un serveur de calcul passe 70 % de son temps dans les processeurs et 30 % sur les disques.
| Amélioration | Gain sur le composant | Coût |
|---|---|---|
| Nouveaux processeurs | 50 % plus rapides | 10 000 € |
| Nouveaux disques | 150 % plus rapides | 7 000 € |
Un calcul de 60 min : 42 min de processeur, 18 min de disque.
| Processeur | Disque | Total | |
|---|---|---|---|
| Aujourd’hui | 42 | 18 | 60 min |
| Processeurs ×1,5 | 28 | 18 | 46 min |
| Disques ×2,5 | 42 | 7,2 | 49,2 min |
On n’accélère que le temps passé dans le composant amélioré. Le reste ne bouge pas.
= part du temps améliorée, = facteur d’accélération de cette part.
| Amélioration | Accélération | Coût par % | ||
|---|---|---|---|---|
| Processeurs | 0,7 | 1,5 | +30 % | 329 € |
| Disques | 0,3 | 2,5 | +22 % | 319 € |
Même infiniment rapide, le disque donnerait au plus : +43 %.
On améliore ce qui pèse le plus dans le temps, et on le sait en mesurant.
= part séquentielle. Avec machines, la part va fois plus vite :
| 10 machines | 100 machines | 1000 machines | plafond | |
|---|---|---|---|---|
| 5 % | 6,9 | 16,8 | 19,6 | 20 |
| 10 % | 5,3 | 9,2 | 9,9 | 10 |
C’est pourquoi passer du NFS à /tmp change peu le total quand le serveur est calme : l’écriture pèse peu. C’est le calcul qu’il faut accélérer.
4 machines, 32 fichiers. Sans panne : 6,1 s.
| Ce qui arrive | Le maître l’apprend | Total |
|---|---|---|
| Le processus est tué | tout de suite : connexion refusée | 7,4 s |
| La machine est figée | seulement par le timeout | 88,7 s |
Un silence ne dit pas si la machine est morte ou lente : il faut choisir un délai (séance 5).
| 7.1 | Faire tourner sur 4 machines, vérifier le résultat |
| 7.2 | NFS contre /tmp (petit, et on nettoie) |
| 7.3 | Où passe le temps : lecture, calcul, écriture |
| 7.4 | La courbe d’accélération, de 1 à 16 machines |
| 7.5 | Tuer une machine, cinq fois |
| 7.6 | Un autre traitement que le comptage de mots |
| 7.7 | Quel composant améliorer ? |
/tmp : le disque local passe à l’échelle