Aller au contenu

Hadoop en mode cluster


Virtualisation avec Docker

Utiliser plusieurs machines virtuelles requiert plus des ressources. Pour cela, nous allons utiliser des containers Docker.

Le scénario consiste à déployer 4 nœuds hadoop à partir d'une image Docker fournie ici. Cette image est similaire à celle utilisée avec VirtualBox : elle contient la verion 3.2.1 de hadoop, mrjob, python3 et jupyter.

Déploiement avec Docker

1⃣ Charger l'image docker

Soit à partir du fichier fourni :

docker load < hadoop-3.2.1-docker.tar.gz

Ou à partir du Docker Hub :

docker pull hhmida/hadoop:3.2.1

2⃣ Créer un réseau virtuel :

docker network create --driver bridge hadoopnet

3⃣ Exécuter 4 instance de l'image avec les noms nodemaster node2, node3, et node4

docker run -d --network hadoopnet --name nodemaster -it -h nodemaster -p 8088:8088 -p 9870:9870 -p 9864:9864 -p 19888:19888 -p 8042:8042 -p 8888:8888 hadoop:3.2.1
docker run -dP --network hadoopnet --name node2 -it -h node2 hadoop:3.2.1
docker run -dP --network hadoopnet --name node3 -it -h node3 hadoop:3.2.1
docker run -dP --network hadoopnet --name node4 -it -h node4 hadoop:3.2.1
Image téléchargée depuis Docker Hub

Si vous avez télécharger l'image avec la commande docker pull alors remplacer hadoop:3.2.1 par hhmida/hadoop:3.2.1.

4⃣ Formater le nodemaster :

docker exec -u hadoop -it nodemaster hadoop/bin/hdfs namenode -format

Démarrage du cluster

1⃣ Démarrer les containers

docker start nodemaster node2 node3 node4

2⃣ Démarrer les services hadoop

Exécuter ces 2 commandes pour démarrer les services à partir du nodemaster :

docker exec -u hadoop -d nodemaster /home/hadoop/hadoop/sbin/start-dfs.sh
docker exec -u hadoop -d nodemaster /home/hadoop/hadoop/sbin/start-yarn.sh

3⃣ créer le dossier racine sur HDFS

docker exec -u hadoop -it nodemaster /home/hadoop/hadoop/bin/hadoop fs -mkdir -p .

4⃣ Démarrer jupyter

docker exec -u hadoop -d nodemaster jupyter notebook --ip=0.0.0.0 --port=8888 --notebook-dir='/home/hadoop' --NotebookApp.token='' --NotebookApp.password=''

Arrêt des nœuds

docker stop nodemaster node2 node3 node4
Redémarrage du cluster

Pour redémarrer le cluster exécuter les étapes de la section Démarrage du cluster.

Vérification de l'état du cluster

Avec la commande jps:

Au niveau du nodemaster

Au niveau de node2 et node3

Accéder aux URLs suivantes pour vérifier l'état et la configuration du cluster

L'interface du Resource Manager montre les n&339;uds :

L'interface HDFS montre les nœuds DataNodes actifs :

Remarquer la colonne Last contact qui reflète le dernier heartbeaz reçu (inférieur au timeout par défaut : 3 Secondes).

Maintenant, arrêter le nœud node3 :

docker stop node4

Après 1000 Secondes le nœud est considéré comme indisponible :

Virtualisation avec machines virtuelles

Créer un cluster avec la machine virtuelle est plus simple mais nécessite plus de ressources. En effet, dans notre exemple et pour créer un cluster composé d'un maître et 2 workers, vous devez disposer de 8GO de RAM au minimum dont 6GO pour les machines virtuelles.

Modifications sur la machine virtuelle originale

1⃣ Changer le nom de la machine dans le fichier /etc/hostname en nodemaster

sudo echo "nodemaster" > /etc/hostname

2⃣ Modifier le fichier /etc/hosts :

sudo nano /etc/hosts

Puis écrire les lignes suivantes et enregistrer :

192.168.100.10 nodemaster
192.168.100.20 node2
192.168.100.30 mode3

3⃣ Modifier les fichiers de configuration de Hadoop

Modifier le fichier /ur/local/hadoop/etc/hadoop/core-site.xml ainsi :

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://nodemaster:9000</value>
</property>

Changer la replication dans /usr/local/hadoop/etc/hadoop/hdfs-site.xml

<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>

Ajouter cette propriété dans /usr/local/hadoop/etc/hadoop/yarn-site.xml

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>nodemaster</value>
</property>

Le fichier /usr/local/hadoop/etc/hadoop/workers contient les noms des machines du cluster, il sera utilisé pour démarrer les services depuis le nœud maître.

nodemaster
node2
node3
Workers

nodemaster dans cette configuration est considéré comme namenode et datanode à la fois.

Clonage de la machine virtuelle

1⃣ Créer 2 clones de la machine virtuelle originale qui vont être respectivement node2 et node3.

2⃣ Chager leurs noms dans /etc/hostname respectivement en node2 et node3

Sur la machine node2 :

sudo echo "node2" > /etc/hostname

Sur la machine node3 :

sudo echo "node3" > /etc/hostname

3⃣ Changer les adresses IP en 192.168.100.20 et 192.168.100.30 en suivant les étapes suivantes (refaire les mêmes étapes pour node3) :

sudo nano /etc/netplan/00-installer-config.yaml

Puis appliquer les modifications :

sudo netplan apply

5⃣ Redémarrer les 3 machines et démarrer les services depuis le nodemaster :

start-dfs.sh
start-yarn.sh

Vérifier avec jps ou les URLs http://192.168.100.10:9870 et http://192.168.100.10:8088

Test de l'arrêt d'un nœud : Voir la section pour l'exemple réalisé avec les containers Docker (ici).

Test de Map Reduce sur le cluster

Refaire l'exemple wordcout (voir ici):

Mettre le fichier shakespeare.txt sur HDFS :

hadoop fs -put shakespeare.txt

Lancer Jupyter

jupyter notebook --ip=0.0.0.0 --port=8888 --notebook-dir='/home/hadoop' --NotebookApp.token='' --NotebookApp.password=''

Se connecter à http://192.168.100.10:8888, créer le notebook et ajouter le code de l'exemple wordcount :

Pendant l'exécution, vous pouvez visualiser l'état des ressources allouées en cliquant sur Scheduler sur http://192.168.100.10:8088

Après l'exécution réussie sur le cluster, cliquer sur Applications pour vérifier l'état de l'application.

Pour afficher le détail des tâches, il est possible de voir le Job History. Démarrer le serveur job History et accéder à son interface web.

Démarrer le serveur

mapred jobhistoryserver start

Accès à l'interface web : http://192.168.100.10:19888

En cliquant sur le Job ID, le nombre de tâches Map et Reduce est affiché (dans ce cas 2 Maps et 1 Reduce)

Et puis chacune des tâches :

La première tâche Map

La seconde tâche Map

La tâche Reduce