Hadoop : Installation sur Ubuntu 18.04

Godson K. Kalipe
TakwimuLab
Published in
7 min readOct 1, 2020

Hadoop est aujourd'hui l'un des frameworks Big Data les plus populaires, sinon le plus populaire. Bien que ses caractéristiques puissent paraître intimidantes, il peut s'installer en quelques étapes simples sur votre machine. Dans cet article, nous allons réaliser ensemble l'installation sur Ubuntu 18.04 pas à pas. Ces instructions ont été testées pour Ubuntu 16.04 et 20.04 également.

Modes de déploiement de Hadoop

Il existe 3 modes de déploiement de Hadoop :

  • Le mode standalone(local) : Par défaut, Hadoop est configuré pour s'exécuter en mode non-distribué. Au lieu de HDFS, ce mode utilise le système de fichier local. Ce mode est utile pour le débuggage. Il est le mode le plus rapide de Hadoop et ne nécessite aucune configuration.
  • Le mode pseudo-distribué (noeud unique) : Dans ce mode, chaque daemon s'exécute dans un process java séparé. Chaque composant est exécuté dans une JVM isolée qui communique avec les autres JVM à travers les sockets réseau simulant ainsi un mini-cluster sur une unique machine. Dans ce cas de déploiement, Le DataNode et le NameNode sont distincts bien que résidant sur la même machine. Une configuration customisée est nécessaire (modification de core-site.xml, hdfs-site.xml, mapred-site.xml). Ce mode est utilisé pour tester Hadoop.
  • Le mode complètement distribué (Cluster multi-node) : Il s'agit du mode de production de Hadoop avec un cluster de serveurs contenant plusieurs machines ou noeuds. Un noeud sert de NameNode, un autre de gestionnaire de ressources (ce sont les deux noeuds maîtres). Tous les autres noeuds sont des noeuds esclaves. Dans ce mode, chaque daemon a une configuration spécifique pour son environnement.

Nous allons maintenant procéder à une installation de la version 3.2.1 de Hadoop sur Ubuntu en mode pseudo -distribué.

Étapes de l'installation

Installer java

Hadoop (MapReduce) est écrit en Java et donc nous avons besoin d'avoir Java installé afin de pouvoir faire notre installation. Par ailleurs, Hadoop3.x est compatible avec Java 8 donc c'est la version de java que nous allons utiliser. Pour installer java, depuis votre terminal Linux, entrez les commandes suivantes :

$ sudo apt-get update
$ sudo apt-get install openjdk8-jdk -y
$ java -version

Si l'installation s'est bien passée ou si vous avez déjà la version 8 de java installée, la commande java -version devrait vous donner le résultat ci-dessous.

Créer un utilisateur non root "hdoop" et un ssh pour ce utilisateur

C'est une bonne pratique communément acceptée de créer un utilisateur non root pour exécuter les daemons Hadoop. Ce faisant, on prévient par exemple qu'un utilisateur malicieux soit en mesure de créer un job MapReduce qui supprime non seulement nos données hdfs mais aussi des données locales sensibles telles que le système d'exploitation.

Par ailleurs, Hadoop requiert ssh afin que le NameNode puisse communiquer avec les datanodes. Pour créer l'utilisateur hdoop, les commandes suivantes les suivantes :

$ sudo apt install openssh-server openssh-client -y $ sudo adduser hdoop$ su -hdoop

Ensuite, on crée un ssh sans mot de passe pour cet utilisateur et on enregistre la clé publique parmi les clés autorisées du dossier ssh. Puis, on définit les permissions de notre utilisateur.

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

Vérifier que la configuration est bonne jusque là en vous connectant à votre localhost par ssh :

$ ssh localhost

Télécharger Hadoop

Nous téléchargeons ici la dernière version stable de Hadoop : 3.2.1 . On la décompresse pour commencer la configuration.

$ wget https://downloads.apache.org/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz$ tar -xzvf hadoop-3.2.1.tar.gz$ mv hadoop-3.2.1 /home/hdoop/

Configuration Hadoop

Configurer Hadoop consiste à éditer des variables d'environnement (.bashrc) puis à modifier 4 principaux fichiers de configurations (hadoop-env.sh, core-site.xml, hdfs-site.xml, yarn-site.xml).

  • Configurer les variables d'environnement (.bashrc) qui seront définies à chaque démarrage de console interactive :
$ nano ~/.bashrc

Ajouter au fichier .bashrc les lignes suivantes :

#Options concernant Hadoopexport JAVA_HOME =/usr/lib/jvm/java-8-openjdk-amd64export HADOOP_HOME=/home/hdoop/hadoop-3.2.1export HADOOP_INSTALL=$HADOOP_HOMEexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport YARN_HOME=$HADOOP_HOMEexport HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/binexport HADOOP_OPTS=”-Djava.library.path=$HADOOP_HOME/lib/native”

Ensuite appliquer les changements au .bashrc :

