BGD701 — Big Data

Du socket TCP à MapReduce : construire un système distribué à partir de zéro

Auteur·rice

Rémi Sharrock

Date de publication

5 octobre 2026

Avant-propos

À qui s’adresse ce cours

Ce cours s’adresse à des étudiants de Mastère Spécialisé, dont beaucoup sont en reconversion professionnelle. Il ne suppose pas que vous ayez déjà écrit du code réseau, ni que vous connaissiez les systèmes distribués. Il suppose seulement que :

  • vous savez écrire un petit programme Python (variables, boucles, fonctions, listes, dictionnaires) ;
  • vous savez ouvrir un terminal et lancer une commande.

Tout le reste sera construit progressivement.

La philosophie : « from scratch »

Vous suivez en parallèle un cours qui vous fait installer et manipuler Hadoop. C’est une approche complémentaire de celle-ci, et les deux sont utiles.

Ici, nous prenons le chemin inverse. Plutôt que d’apprendre à utiliser un outil qui fait tout automatiquement, nous allons reconstruire nous-mêmes les briques de base. Vous écrirez :

  • un serveur réseau et un client, en une trentaine de lignes ;
  • un protocole applicatif capable de transporter des messages sans les mélanger ;
  • un programme qui interroge cent machines en parallèle ;
  • un MapReduce complet, d’abord sur une machine, puis réparti sur plusieurs.
AstucePourquoi c’est important

Quand vous verrez plus tard un message d’erreur Hadoop du type « shuffle failed » ou « connection reset by peer », vous saurez exactement ce qui se passe derrière, parce que vous l’aurez écrit vous-même. C’est tout l’intérêt de cette approche.

Organisation

Le cours compte 8 séances de 2 ×\times 1,5 h. Six séances de cours et travaux pratiques, et deux séances d’évaluation.

Séance Titre Ce que vous saurez faire à la fin
1 Pourquoi distribuer ? Premiers sockets Écrire un client et un serveur TCP qui échangent du texte
2 Serveurs concurrents Servir plusieurs clients à la fois, interroger NN machines en parallèle
3 Les limites de TCP, les protocoles Découper correctement un flux d’octets en messages
4 Évaluation 1 (3 h) Programme : séances 1 à 3
5 Architectures des systèmes de données Opérationnel et analytique, réplication, partitionnement, pannes, horloges
6 MapReduce sur une machine Écrire un MapReduce complet en Python
7 MapReduce distribué et performance Répartir sur NN machines, mesurer, loi d’Amdahl
8 Évaluation 2 (3 h) Programme : tout le cours

Il n’y a rien à rendre

Pas de projet, pas de rapport, pas de soutenance. Votre note vient uniquement des deux évaluations. En contrepartie, il est indispensable de faire les exercices en séance : les évaluations vous demandent de reproduire et d’adapter exactement ce type de code.

Les évaluations

Les deux évaluations se déroulent sur machine, en salle de TP, dans les conditions suivantes :

  • durée : 3 h, soit la totalité de la séance ;
  • pas d’accès à Internet, pas d’assistant IA, et le réseau est coupé : tout s’exécute sur votre seule machine, en 127.0.0.1, sur plusieurs ports ;
  • ce cours est autorisé (il est disponible sur les machines), ainsi que vos notes manuscrites.

C’est pourquoi ce cours contient l’intégralité du code dont vous pouvez avoir besoin : tous les programmes présentés sont complets et fonctionnels. Un aide-mémoire figure en annexe.

Chaque évaluation est notée sur 20 et se compose de deux parties : une partie de questions écrites (10 points) et une partie de programmation (10 points).

Vous rendez un unique fichier texte contenant à la fois vos réponses et tout votre code, dans un format balisé imposé. Il est décrit en détail à la séance 4, et vous vous y entraînerez dès les examens blancs.

Examens blancs et sujets réels

Les séances 4 et 8 contiennent chacune un examen blanc complet, avec son corrigé en annexe. Ils ont la forme exacte des évaluations : même durée, même structure, même barème. Traitez-les en conditions réelles avant chaque séance d’évaluation.

AvertissementAttention

Le contenu du sujet réel sera différent de celui de l’examen blanc. Le sujet vous sera remis le jour de l’évaluation, sous la forme d’un document séparé. Apprendre par cœur le corrigé de l’examen blanc ne vous servira à rien : ce qui est évalué, c’est votre capacité à adapter le code du cours à une spécification que vous découvrez, et à justifier vos choix. Attendez-vous notamment à devoir implémenter un protocole dont le format n’est pas celui du cours.

L’intelligence artificielle dans ce cours

Je dispose de licences GitHub Copilot pour les étudiants, qui donnent accès aux modèles les plus récents. Pour en demander une, remplissez ce formulaire :

https://grist.numerique.gouv.fr/o/docs/forms/fDMQDUHJ4j2RVL55LExJJD/4

Ces outils sont remarquables, et vous les utiliserez dans votre vie professionnelle. Reste à savoir quoi en faire pendant un cours dont l’objet est précisément d’apprendre.

Apprendre, c’est faire soi-même

