Vous êtes sur la page 1sur 20

Institut National des Postes et Télécommunications 2019-2020

TP 1 : Installation et configuration d'Apache Hadoop et exécution d'un


programme MapReduce dans un cluster hadoop à nœud unique et à nœuds
multiples.
Filière : Data Engineer
Encadré par : Pr. D. ZAIDOUNI et M. L. ABIDAR

Les objectifs de ce TP sont les suivants :


 Installation et configuration d'un nœud unique d'Apache Hadoop 3.1.2
 Exécution du programme MapReduce « Word Count » dans le cluster à nœud unique de Hadoop
 Installation et configuration d'un cluster multi-noeuds d'Apache Hadoop 3.1.2
 Exécution du programme MapReduce « Word Count » dans le cluster multi-noeuds de Hadoop

Pré-requis techniques :
Dans ce TP, nous allons installer Oracle VM VirtualBox-6.0 et nous allons créer des machines virtuelles avec
le système d'exploitation open source Ubuntu 18.04.3.

Installation Oracle VM VirtualBox-6.0.8 :


Donc, avant de commencer le TP, il faut installer Oracle VM VirtualBox-6.0. Pour cela :
Copier le .deb relatif à VirtualBox-6.0 de la clé USB dans un répertoire en local et il suffit de faire un double clic sur
le .deb afin d’installer VirtualBox-6.0.
- Installer le paquet suivant:
 $ sudo apt­get install dkms
- Taper la commande :
$ sudo usermod ­G vboxusers ­a user
(remplacer «user» par le hostname de votre machine)
Redémarrer la machine pour prendre en compte les modifications.

Dans la fenêtre de la VM, cliquer sur l’onglet : Périphérique, puis USB, et enfin choisissez le nom de votre
clé usb que vous voulez rediriger vers la VM.

Créer une machine virtuelle ubuntu 18.04.3 en utilisant Virtualbox avec les caractéristiques suivantes : 4096 Mio de
mémoire et 10GB de disque.
1) Installation et configuration d'un nœud unique d'Apache Hadoop 3.1.2 :
Etape 1 : Création d'un utilisateur hduser
Nous vous recommandons de créer une compte normal (non root) pour travailler avec Hadoop. Il faut donc créer un
compte système hduser en utilisant la commande suivante :
$ sudo adduser hduser

Pour éviter les erreurs du types « hduser is not in the sudoers file », exécuter la commande :
$ sudo adduser hduser sudo
Redémarrer la machine virtuelle et utiliser le nouveau compte hduser.

Copier de la clé USB à /home/hduser/Documents les fichiers suivants :

- hadoop-3.1.2.tar.gz
- jdk-8u71-linux-x64.tar.gz (Java Development Kit).
- Code source du programme MapReduce « word count » contenant la classe driver, map et reduce.
- Un script permettant de mettre en place les variables de l'environnement de compilation.
- Le fichier : poeme.txt.

Etape 2 : Mise en place de la clé ssh


Installez le paquet nécessaire pour ssh en tapant la commande :
$ sudo apt­get install openssh­server
(Remarque : en cas d’erreur, taper : sudo apt ­­fix­broken install)
Maintenant, il faut mettre en place la clé ssh pour son propre compte. Pour cela, exécutez les commandes suivantes :

$ ssh­keygen ­t rsa ­P ""
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
$ chmod 0600 ~/.ssh/authorized_keys 

Copiez la clé public sur le serveur localhost :

$ ssh­copy­id ­i /home/hduser/.ssh/id_rsa.pub  hduser@localhost

Testez la connexion à localhost :

$ ssh localhost
$ exit

Etape 3 : Installation de JAVA 8


Pour un accès global (pour tous les utilisateurs), installez de préférence dans le répertoire / opt /java.

hduser@zaidouni­VirtualBox:~$ su ­

root@zaidouni­VirtualBox:~# mkdir /opt/java
Vous pouvez extraire l'archive en utilisant la commande tar comme indiqué ci-dessous :
root@zaidouni­VirtualBox:~# cd /home/hduser/Documents
root@zaidouni­VirtualBox:/home/hduser/Documents# tar ­zxvf jdk­8u71­linux­
x64.tar.gz
root@zaidouni­VirtualBox:/home/hduser/Documents# mv jdk1.8.0_71/ /opt/java/

