0% ont trouvé ce document utile (0 vote)
5 vues20 pages

TP Big Data

Ce document présente un travail pratique sur le déploiement d'un cluster Hadoop utilisant Docker sur Windows, réalisé par Bahloul Fares et Ben Rhaiem Mohamed. Il décrit l'architecture du cluster, les rôles des composants, la configuration technique, ainsi que les étapes de déploiement et d'exécution d'un job MapReduce. Les outils utilisés incluent Apache Hadoop, Docker, et Java, et le TP vise à comprendre le stockage distribué et la gestion des ressources.

Transféré par

Mohamed Yassine
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues20 pages

TP Big Data

Ce document présente un travail pratique sur le déploiement d'un cluster Hadoop utilisant Docker sur Windows, réalisé par Bahloul Fares et Ben Rhaiem Mohamed. Il décrit l'architecture du cluster, les rôles des composants, la configuration technique, ainsi que les étapes de déploiement et d'exécution d'un job MapReduce. Les outils utilisés incluent Apache Hadoop, Docker, et Java, et le TP vise à comprendre le stockage distribué et la gestion des ressources.

Transféré par

Mohamed Yassine
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Travaux Pratiques

Déploiement d’un Cluster Hadoop


avec Docker sur Windows

[hadoop-master]
NameNode + ResourceManager

[hadoop-worker1] [hadoop-worker2]
DataNode + NodeManager DataNode + NodeManager

Réalisé par : Bahloul Fares et Ben Rhaiem Mohamed


Année : 2025 – 2026
Date : 26 avril 2026

Hadoop 3.5.0 • Docker • Java 17 • YARN • HDFS • MapReduce


Table des matières