L’apprentissage s’active quand vous écrivez le code, quand vous vous trompez, quand vous cherchez d’où vient l’erreur. Pas quand vous regardez une machine produire une réponse que vous validez d’un coup d’œil.

Un code que Copilot a écrit à votre place et que vous avez accepté sans le comprendre ne vous a rien appris. Il vous a seulement donné l’impression d’avoir avancé.

AvertissementAttention

Les évaluations se déroulent sans IA et sans réseau. Il faut donc savoir tout écrire à la main : le serveur, le client, le framing, le MapReduce. Si vous avez délégué les exercices, vous vous en apercevrez le jour de l’évaluation — et il sera trop tard.

Utiliser l’IA pour apprendre, pas pour produire

Deux usages, deux effets opposés :

À faire À éviter
« Explique-moi pourquoi recv renvoie moins d’octets que demandé » « Écris-moi le serveur de l’exercice 1.3 »
« Qu’est-ce que fait SO_REUSEADDR exactement ? » Accepter une complétion sans la lire
« Voici mon code et l’erreur que j’obtiens, aide-moi à comprendre » « Corrige mon code » sans chercher soi-même
Demander une variante, une contre-question, un cas limite Copier-coller le résultat dans le rendu
AstucePourquoi c’est important

Utilisée comme un professeur particulier disponible à toute heure, l’IA est un formidable accélérateur. Utilisée comme un sous-traitant, elle produit un code qui fonctionne et un étudiant qui ne sait rien faire.

Et de toute façon : tous les corrigés sont dans ce cours. Si vous bloquez, la réponse détaillée est à quelques clics. Vous n’avez pas besoin d’une IA pour faire les exercices — vous en avez besoin pour comprendre ce que vous n’avez pas compris.

Comment lire ce document

Vous rencontrerez quatre types d’encadrés :

NoteNote

Une précision, un complément, un point d’histoire.

ImportantÀ retenir

L’essentiel de la section. Si vous ne deviez retenir qu’une chose, c’est celle-ci.

AvertissementAttention

Un piège classique, une erreur fréquente. Lisez-les deux fois : ce sont souvent des questions d’examen.

AstucePourquoi c’est important

Le pourquoi derrière le comment. La motivation d’un concept.

Les exercices sont encadrés en bleu et numérotés par séance (exercice 1.1, 1.2…). Tous les corrigés se trouvent en annexe. Jouez le jeu : cherchez avant de regarder.

Copier le code

Chaque bloc de code possède un bouton de copie en haut à droite. L’indentation est copiée telle quelle : vous pouvez coller directement dans un fichier Python et l’exécuter.

def recevoir_exactement(sock, nb_octets):
    """Lit exactement nb_octets, ou leve une exception."""
    morceaux = b""
    while len(morceaux) < nb_octets:
        morceau = sock.recv(nb_octets - len(morceaux))
        if not morceau:
            raise ConnectionError("Connexion fermee prematurement")
        morceaux += morceau
    return morceaux

Les diaporamas

Les diapositives projetées en cours sont disponibles en ligne :

Elles résument le cours, elles ne le remplacent pas : tout le détail, tous les exercices et tous les corrigés sont ici.

Matériel nécessaire

  • Python 3.8 ou plus récent (python3 --version) ;
  • un éditeur de texte (VS Code par exemple) ;
  • un terminal ;
  • un accès SSH aux machines de l’école (pour les séances 2 et 7).
AvertissementLes machines de l’école exigent son réseau

Les postes de TP ne sont pas joignables depuis Internet. Pour les contacter, il faut être sur le Wi-Fi campus-telecom ou sur le VPN de l’école, documenté sur https://doc.telecom-paris.fr/.

Le Wi-Fi eduroam ne convient pas : il est traité comme un réseau extérieur.

ImportantAucune bibliothèque externe

Tout ce que nous utilisons — socket, threading, json, struct, multiprocessing, hashlib — fait partie de la bibliothèque standard de Python.

Ce n’est pas une coquetterie. Le jour des évaluations, le réseau est coupé : aucun pip install n’est possible. Un programme qui dépend d’une bibliothèque installée chez vous ne s’exécutera pas. Prenez dès maintenant l’habitude de ne rien installer.

Sur quelle machine travailler ?

Le cours est conçu pour les machines Linux de l’école, et les évaluations s’y dérouleront. C’est donc l’environnement de référence.

Vous pouvez évidemment travailler sur votre ordinateur personnel, et beaucoup le font. Sachez simplement à quoi vous attendre :

Linux (école) macOS Windows
Sockets, threads, json, struct oui oui oui
multiprocessing oui oui oui, avec une précaution
os.getloadavg() oui oui non
SSH vers les machines de l’école oui oui oui (OpenSSH ou WSL)

L’essentiel du cours fonctionne partout. Quelques points d’appui sur le système d’exploitation ne sont pas portables : ils sont signalés au fil du texte, avec une solution de repli.

AvertissementAttention

Quelle que soit la machine sur laquelle vous préparez les exercices, vérifiez au moins une fois que votre code tourne sur une machine de l’école. C’est là que se passera l’évaluation, et une différence de système découverte le jour J coûte cher.