Utilisez la commande update-alternatives pour dire au système où java et ses exécutables sont installés.
root@zaidouni­VirtualBox:/home/hduser/Documents# cd /opt/java/jdk1.8.0_71/
root@zaidouni­VirtualBox:/opt/java/jdk1.8.0_71#     update­alternatives   ­­install
/usr/bin/java java /opt/java/jdk1.8.0_71/bin/java 100  
root@zaidouni­VirtualBox:/opt/java/jdk1.8.0_71# update­alternatives ­­config java

Mettez à jour aussi javac alternatives :

root@zaidouni­VirtualBox:/opt/java/jdk1.8.0_71#   update­alternatives   ­­install


/usr/bin/javac javac /opt/java/jdk1.8.0_71/bin/javac 100 

root@zaidouni­VirtualBox:/opt/java/jdk1.8.0_71#   update­alternatives   ­­config


javac

Installez un éditeur de texte par exemple « vim » : $ apt install vim

Pour mettre en place de manière permanente les variables d'environnement JAVA pour tous les utilisateurs :

Ouvrez le fichier /etc/profile et ajoutez les lignes ci-dessous à la fin du fichier.

export JAVA_HOME=/opt/java/jdk1.8.0_71/

export JRE_HOME=/opt/java/jdk1.8.0._71/jre

export PATH=$PATH:/opt/java/jdk1.8.0_71/bin:/opt/java/jdk1.8.0_71/jre/bin

Après avoir enregistré le fichier profile, exécutez la commande source pour recharger le fichier (en tant que root et avec
l'utilisateur hadoop) :

root@zaidouni­VirtualBox:/opt/java/jdk1.8.0_71# source /etc/profile

root@zaidouni­VirtualBox:/opt/java/jdk1.8.0_71# su ­ hduser

hduser@zaidouni­VirtualBox:~$ source /etc/profile

Remarque : Pour mettre en place mettre en place de manière permanente les variables d'environnement JAVA pour un
utilisateur unique, il faut ajouter les mêmes lignes ci-dessus au fichier :  ~/.bashrc

Vous pouvez tester la mise en place des variables d'environnement dans le terminal hadoop en tapant:

hduser@zaidouni­VirtualBox:~$ echo $PATH
Etape 4 : Installation d'Apache Hadoop 3.1.2

hduser@zaidouni­VirtualBox:~$ cd /home/hduser/Documents/
hduser@zaidouni­VirtualBox:~/Documents$ tar ­zxvf hadoop­3.1.2.tar.gz
hduser@zaidouni­VirtualBox:~/Documents$ mv hadoop­3.1.2 hadoop
hduser@zaidouni­VirtualBox:~/Documents$ sudo mv hadoop /usr/local/hadoop/
hduser@zaidouni­VirtualBox:~/Documents$ sudo chown ­R hduser /usr/local/hadoop

Créez les répertoire de stockage de données de hadoop:


hduser@zaidouni­VirtualBox:~$
sudo mkdir ­p /usr/local/hadoop_store/hdfs/namenode
hduser@zaidouni­VirtualBox:~$ 
sudo mkdir ­p /usr/local/hadoop_store/hdfs/datanode
hduser@zaidouni­VirtualBox:~$ sudo chown ­R hduser /usr/local/hadoop_store

Etape 5 : Configuration d'Apache Hadoop 3.1.2


- Mise en place des variables d'environnements :
Modifiez le fichier : $vim .bashrc en ajoutant les lignes suivantes à la fin du fichier :

#HADOOP VARIABLES START

export JAVA_HOME=/opt/java/jdk1.8.0_71/
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
#export HADOOP_OPTS="­Djava.library.path=$HADOOP_INSTALL/lib"
#HADOOP VARIABLES END

Rechargez le fichier ~/.bashrc en utilisant la fonction source :


hduser@zaidouni­VirtualBox:~$ source .bashrc

Maintenant, ouvrez le fichier /usr/local/hadoop/etc/hadoop/hadoop-env.sh et modifiez la variable d'environnement


JAVA_HOME :

export JAVA_HOME=/opt/java/jdk1.8.0_71/

Créez le répertoire des fichiers temporaires de hadoop :

hduser@zaidouni­VirtualBox:~$ sudo mkdir ­p /app/hadoop/tmp
hduser@zaidouni­VirtualBox:~$ sudo chown hduser /app/hadoop/tmp
- Modification des fichiers de configuration de Hadoop :

hduser@zaidouni­VirtualBox:~$ cd /usr/local/hadoop/etc/hadoop/

Ouvrez le fichier core-site.xml et entrez ce qui suit entre <configuration> et </ configuration> :

<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
</property>
</configuration>

Ouvrez le fichier hdfs-site.xml et entrez ce qui suit entre <configuration> et </ configuration> :

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>

Ouvrez le fichier mapred-site.xml et entrer ce qui suit entre <configuration> et </ configuration> :

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:54311</value>
</property>
</configuration>
Ouvrez le fichier yarn-site.xml et entrer ce qui suit entre <configuration> et </ configuration> :

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

- Formatage du Namenode :
hduser@zaidouni­VirtualBox:/usr/local/hadoop/etc/hadoop$ hdfs namenode ­format

...
...
2019-10-07 17:10:48,773 INFO common.Storage: Storage directory /usr/local/hadoop_store/hdfs/namenode
has been successfully formatted.
2019-10-07 17:10:48,813 INFO namenode.FSImageFormatProtobuf: Saving image file
/usr/local/hadoop_store/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 using no compression
2019-10-07 17:10:48,920 INFO namenode.FSImageFormatProtobuf: Image file
/usr/local/hadoop_store/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 of size 393 bytes saved
in 0 seconds .
2019-10-07 17:10:48,939 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid
>= 0
2019-10-07 17:10:48,951 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at zaidouni-VirtualBox/127.0.1.1
************************************************************/

Maintenant, il est temps de démarrer le cluster à nœud unique nouvellement installé.


Pour cela, lancer les scripts start-dfs.sh et start-yarn.sh :

hduser@zaidouni­VirtualBox:/usr/local/hadoop/etc/hadoop$ start­dfs.sh
La machine virtuelle Java dispose d'un outil jps qui est un peu comme la commande ps. jps répertorie tous les processus
Java d'un utilisateur . En utilisant cette commande, on peut vérfier si tous les composants du cluster fonctionnent.

Si vous avez le même affichage ci-dessous c'est que vous avez une instance fonctionnelle de Hadoop.

- Accéder aux services de Hadoop via le navigateur :


Hadoop NameNode démarre sur le port 9870 par défaut. Accédez à http://localhost:9870/ dans votre navigateur web
préféré :
Maintenant, accéder à : http://localhost:8088/ pour obtenir les informations sur le cluster et toutes les applications :

2) Exécution d'un programme Map/Reduce dans un cluster à nœud


