Tutoriel : Installer soi-même un cluster Hadoop (1 nœud)

Vous avez sûrement lu de nombreux articles sur Hadoop et vous souhaitez maintenant vous familiariser avec. Mais comment faire pour apprivoiser cette nouvelle technologie ? L’approche recommandée consiste à installer une machine virtualisée fournie clé en main par les principaux éditeurs de distribution.

Tutoriel : Installer soi-même un cluster Hadoop (1 nœud)

 

Une autre approche, plus technique, consiste à installer soi-même Hadoop sur une seule machine (cluster à 1 noeud) afin de bien comprendre ce qui ce cache derrière ces technologies.

Et pour vous aider, ça tombe bien, j’ai rédigé un tutoriel qui devrait vous permettre de franchir le pas. C’est parti !

 

Introduction et références du tutoriel Hadoop

Je dispose d’un Macbook pro sous Mavericks. Pour des questions de simplicité et pour ne pas perturber mon travail courant, j’ai choisi de faire tourner Hadoop sur une machine virtualisée avec VirtualBox (version 4.3.10).

Pour le système d’exploitation, j’ai retenu Centos (version 6.5 64 bits) qui correspond à la version libre de Red Hat. J’ai choisi la version « minimale » car je n’ai pas besoin d’interface graphique : l’administration et la gestion de Hadoop se fera en mode « remote » à partir de ma machine hôte à savoir mon mac.

Ce tutoriel s’est largement inspiré d’un article excellent de Michael Noll.

Michael G. Noll - blog tutoriel

Michael G. Noll – blog tutoriel

Mais aussi de la documentation officielle Apache.

 

Paramétrage du réseau

Ce que l’on veut, c’est que la machine invitée (Centos) puisse accéder au net pour simplifier l’installation des paquets Linux tout en étant accessible par la machine hôte (OSX) en remote pour de l’administration. On veut également pouvoir accéder aux interfaces web des différents services proposés nativement par Hadoop.

Tutoriel Hadoop 1 nœud sur Mac : paramétrage virtual machine

Tutoriel Hadoop 1 nœud sur Mac : paramétrage virtual machine

 

Pour se faire, nous allons configurer un réseau virtuel NAT au niveau de notre machine virtuelle.

Comme pour un poste physique, un réseau NAT assure une translation d’adresse ip entre l’adresse externe et l’adresse de la machine. Cela fait que la machine n’est plus accessible de l’extérieur. Et cela assure donc une meilleure sécurité.

Dans notre cas, c’est un peu plus gênant car le serveur invité ne sera plus visible de l’hôte. Heureusement nous pouvons contourner ce problème par une redirection des ports.

Cela se paramètre au niveau de la configuration réseau de la machine virtuelle.

On va indiquer à la machine hôte (127.0.0.1) que tous les flux sur le port 2222 devront être redirigés sur le port 22 (le port ssh par défaut) de notre machine invitée.

Tutoriel redirection port

De cette manière, nous disposons d’une machine invitée qui pourra accéder au réseau externe et qui pourra communiquer avec sa machine hôte via ces redirections sur des ports spécifiques.

Une fois Centos installé, on va pouvoir s’occuper de la connexion à partir de la machine hôte.

Poursuivons ce tutoriel avec le paramétrage de la machine hôte…

 

Paramétrage accès à partir de la machine hôte

On a déjà redirigé le port 2222 mais ça ne suffit pas. L’installation « minimal » de Centos est vraiment minimale. L’interface eth0 n’est pas montée par défaut.

Interface eth0 non montée

 

La commande ifconfig ne montre en effet que seule la boucle locale est active.

On va donc modifier le fichier de paramétrage

vi /etc/sysconfig/network-scripts/ifcfg-eth0

et passer ONBOOT à yes.

On sauvegarde. Puis on redémarre les services avec la commande :

service network restart

ifconfig pour vérifier:

Service network restart

Service network restart

 

C’est mieux !

Du coup, je peux maintenant me connecter à partir de Terminal sous Mac pour accéder à ma machine Centos.

Tutoriel : connexion shh remote

Tutoriel : connexion shh remote

Si la connexion est refusée, cela peut provenir du fait que l’adresse ip 127.0.0.1 est peut-être déjà associée à une clé RSA différente correspondant à un serveur différent.

Le plus simple est de supprimer sur l’hôte le fichier stockant ces clés avec la commande :

rm /Users/userx/.ssh/known_hosts (à adapter en fonction de votre système hôte)

Configuration du ssh sur centos

Hadoop nécessite SSH pour fonctionner.

On installe les outils SSH client sur la machine Centos.

yum install openssh-clients

Puis on crée un groupe « hadoop »

groupadd hadoop

On crée ensuite notre utilisateur « hduser ».

useradd -g hadoop hduser

On va ensuite se connecter sous hduser et générer la clé publique de l’utilisateur qui permettra de s’authentifier de manière transparente sans ressaisir son mot de passe.

su – hduser

ssh-keygen -t rsa -P «  »

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

Désactivation de l’IPV6

L’IPV6 pose des problèmes. Il est conseillé de le désactiver.

Pour se faire on modifie le fichier sysctl.conf.

vi /etc/sysctl.conf

Et on rajoute ces lignes en fin de document

# disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Réglage de l’heure