1 Introduction 3
1.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Objectifs du TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Outils utilisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Architecture du Cluster 4
2.1 Vue d’ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Rôles des composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.1 NameNode (Master) . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.2 DataNode (Workers) . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.3 ResourceManager (Master) . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.4 NodeManager (Workers) . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Ports exposés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Configuration Technique 6
3.1 Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 Docker Compose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3 Script [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4 Fichiers de configuration XML . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4.1 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4.2 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4.3 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.4.4 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4 Déploiement du Cluster 10
4.1 Lancement du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2 Vérification de l’état des conteneurs . . . . . . . . . . . . . . . . . . . . . . 10
4.3 Interfaces web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5 Initialisation HDFS 13
5.1 Principe de HDFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2 Commandes d’initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.3 Ce qui se passe lors du put . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

6 Exécution du Job MapReduce 14


6.1 Principe de MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.2 Exemple avec WordCount . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.3 Commande exécutée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.4 Logs du job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.5 Résultat obtenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1
TP Big Data Cluster Hadoop avec Docker

7 Analyse des Résultats 16


7.1 Compteurs MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7.2 Observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

8 Conclusion 17
8.1 Bilan du TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8.2 Avantages de l’approche Docker . . . . . . . . . . . . . . . . . . . . . . . . 17
8.3 Limites observées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8.4 Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

A Structure du Projet 18

B Commandes de référence Windows CMD 19

2
1. Introduction

1.1 Contexte
Le Big Data désigne l’ensemble des technologies et méthodes permettant de traiter
des volumes de données massifs, dépassant les capacités des outils traditionnels. Face à
l’explosion des données générées chaque jour, des frameworks distribués comme Apache
Hadoop ont été développés pour répondre à ces besoins.

1.2 Objectifs du TP
Ce travail pratique a pour objectifs de :
— Déployer un cluster Hadoop multi-nœuds avec Docker
— Comprendre l’architecture HDFS (stockage distribué)
— Comprendre le fonctionnement de YARN (gestion des ressources)
— Exécuter un premier job MapReduce (WordCount)
— Analyser les résultats et les logs du cluster

1.3 Outils utilisés

Outil Version Rôle


Apache Hadoop 3.5.0 Framework Big Data
Docker Desktop Latest Conteneurisation
Docker Compose v2 Orchestration multi-conteneurs
Java (Eclipse Temurin) 17-JRE Runtime Hadoop
Windows 11 Système hôte

Table 1.1 – Outils utilisés dans ce TP

3
2. Architecture du Cluster

2.1 Vue d’ensemble


Le cluster déployé est composé de 3 conteneurs Docker communicant via un réseau
virtuel hadoop-net. Chaque conteneur simule un nœud physique d’un vrai datacenter.

hadoop-master
NameNode + ResourceManager

hadoop-net (bridge)

hadoop-worker1 hadoop-worker2
DataNode + NodeManager DataNode + NodeManager

Figure 2.1 – Architecture du cluster Hadoop sur Docker

2.2 Rôles des composants


2.2.1 NameNode (Master)
Le NameNode est le cerveau de HDFS. Il ne stocke pas les données, mais conserve
la métadonnée de tous les fichiers :
— Quel fichier existe dans HDFS
— Sur quels DataNodes ses blocs sont stockés
— Le facteur de réplication de chaque bloc

2.2.2 DataNode (Workers)


Les DataNodes stockent physiquement les blocs de données sur le disque. Ils en-
voient régulièrement un heartbeat au NameNode pour signaler qu’ils sont actifs.

2.2.3 ResourceManager (Master)


Le ResourceManager est le chef d’orchestre de YARN. Il reçoit les demandes de
jobs MapReduce et distribue les tâches aux NodeManagers selon les ressources disponibles.

4
TP Big Data Cluster Hadoop avec Docker

2.2.4 NodeManager (Workers)


Chaque NodeManager exécute les tâches Map et Reduce sur son nœud local et
reporte leur avancement au ResourceManager.

2.3 Ports exposés

Port Composant Description


9870 NameNode Web UI État HDFS, blocs, DataNodes
8088 ResourceManager UI Jobs YARN, ressources
9000 HDFS RPC Communication inter-nœuds
9864 DataNode worker1 Interface DataNode
9865 DataNode worker2 Interface DataNode
8042 NodeManager worker1 Interface NodeManager
8043 NodeManager worker2 Interface NodeManager

Table 2.1 – Ports exposés du cluster

5
3. Configuration Technique

3.1 Dockerfile
Le Dockerfile définit l’image commune utilisée par les 3 conteneurs :
1 FROM eclipse - temurin :17 - jre
2

3 ENV HADOOP_VERSION =3.5.0


4 ENV HADOOP_HOME =/ opt / hadoop
5 ENV JAVA_HOME =/ opt / java / openjdk
6 ENV PATH = $PATH :/ opt / hadoop / bin :/ opt / hadoop / sbin
7

8 # Installation des dependances systeme


9 RUN apt - get update && apt - get install -y --no - install - recommends \
10 bash ca - certificates curl netcat - openbsd procps \
11 && rm - rf / var / lib / apt / lists /*
12

13 # Telechargement et installation de Hadoop


14 RUN curl - fsSL \
15 " https :// downloads . apache . org / hadoop / common / hadoop -3.5.0/ hadoop
-3.5.0. tar . gz " \
16 -o / tmp / hadoop . tar . gz \
17 && tar - xzf / tmp / hadoop . tar . gz -C / opt \
18 && ln -s "/ opt / hadoop -3.5.0" / opt / hadoop \
19 && rm / tmp / hadoop . tar . gz
20

21 RUN mkdir -p / data / nn / data / dn / data / tmp / config


22 COPY entrypoint . sh / entrypoint . sh
23 RUN chmod + x / entrypoint . sh
24 ENTRYPOINT ["/ entrypoint . sh "]
Listing 3.1 – Dockerfile du cluster Hadoop

3.2 Docker Compose


Le fichier [Link] orchestre les 3 services :
1 services :
2 master :
3 build : { context : . }
4 container_name : hadoop - master
5 hostname : master

6
TP Big Data Cluster Hadoop avec Docker

6 environment :
7 NODE_ROLE : master
8 ports :
9 - "9870:9870"
10 - "8088:8088"
11 - "9000:9000"
12 networks :
13 hadoop - net :
14 aliases : [ master ]
15 volumes :
16 - ./ config :/ config : ro
17 - nn_data :/ data / nn
18 - master_tmp :/ data / tmp
19

20 worker1 :
21 build : { context : . }
22 container_name : hadoop - worker1
23 hostname : worker1
24 environment :
25 NODE_ROLE : worker
26 depends_on : [ master ]
27 ports :
28 - "9864:9864"
29 - "8042:8042"
30 ...
31

32 networks :
33 hadoop - net :
34 name : hadoop - net
35 driver : bridge
36

37 volumes :
38 nn_data :
39 dn1_data :
40 dn2_data :
41 master_tmp :
42 worker1_tmp :
43 worker2_tmp :
Listing 3.2 – [Link]

3.3 Script [Link]


Ce script détermine le rôle de chaque conteneur au démarrage selon la variable d’en-
vironnement NODE_ROLE :
1 # !/ bin / bash
2 set -e
3

4 wait_for () {
5 local host = $1 port = $2

7
TP Big Data Cluster Hadoop avec Docker

6 while ! nc -z " $host " " $port " 2 >/ dev / null ; do
7 sleep 2
8 done
9 }
10

11 # Copier les configs XML


12 cp / config /*. xml " $HADOOP_HOME / etc / hadoop / "
13

14 case " $NODE_ROLE " in


15 master )
16 if [ ! -d / data / nn / current ]; then
17 hdfs namenode - format - force - nonInteractive
18 fi
19 hdfs namenode &
20 yarn resourcemanager &
21 tail -f / dev / null
22 ;;
23 worker )
24 wait_for master 9000
25 hdfs datanode &
26 yarn nodemanager &
27 tail -f / dev / null
28 ;;
29 esac
Listing 3.3 – [Link]

3.4 Fichiers de configuration XML


3.4.1 [Link]
1 < configuration >
2 < property >
3 < name > fs . defaultFS </ name >
4 < value > hdfs: // master:9000 </ value >
5 </ property >
6 < property >
7 < name > hadoop . tmp . dir </ name >
8 < value >/ data / tmp </ value >
9 </ property >
10 </ configuration >
Listing 3.4 – [Link]

3.4.2 [Link]
1 < configuration >
2 < property >
3 < name > dfs . replication </ name >

8
TP Big Data Cluster Hadoop avec Docker

4 < value >3 </ value >


5 </ property >
6 < property >
7 < name > dfs . namenode . name . dir </ name >
8 < value >/ data / nn </ value >
9 </ property >
10 < property >
11 < name > dfs . datanode . data . dir </ name >
12 < value >/ data / dn </ value >
13 </ property >
14 </ configuration >
Listing 3.5 – [Link]

3.4.3 [Link]
1 < configuration >
2 < property >
3 < name > yarn . resourcemanager . hostname </ name >
4 < value > master </ value >
5 </ property >
6 < property >
7 < name > yarn . nodemanager . aux - services </ name >
8 < value > mapreduce_shuffle </ value >
9 </ property >
10 < property >
11 < name > yarn . nodemanager . resource . memory - mb </ name >
12 < value > 2048 </ value >
13 </ property >
14 </ configuration >
Listing 3.6 – [Link]

3.4.4 [Link]
1 < configuration >
2 < property >
3 < name > mapreduce . framework . name </ name >
4 < value > yarn </ value >
5 </ property >
6 < property >
7 < name > mapreduce . application . classpath </ name >
8 < value >$ HADOOP_HOME / share / hadoop / mapreduce /* </ value >
9 </ property >
10 </ configuration >
Listing 3.7 – [Link]

9
4. Déploiement du Cluster

4.1 Lancement du cluster


1 d:
2 cd " D :\ Mastere \ Semestre2 \ BIG DATA \ tp "
3 docker compose up -d -- build
Listing 4.1 – Construction et lancement du cluster

4.2 Vérification de l’état des conteneurs


1 NAME IMAGE SERVICE STATUS PORTS
2 hadoop - master tp - master master Up 7 minutes
[Link]:9870 - >9870/ tcp
3 [Link]:8088 - >8088/
tcp
4 hadoop - worker1 tp - worker1 worker1 Up 7 minutes
[Link]:9864 - >9864/ tcp
5 hadoop - worker2 tp - worker2 worker2 Up 7 minutes
[Link]:9865 - >9864/ tcp
Listing 4.2 – Résultat de docker compose ps

✓ Résultat : Les 3 conteneurs sont en statut Up, le cluster est opérationnel.

4.3 Interfaces web

URL Description
[Link] NameNode — état HDFS, DataNodes connectés
[Link] ResourceManager — jobs YARN en cours
[Link] DataNode worker1
[Link] DataNode worker2

Table 4.1 – Interfaces web du cluster

10
TP Big Data Cluster Hadoop avec Docker

Figure 4.1 – Interface NameNode — [Link]

Figure 4.2 – Interface ResourceManager — [Link]

11
TP Big Data Cluster Hadoop avec Docker

Figure 4.3 – Interface DataNode worker1 — [Link]

12
5. Initialisation HDFS

5.1 Principe de HDFS


HDFS (Hadoop Distributed File System) est le système de fichiers distribué de Hadoop.
Il repose sur trois principes fondamentaux :
1. Découpage en blocs : chaque fichier est divisé en blocs de 128 Mo
2. Réplication : chaque bloc est copié sur plusieurs DataNodes (ici [Link]=2)
3. Tolérance aux pannes : si un nœud tombe, les données restent accessibles via
les réplicas

5.2 Commandes d’initialisation


1 docker compose exec master hdfs dfs - mkdir -p / tmp
2 docker compose exec master hdfs dfs - chmod 1777 / tmp
3 docker compose exec master hdfs dfs - mkdir -p / user / root / input
4 docker compose exec master bash -c \
5 " echo ’ bonjour hadoop docker bonjour tp ’ > / tmp / test . txt "
6 docker compose exec master hdfs dfs - put -f / tmp / test . txt / user /
root / input /
Listing 5.1 – Initialisation de HDFS

5.3 Ce qui se passe lors du put


Quand on uploade [Link] dans HDFS :
1. Le client contacte le NameNode pour créer l’entrée du fichier
2. Le NameNode désigne les DataNodes qui vont stocker les blocs
3. Le fichier est copié sur 2 DataNodes (worker1 et worker2)
4. Le NameNode enregistre la localisation des blocs

13
6. Exécution du Job MapReduce

6.1 Principe de MapReduce


MapReduce divise le traitement en 3 phases :

Phase Qui Ce qui se passe


Map Workers Lit les données et émet des paires (clé, valeur)
Shuffle Hadoop Regroupe automatiquement par clé
Reduce Workers Agrège les valeurs par clé

Table 6.1 – Les 3 phases de MapReduce

6.2 Exemple avec WordCount


Entrée : "bonjour hadoop docker bonjour tp"

Phase Map — chaque mot devient une paire (mot, 1) :

(bonjour, 1) (hadoop, 1) (docker, 1) (bonjour, 1) (tp, 1)

Phase Shuffle — regroupement par clé :

bonjour → [1, 1] docker → [1] hadoop → [1] tp → [1]

Phase Reduce — somme par clé :

bonjour → 2 docker → 1 hadoop → 1 tp → 1

6.3 Commande exécutée


1 docker compose exec master bash -c \
2 " hadoop jar $HADOOP_HOME / share / hadoop / mapreduce / \
3 hadoop - mapreduce - examples -*. jar \
4 wordcount / user / root / input / user / root / output "
Listing 6.1 – Lancement du job WordCount

14
TP Big Data Cluster Hadoop avec Docker

6.4 Logs du job


1 INFO mapreduce . Job : map 0% reduce 0%
2 INFO mapreduce . Job : map 100% reduce 0%
3 INFO mapreduce . Job : map 100% reduce 100%
4 INFO mapreduce . Job : Job job_1777018134744_0001 completed
successfully
Listing 6.2 – Extrait des logs MapReduce

6.5 Résultat obtenu


1 docker compose exec master hdfs dfs - cat / user / root / output / part -r
-00000
2

3 bonjour 2
4 docker 1
5 hadoop 1
6 tp 1
Listing 6.3 – Résultat final du WordCount

✓ Résultat correct :Le mot bonjour apparaît 2 fois (présent deux fois dans la
phrase), les autres mots apparaissent chacun 1 fois.

15
7. Analyse des Résultats

7.1 Compteurs MapReduce


L’analyse des compteurs retournés par le job nous donne :

Compteur Valeur Signification


Map input records 1 1 ligne lue en entrée
Map output records 5 5 mots émis par le Map
Combine output records 4 4 mots uniques après combinaison locale
Reduce input groups 4 4 groupes reçus par le Reduce
Reduce output records 4 4 mots uniques en sortie finale
HDFS bytes read 141 Données lues depuis HDFS
HDFS bytes written 33 Données écrites dans HDFS
CPU time (ms) 2310 Temps CPU total utilisé

Table 7.1 – Analyse des compteurs du job WordCount

7.2 Observations
— Le job a utilisé 1 Map task et 1 Reduce task (fichier petit)
— Sur de gros fichiers, Hadoop créerait plusieurs Map tasks en parallèle
— Le Combiner a réduit bonjour:[1,1] en bonjour:2 avant l’envoi au Reduce (op-
timisation réseau)
— Les 2 DataNodes ont bien participé au stockage (replication=2)

16
8. Conclusion

8.1 Bilan du TP
Ce TP a permis de :
— Déployer un cluster Hadoop complet avec 3 nœuds sur une machine locale
— Comprendre l’architecture HDFS (NameNode + DataNodes)
— Comprendre YARN (ResourceManager + NodeManagers)
— Exécuter un job MapReduce de bout en bout
— Analyser les logs et les compteurs du job

8.2 Avantages de l’approche Docker

Avantage Détail
Portabilité Le même cluster fonctionne sur Windows, Mac, Linux
Isolation Chaque nœud est indépendant
Reproductibilité Un seul docker compose up pour tout lancer
Facilité Pas besoin d’installer Hadoop sur la machine hôte

Table 8.1 – Avantages de Docker pour Hadoop

8.3 Limites observées


— Ressources limitées (RAM, CPU) car tout tourne sur un seul PC
— Le facteur de réplication [Link]=2 est le minimum pour la tolérance aux
pannes (en production : 3)
— MapReduce est moins rapide que Spark pour les traitements itératifs

8.4 Perspectives
En prolongement de ce TP, il serait intéressant de :
— Tester avec un fichier plus grand (plusieurs Mo ou Go)
— Écrire un job MapReduce personnalisé en Java
— Comparer les performances avec Apache Spark
— Déployer le cluster sur des machines physiques réelles

17
A. Structure du Projet

1 tp /
2 |-- Dockerfile
3 |-- docker - compose . yml
4 |-- entrypoint . sh
5 |-- commandes - hadoop - windows . md
6 ‘-- config /
7 | - - core - site . xml
8 | - - hdfs - site . xml
9 | - - yarn - site . xml
10 ‘-- mapred - site . xml
Listing A.1 – Arborescence du projet

18
B. Commandes de référence Windows
CMD

1 :: Aller dans le dossier


2 d:
3 cd " D :\ Mastere \ Semestre2 \ BIG DATA \ tp "
4

5 :: Lancer le cluster
6 docker compose up -d -- build
7

8 :: Verifier les conteneurs


9 docker compose ps
10

11 :: Initialiser HDFS
12 docker compose exec master hdfs dfs - mkdir -p / tmp
13 docker compose exec master hdfs dfs - chmod 1777 / tmp
14 docker compose exec master hdfs dfs - mkdir -p / user / root / input
15 docker compose exec master bash -c " echo ’ bonjour hadoop docker
bonjour tp ’ > / tmp / test . txt "
16 docker compose exec master hdfs dfs - put -f / tmp / test . txt / user /
root / input /
17

18 :: Lancer WordCount
19 docker compose exec master bash -c " hadoop jar $HADOOP_HOME / share /
hadoop / mapreduce / hadoop - mapreduce - examples -*. jar wordcount / user
/ root / input / user / root / output "
20

21 :: Voir le resultat
22 docker compose exec master hdfs dfs - cat / user / root / output / part -r
-00000
23

24 :: Supprimer output ( avant de relancer )


25 docker compose exec master hdfs dfs - rm -r / user / root / output
26

27 :: Arreter le cluster
28 docker compose down
29

30 :: Tout reinitialiser
31 docker compose down -v -- remove - orphans
32 docker compose up -d -- build -- force - recreate
Listing B.1 – Toutes les commandes Windows CMD

19

Vous aimerez peut-être aussi