Académique Documents
Professionnel Documents
Culture Documents
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.
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.
- 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.
$ sshkeygen t rsa P ""
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
$ sshcopyid i /home/hduser/.ssh/id_rsa.pub hduser@localhost
$ ssh localhost
$ exit
hduser@zaidouniVirtualBox:~$ su
root@zaidouniVirtualBox:~# mkdir /opt/java
Vous pouvez extraire l'archive en utilisant la commande tar comme indiqué ci-dessous :
root@zaidouniVirtualBox:~# cd /home/hduser/Documents
root@zaidouniVirtualBox:/home/hduser/Documents# tar zxvf jdk8u71linux
x64.tar.gz
root@zaidouniVirtualBox:/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@zaidouniVirtualBox:/home/hduser/Documents# cd /opt/java/jdk1.8.0_71/
root@zaidouniVirtualBox:/opt/java/jdk1.8.0_71# updatealternatives install
/usr/bin/java java /opt/java/jdk1.8.0_71/bin/java 100
root@zaidouniVirtualBox:/opt/java/jdk1.8.0_71# updatealternatives config java
Pour mettre en place de manière permanente les variables d'environnement JAVA pour tous les utilisateurs :
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@zaidouniVirtualBox:/opt/java/jdk1.8.0_71# source /etc/profile
root@zaidouniVirtualBox:/opt/java/jdk1.8.0_71# su hduser
hduser@zaidouniVirtualBox:~$ 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@zaidouniVirtualBox:~$ echo $PATH
Etape 4 : Installation d'Apache Hadoop 3.1.2
hduser@zaidouniVirtualBox:~$ cd /home/hduser/Documents/
hduser@zaidouniVirtualBox:~/Documents$ tar zxvf hadoop3.1.2.tar.gz
hduser@zaidouniVirtualBox:~/Documents$ mv hadoop3.1.2 hadoop
hduser@zaidouniVirtualBox:~/Documents$ sudo mv hadoop /usr/local/hadoop/
hduser@zaidouniVirtualBox:~/Documents$ sudo chown R hduser /usr/local/hadoop
#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
export JAVA_HOME=/opt/java/jdk1.8.0_71/
hduser@zaidouniVirtualBox:~$ sudo mkdir p /app/hadoop/tmp
hduser@zaidouniVirtualBox:~$ sudo chown hduser /app/hadoop/tmp
- Modification des fichiers de configuration de Hadoop :
hduser@zaidouniVirtualBox:~$ 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@zaidouniVirtualBox:/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
************************************************************/
hduser@zaidouniVirtualBox:/usr/local/hadoop/etc/hadoop$ startdfs.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.
$ hdfs dfsadmin report
…
hduser@zaidouniVirtualBox:~$ cd /home/hduser/Documents/code/
hduser@zaidouniVirtualBox:~/Documents/code$ mkdir p org/hadoop/wordcount/
hduser@zaidouniVirtualBox:~/Documents/code$ . classpath
hduser@zaidouniVirtualBox:~/Documents/code$ javac WCount*java
hduser@zaidouniVirtualBox:~/Documents/code$ mv *.class org/hadoop/wordcount/
Générez le .jar:
hduser@masterVirtualBox:~/Documents/code$
jar cvf wcount.jar . /home/hduser/Documents/code/org
hduser@zaidouniVirtualBox:~$ cd /usr/local/hadoop/
hduser@zaidouniVirtualBox:/usr/local/hadoop$
bin/hdfs dfs put /home/hduser/Documents/code/poeme.txt /
hduser@zaidouniVirtualBox:/usr/local/hadoop$ bin/hdfs dfs ls /
hduser@zaidouniVirtualBox:~$ cd /home/hduser/Documents/code/
hduser@zaidouniVirtualBox:~/Documents/code$
hadoop jar wcount.jar org.hadoop.wordcount.WCount /poeme.txt /results
hduser@zaidouniVirtualBox:~/Documents/code$ hadoop fs ls /results
hduser@zaidouniVirtualBox:~/Documents/code$ hadoop fs cat /results/partr00000
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.
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
auto enp0s3
iface enp0s3 inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.254
$ 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/
<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>
<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>
<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>
$ cd /usr/local/hadoop/etc/hadoop
$ vim masters
hadoopmaster
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 :
Une fois le clonage terminé des deux machines, vous allez démarrer les deux machines.
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
$ 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:~$ sshcopyid i /home/hduser/.ssh/id_rsa.pub
hduser@hadoopmaster
hduser@hadoopmaster:~$ sshcopyid i /home/hduser/.ssh/id_rsa.pub hduser@slave1
hduser@hadoopmaster:~$ sshcopyid i /home/hduser/.ssh/id_rsa.pub hduser@slave2
<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/
hduser@hadoopmaster:/usr/local/hadoop/etc/hadoop$ hdfs namenode format
…
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>
$ 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/
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/partr00000
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.