S’il y a bien une chose que je trouve pénible sous VirtualBox, c’est que mes VM ne sont jamais à l’heure par défaut, ce qui n’est pas le cas sous VmWare. Heureusement, il y a une solution. (NB: en testant le tutoriel sur Yosemite et la dernière version de VirtualBox, je n’ai pas eu à régler l’heure).

On peut commencer par régler la date du système avec la commande :

Date –s HH :MM

Le problème, c’est qu’à chaque fois, l’heure se dérègle.

Ce que l’on veut, c’est en fait que l’heure de l’invité se cale sur l’heure de l’hôte.

Pour cela, il suffit de lancer la commande suivante :

sudo hwclock –hctosys

puis d’éteindre la VM

Exécuter sur l’hôte la commande suivante

VBoxManage modifyvm <nom VM> –biossystemtimeoffset -0

Et lorsque l’on relance, la VM est enfin à l’heure !

Installation de java

Pour avoir la liste des versions java.

J’ai retenu la version oracle 1.7.0_21.

On télécharge le fichier rpm sur le site d’oracle : jdk-7u21-linux-x64.rpm

On le transfère sur centos

scp -P 2222 jdk* root@127.0.0.1:/usr/local

puis on l’installe avec la commande suivante:

rpm –Uvh jdk-7u21-linux-x64.rpm

et voilà java installé.

On peut vérifier l’installation avec la commande:

java -version

Tutoriel : java version

Tutoriel : java version

Installation Hadoop

Télécharger Hadoop sur le site Apache.

Puis le copier sur /usr/local

On va ensuite décompresser l’archive:

cd /usr/local

tar xvf hadoop-2.4.1.tar

On renomme le répertoire pour plus de simplicité:

mv hadoop-2.4.1 hadoop

On affecte ensuite les droits à notre utilisateur hduser:

chown -R hduser:hadoop hadoop

Paramétrage du fichier .bashrc (hduser)

Rajouter les lignes suivantes à la fin fu fichier $HOME/.bashrc

# Set Hadoop-related environment variables
export HADOOP_HOME=/usr/local/hadoop
 
# Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)
export JAVA_HOME=/usr/java/latest
 
# Some convenient aliases and functions for running Hadoop-related commands
unalias fs &> /dev/null
alias fs="hadoop fs"
#unalias hls &> /dev/null
alias hls="fs -ls"
# If you have LZO compression enabled in your Hadoop cluster and
# compress job outputs with LZOP (not covered in this tutorial):
# Conveniently inspect an LZOP compressed file from the command
# line; run via:
#
# $ lzohead /hdfs/path/to/lzop/compressed/file.lzo
#
# Requires installed 'lzop' command.
#
#lzohead () {
# hadoop fs -cat $1 | lzop -dc | head -1000 | less
#} 
# Add Hadoop bin/ directory to PATH
export PATH=$PATH:$HADOOP_HOME/bin

Rebooter la machine

Finalisation du paramétrage Hadoop

Création d’un répertoire temporaire pour Hadoop

mkdir -p /app/hadoop/tmp

chown hduser:hadoop /app/hadoop/tmp

chmod 750 /app/hadoop/tmp

Les fichiers de paramétrage se trouve à l’emplacement suivant: /usr/local/hadoop/etc/hadoop

Paramétrage core-site.xml

Copier les lignes suivantes entre les balises de configurations.

<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
 
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.</description>
</property>

Paramétrage hdfs-site.xml

Copier les lignes suivantes entre les balises de configurations.

<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
</description>
</property>

Paramétrage mapred-site.xml

Au préalable : cp mapred-site.xml.template mapred-site.xml

Puis copier les lignes suivantes entre les balises de configurations

<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>

 Formatage du NameNode

Sous hduser:

hadoop namenode –format

Démarrage de Hadoop

cd /usr/local/hadoop

sbin/start-dfs.sh

Réglage du firewall

Le firewall est activé par défaut sur centos. On va donc le désactiver afin de pourvoir tester la connexion via l’interface http.

service iptables stop

Vérification de l’installation

On peut maintenant accéder à l’interface web Hadoop à partir de la machine hôte sur 127.0.0.1:50070

Merci pour la lecture de ce tutoriel !

 

edit: Pierre a signalé dans les commentaires un problème d’accès à l’interface web hadoop et a trouvé une solution alternative. Une solution plus simple consiste à rajouter une redirection du port 50070 au niveau du paramétrage réseau de notre machine virtuelle.

 

  • A propos
  • Derniers articles

4 Comments

  1. Merci pour le tutoriel, j’y étais presque mais
    malheureusement rien sur l’adresse
    127.0.0.1:50070

    Pourquoi ce numero de port ?

    • Author

      Bonjour Pierre,
      C’est le port par défaut d’accès à la console Hadoop.

      Difficile de t’aider sur ton problème sinon.
      Je t’invite à bien t’assurer que l’accès au port 50070 est bien ouvert.
      Bon courage.

      • Finalement j’ai réussi en créant un deuxième réseau en mode « Host-Only ».
        On peut récupérer l’adresse IP avec « ifconfig » sur la VM qui commence par 192.168.
        on peut ensuite aller sur http://192.168.X.X:50070 et ca marche.

  2. Author

    Bravo et merci Pierre pour ce retour.
    Je pense que le problème initial vient de la redirection de port qui n’est pas faite sur le 50070.
    Cela évite de créer un deuxième réseau.

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*