unique :

    $ hdfs dfsadmin ­report

hduser@zaidouni­VirtualBox:~$ cd /home/hduser/Documents/code/
hduser@zaidouni­VirtualBox:~/Documents/code$ mkdir ­p org/hadoop/wordcount/
hduser@zaidouni­VirtualBox:~/Documents/code$ . classpath
hduser@zaidouni­VirtualBox:~/Documents/code$ javac WCount*java
hduser@zaidouni­VirtualBox:~/Documents/code$ mv *.class org/hadoop/wordcount/
Générez le .jar:
hduser@master­VirtualBox:~/Documents/code$ 
jar ­cvf wcount.jar . /home/hduser/Documents/code/org

hduser@zaidouni­VirtualBox:~$ cd /usr/local/hadoop/
hduser@zaidouni­VirtualBox:/usr/local/hadoop$
bin/hdfs dfs ­put /home/hduser/Documents/code/poeme.txt /
hduser@zaidouni­VirtualBox:/usr/local/hadoop$ bin/hdfs dfs ­ls /

hduser@zaidouni­VirtualBox:~$ cd /home/hduser/Documents/code/
hduser@zaidouni­VirtualBox:~/Documents/code$
hadoop jar wcount.jar org.hadoop.wordcount.WCount /poeme.txt /results

hduser@zaidouni­VirtualBox:~/Documents/code$ hadoop fs ­ls /results
hduser@zaidouni­VirtualBox:~/Documents/code$ hadoop fs ­cat /results/part­r­00000
Vous pouvez utiliser les scripts stop-dfs.sh et stop-yarn.sh pour arrêter tous les daemons en cours d'exécution sur votre
machine virtuelle.

3) Configuration d'un cluster multi-noeuds d'Apache Hadoop :


Nous allons travaillé avec la machine virtuelle précédemment configuré en node unique dans le TP précédent.

Dans cette VM :

- Modifiez le fichier /etc/hostname de la machine (sudo vim etc/hostname) , supprimez son contenu et ajoutez le
nouveau hostname de la machine master :