$ source ~/.bashrc
  • Configurer hadoop-env.sh qui sert à configurer YARN, HDFS, MapReduce et les paramètres des projets Hadoop. Trouvez le dossier de votre installation Java avec la commande :
$ readlink -f $(which java)

Vous devriez obtenir une sortie similaire à celle-ci.

Trouver le dossier d'installation Java

Ensuite, vous pouvez modifier le fichier de configuration en question :

$ nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh

Dans ce fichier, décommentez la ligne contenant $export JAVA_HOME et remplacez-la par le dossier d'installation de votre version de java 8.

$JAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64
  • Modifier core-site.xml : Ce fichier sert à configurer l'url du NameNode et le dossier temporaire dans lequel se feront les calculs MapReduce :
$ nano $HADOOP_HOME/etc/hadoop/core-site.xml

Ajouter au fichier core-site.xml les paramètres de configuration suivants :

<configuration><property><name>hadoop.tmp.dir</name><value>/home/hdoop/tmpdata</value></property><property><name>fs.default.name</name><value>hdfs://127.0.0.1:9000</value></property></configuration>

Créez le dossier tmpdata dans le dossier /home/hdoop

$ mkdir /home/hdoop/tmpdata
  • Modifier hdfs-site.xml qui permet de définir les dossiers correspondant au NameNode, au DataNode ainsi que le facteur de réplication de HDFS en faisant :
$ nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml

Puis, ajoutez au fichier hdfs-site.xml, la configuration suivante :

<configuration><property><name>dfs.data.dir</name><value>/home/hdoop/dfsdata/namenode</value></property><property><name>dfs.data.dir</name><value>/home/hdoop/dfsdata/datanode</value></property><property><name>dfs.replication</name><value>1</value></property></configuration>

Très important : n'oubliez de créer les dossiers correspondants au NameNode ainsi qu'au dataNode. Ces deux dossiers simulent des serveurs indépendants correspondant au NameNode et au DataNode.

$ mkdir /home/hdoop/namenode$ mkdir /home/hdoop/datanode
  • Modifier mapred-site.xml : Il sert à configurer le fonctionnement de mapreduce. Comme d'habitude, ouvrez le fichier avec :
$ nano $HADOOP_HOME/etc/hadoop/mapred-site.xml

Puis, ajoutez-y la configuration suivante :

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
  • Modifier yarn-site.xml : Il sert à configurer le gestionnaire de ressources. On ouvre ce dernier fichier à configurer avec :
$ nano $HADOOP_HOME/etc/hadoop/yarn-site.xml

Et on y ajoute la configuration ci-dessous :

<configuration><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><property><name>yarn.resourcemanager.hostname</name><value>127.0.0.1</value></property><property><name>yarn.acl.enable</name><value>0</value></property><property><name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PERPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value></property></configuration>

Pfioou! Voilà, notre configuration est enfin terminée. On peut passer au formattage du NameNode au système de fichiers HDFS.

Formattage du NameNode

Une seule commande suffit pour formatter notre NameNode (virtuel dans ce cas) pour qu'il n'utilise plus Ext4 mais HDFS :

$ hdfs namenode -format

Après avoir exécuté cette commande, il vous sera demandé de confirmer le reformattage du système de fichier. Vous pouvez entrer Y (pour Yes) sans crainte. Seul, le dossier /home/hdoop/namenode est concerné.

Confirmation de reformattage HDFS

Une fois le formattage terminé, vous devriez obtenir une sortie similaire à celle présentée sur la capture suivante si le formattage a été exécuté avec succès.

Démarrage du cluster Hadoop (Enfin ! 😱)

Pour démarrer le cluster Hadoop et lancer les différents daemons, positionnez-vous dans le dossier suivant :

$ cd /home/hdoop/hadoop-3.2.1/sbin/

Puis démarrez les NameNode et DataNode avec la commande :

$ ./start-dfs.sh

Pour démarrer YARN, la commande est :

$ ./start-yarn.sh

Utilisez la commande $jps pour afficher les daemons actuellement en exécution. Si vous avez correctement effectué la configuration, vous devriez obtenir la même sortie que sur la dernière image. Elle montre que tous les daemons sont effectivement en exécution.

Confirmation du démarrage effectif de Hadoop

Contrôle Hadoop par interface web

Maintenant que votre cluster Hadoop est en train de tourner, vous pouvez y accéder grâce aux interfaces web de contrôle des différents daemons.

Le NameNode est accessible à localhost:9870

Le DataNode est accessible à localhost:9864

Et YARN est accessible à localhost:8088

Ces différentes interfaces web permettent de contrôller la "santé"des différents noeuds ainsi que l'exécution des jobs MapReduce en cours et peuvent être très utiles dans un cluster en production.

Félicitations 🔥! Vous venez d'installer avec succès Hadoop sur votre machine.

Au cas vous êtes prêts à vous salir les mains, rendez-vous dans mon article sur l'introduction à HDFS ou dans celui sur la prise en main de MapReduce avec Python.

À très vite !

--

--