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

Le tutoriel Big Data du mois

Vous avez lu sûrement 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.

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

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éseauparametrage vm

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 : parametrage vm

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

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.

Tutoriel : interface eth0 non monté

Tutoriel : interface eth0 non monté

 

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 tweet

et passer ONBOOT à yes.

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

service network restart tweet

ifconfig pour vérifier:

Tutoriel : service network restart

Tutoriel : 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) tweet

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 tweet

Puis on crée un groupe « hadoop »

groupadd hadoop tweet

On crée ensuite notre utilisateur « hduser ».

useradd -g hadoop hduser tweet

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 tweet

ssh-keygen -t rsa -P «  » tweet

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

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 tweet

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
tweet

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 tweet

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 tweet

puis d’éteindre la VM

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

VBoxManage modifyvm <nom VM> –biossystemtimeoffset -0 tweet

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 tweet

puis on l’installe avec la commande suivante:

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

et voilà java installé.

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

java -version tweet

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 tweet

tar xvf hadoop-2.4.1.tar tweet

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

mv hadoop-2.4.1 hadoop tweet

On affecte ensuite les droits à notre utilisateur hduser:

chown -R hduser:hadoop hadoop tweet

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
tweet

Rebooter la machine

Finalisation du paramétrage Hadoop

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

mkdir -p /app/hadoop/tmp tweet

chown hduser:hadoop /app/hadoop/tmp tweet

chmod 750 /app/hadoop/tmp tweet

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>
tweet

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>
tweet

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>
tweet

 Formatage du NameNode

Sous hduser:

hadoop namenode –format tweet

Démarrage de Hadoop

cd /usr/local/hadoop tweet

sbin/start-dfs.sh tweet

Réglage du firewall

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

service iptables stop tweet

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

connexion 50070

 

Merci pour la lecture de ce tutoriel !

 

  • A propos
  • Derniers articles

One Comment

Rétroliens pour ce billet

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

Laissez un commentaire

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

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.