hadoopmaster

- Modifier le fichier /etc/hosts de la machine en ajoutant les lignes suivantes qui représentent les IP fixes des différentes
machines du cluster :

192.168.0.1 hadoopmaster
192.168.0.2 slave1
192.168.0.3 slave2

Attribution statique d'adresse IP à la machine hadoopmaster:


Afin de configurer de manière permanente l'adresse IP fixe de la machine hadoopmaster, il faut ajouter les lignes
suivantes dans /etc/network/interfaces :

auto enp0s3
iface enp0s3 inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.254

- Redémarrer la machine pour prendre en compte les configurations :

$ sudo reboot
Suppression des fichiers du répertoire de stockage de données créer par l'installation single node de Hadoop :

$cd  /usr/local/hadoop_store/
$ rm ­rf *
$ mkdir ­p /usr/local/hadoop_store/hdfs/namenode
Rendre hduser propriétaire de ce répertoire :
$ chown ­R hduser  /usr/local/hadoop_store/hdfs/namenode
Modification des fichiers de configuration de hadoop :
$ cd /usr/local/hadoop/etc/hadoop/

Modifiez le fichier core-site.xml en ajoutant le contenu suivant à la place de <configuration> </configuration>:

<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/tmp</value>
</property>

<property>
<name>fs.default.name</name>
<value>hdfs://hadoopmaster:54310</value>
</property>
</configuration>

Modifiez le fichier hdfs-site.xml:

<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
</configuration>

Modifiez le fichier mapred-site.xml :


<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoopmaster:54311</value>
</property>
</configuration>
Modifiez le fichier yarn-site.xml :

<configuration>

<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoopmaster:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoopmaster:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoopmaster:8050</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

</configuration>

Création du fichier masters :

Créer le fichier masters qui contient le hostname de la machine master :

$ cd /usr/local/hadoop/etc/hadoop
$ vim masters
hadoopmaster

Modification du fichier workers :

Modifiez le fichier workers qui contient le hostname de chaque machine slave dans le répertoire :
$ cd /usr/local/hadoop/etc/hadoop
$ vim workers

slave1 
slave2
Clonage de la machine hadoopmaster :

Nous allons cloner deux machines slave1 et slave2 à partir de la machine hadoopmaster, pour cela effectuer les étapes
suivantes :

- Eteindre la machine hadoopmaster


- Bouton droit sur l'icone de la machine dans le gestionnaire virtualBox, puis cloner.
- Entrez le nom de la machine puis suivant.
- Choisissez le type de clonage : clone intégral.

Une fois le clonage terminé des deux machines, vous allez démarrer les deux machines.

Mofication à faire dans les machines slave1 et slave2 :

Configuration d'adresse IP fixe et de hostname :

Afin de configurer de manière permanente l'adresse IP fixe de la machine slave1, il faut modifier le fichier
/etc/network/interfaces :

auto enp0s3
iface enp0s3 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.254

- Modifier le fichier /etc/hostname de la machine slave1 , supprimer son contenu et ajouter le nouveau hostname :

slave1

De même pour la machine slave2, changer l'adresse par : 192.168.0.3 et le hostname par : slave2

Pour prendre en compte les modifications, il faut redémarrer les deux machines slave1 et slave2: $ sudo reboot

- Dans la machine slave1 et slave2, supprimer les fichiers du répertoire de stockage de données créer par l'installation
single node de Hadoop :

$cd  /usr/local/hadoop_store/
$ rm ­rf *
$ mkdir ­p /usr/local/hadoop_store/hdfs/datanode

Rendre hduser propriétaire de ce répertoire :

$ chown ­R hduser  /usr/local/hadoop_store/hdfs/datanode
Connexion entre les machines du cluster :
Nous avons choisi d'établir un réseau ponté pour connecter les différents machines virtuelles entre-elles. Pour cela, dans
le gestionnaire Oracle VM VirtualBox, effectuer la configuration suivante pour chaque VM du cluster :

Configuration < Réseau < Mode d'accès réseau : Accès par pont, puis choisir le nom du pont parmi la liste (par
exemple: wlp3s0) et ensuite choisir: Tout autoriser pour le Mode de promiscuité et enfin: OK.

Testez la connexion entre les machines du cluster en effectuant des pings entre les différentes machines.

Copiez la clé ssh pour configurer un accès ssh sans mot de passe entre les machines du cluster.
hduser@hadoopmaster:~$ ssh­copy­id ­i /home/hduser/.ssh/id_rsa.pub 
hduser@hadoopmaster

hduser@hadoopmaster:~$ ssh­copy­id ­i /home/hduser/.ssh/id_rsa.pub hduser@slave1

hduser@hadoopmaster:~$ ssh­copy­id ­i /home/hduser/.ssh/id_rsa.pub hduser@slave2

Testez la connexion ssh entre les machines du cluster.

Modifier le fichier hdfs-site.xml de la machine virtuelle slave1 et slave2 comme suit :

<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>
Remarque importante : Avant de démarrer le cluster, il faut vider aussi le répertoire de stockage du nœud
hadoopmaster :

hduser@hadoopmaster:/usr/local/hadoop_store$ cd /usr/local/hadoop_store/
hduser@hadoopmaster:/usr/local/hadoop_store$ rm ­rf *
hduser@hadoopmaster:/usr/local/hadoop_store$ 
mkdir ­p /usr/local/hadoop_store/hdfs/namenode
hduser@hadoopmaster:/usr/local/hadoop_store$ 
chown ­R hduser /usr/local/hadoop_store/

Fomater le namenode dans hadoopmaster :

hduser@hadoopmaster:/usr/local/hadoop/etc/hadoop$ hdfs namenode ­format

… 

Lancer les commandes : $ start­dfs.sh et $ start­yarn.sh.


Lancer la commande jps dans chaque machine du cluster hadoop :

- Accéder aux services de Hadoop via le navigateur :


Hadoop NameNode démarre sur le port 9870 par défaut. Accédez à http://hadoopmaster:9870/ dans votre navigateur
web :
Cliquer sur live nodes dans la fenêtre précédente pour obtenir des informations sur les datanodes :

Vous pouvez ajouter le nœud hadoopmaster comme datanode aussi, pour cela les fichiers suivants doivent être modifiés
comme suit :
Modifier le fichier hdfs-site.xml de hadoopmaster comme suit:

<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>
Modifier le fichier hdfs-site.xml de slave1 et slave2 comme suit: (la valeur de réplication devient 3) :

<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>

Modification du fichier slaves dans hadoopmaster, slave1 et slave2:

$ cd /home/hduser/hadoop/etc/hadoop :
$ gedit etc/hadoop/slaves

hadoopmaster
slave1 
slave2

Ensuite videz le répertoire de stockage de hadoop « /usr/local/hadoop_store/ » et créer les nouveaux répertoires :

hduser@hadoopmaster:/usr/local/hadoop_store$ cd 
/usr/local/hadoop_store/hduser@hadoopmaster:/usr/local/hadoop_store$ rm ­rf * 
hduser@hadoopmaster:/usr/local/hadoop_store$ mkdir ­p 
/usr/local/hadoop_store/hdfs/namenode

hduser@hadoopmaster:/usr/local/hadoop_store$ mkdir ­p 
/usr/local/hadoop_store/hdfs/datanode

hduser@hadoopmaster:/usr/local/hadoop_store$ chown ­R hduser 
/usr/local/hadoop_store/

Enfin, reformatez hadoopmaster et lancer les scripts : start-dfs.sh et yarn-dfs.sh.

4) Exécution d'un programme Map/Reduce dans un cluster multi-noeuds :


Lancer la commande : « hdfs dfsadmin -report » pour vérifier le bon fonctionnement de tous les nœuds du cluster.
Suivez les mêmes étapes décrites dans la section 2 du TP précédent : Exécution d'un programme Map/Reduce dans un
cluster à noeud unique.

hduser@hadoopmaster:~$ cd /usr/local/hadoop/

hduser@hadoopmaster:/usr/local/hadoop$ 
bin/hdfs dfs ­put /home/hduser/Documents/code/poeme.txt /

hduser@hadoopmaster:~$ cd /home/hduser/Documents/code/

hduser@hadoopmaster:~/Documents/code$
hadoop jar wcount.jar org.hadoop.wordcount.WCount /poeme.txt /results

hduser@hadoopmaster:~/Documents/code$ hadoop fs ­ls /results

hduser@hadoopmaster:~/Documents/code$ hadoop fs ­cat /results/part­r­00000
Rédaction du rapport du TP 2 :
Rédigez un rapport détaillé de ce TP incluant les captures d'écran des différentes manipulations, ainsi que vos
remarues et vos problèmes rencontrés.

Vous aimerez peut-être aussi