Hadoop - Cluster multinode
22/Sep 2015
1 - Qu’est-ce que Hadoop ?
Hadoop est un framework destiné à faciliter la création d’applications distribuées et échelonnables permettant aux applications de travailler avec de nombreux noeuds et des données de grandes tailles.
2 - Contexte initial
Nous avons déployé les serveurs suivants :
- clmaster1 : 192.168.1.1 - CentOS 7
- clslave1 : 192.168.1.50 - CentOS 7
3 - Situation finale
Hadoop sera installé de la manière suivante :
Le noeud maître disposera des rôles suivants :
Namenode,
Secondary Namenode,
Resource ManagerLe noeud esclave disposera du rôle suivant :
Datanode
Node Manager
4 - Comment installer Hadoop dans cet environnement ?
Génération de clé ssh et copie de la clé sur les noeuds esclaves
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@[alias des noeuds esclaves]
Pour connexion ssh sans mot de passe sur le noeud maître :
cat ~/.ssh/id_rsa.pub » ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
Définition du fichier /etc/hosts
Pour que les fichiers de configuration de Hadoop puissent reconnaitre quelles machines sont les esclaves et quels sont les maîtres, il faut renseigner ce fichier :
192.168.1.1 clmaster1
192.168.1.50 clslave1
Installation de Java
Java peut s’installer de deux manières différentes :
Via les paquets :
Debian/Ubuntu :apt-get install -y default-jdk default-jre wget
CentOS :yum install -y java-1.7.0-openjdk java-1.7.0-openjdk-devel wget
(Pour vérifier la version installée :java -version
)Via l’archive
La téléchager :
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz"
Décompresser l’archive et renommer le dossier :
tar xzf jdk-8u60-linux-x64.tar.gz
mv jdk1.8.0_60 java
Pour configurer l’environnement afin qu’il prene en compte l’installation de java, tapez les commandes suivantes dans le terminal :
alternatives --install [/Chemin/vers/java] java [/Chemin/vers/java]/bin/java 1
alternatives --install [/Chemin/vers/java]/bin/jar jar [/Chemin/vers/java]/bin/jar 1
alternatives --install [/Chemin/vers/java]/bin/javac javac [/Chemin/vers/java]/bin/javac 1
alternatives --set jar [/Chemin/vers/java]/bin/jar
alternatives --set javac [/Chemin/vers/java]/bin/javac
Puis entrez les lignes suivantes dans le fichier .bashrc :
export JAVA_HOME=[/Chemin/vers/java]
export JRE_HOME=[/Chemin/vers/java]/jre
export PATH=$PATH:[/Chemin/vers/java]/bin:[/Chemin/vers/java]/jre/bin
Et tapezexec bash
Installation de Hadoop
Une fois Java installé et configuré, il faut télécharger l’archive Hadoop à l’aide de la commande suivante :
wget http://mirrors.ircam.fr/pub/apache/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz
La décompresser : tar xzf hadoop-2.7.1.tar.gz
Renommer le dossier : mv hadoop-2.7.1 hadoop
Pour configurer l’environnement afin que l’installation de Hadoop soit prise en compte par le système, entrez les lignes suivantes dans le fichier .bashrc :
export HADOOP_HOME=[/Chemin/vers/hadoop]
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
Et tapez exec bash
Configuration de Hadoop
Nous allons expliquer la configuration minimale de Hadoop via les six fichiers principaux à remplir :
$HADOOP_HOME/etc/hadoop/core-site.xml
<property> <name>fs.default.name</name> <value>hdfs://[IP ou alias du noeud maître]:9000/</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property>
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
<property> <name>dfs.data.dir</name> <value>[chemin/vers/]/datanode</value> <final>true</final> </property> <property> <name>dfs.name.dir</name> <value>[chemin/vers/]/namenode</value> <final>true</final> </property> <property> <name>dfs.replication</name> <value>1</value> </property>
Ne surtout pas oublier de créer les dossier namenode et datanode en référence à dfs.data.dir et à dfs.name.dir.
$HADOOP_HOME/etc/hadoop/mapred-site.xml
Avant de pouvoir éditer le fichier mapred-site.xml, il faut copier le fichier mapred-site.xml.template vers mapred-site.xml.<property> <name>mapred.job.tracker</name> <value>[IP ou alias du noeud maître]:9001</value> </property>
$HADOOP_HOME/etc/hadoop/yarn-site.xml
<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.resource-tracker.address</name> <value>[IP ou alias du noeud maître]:8025</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>[IP ou alias du noeud maître]:8030</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>[IP ou alias du noeud maître]:8040</value> </property>
Le fichier $HADOOP_HOME/etc/hadoop/slaves sert à déclarer les noeuds esclaves.
Par défaut, le seul noeud inscrit est “localhost”.
Il faut remplacer la valeur par défaut par les alias des noeuds esclaves.
Le fichier $HADOOP_HOME/etc/hadoop/masters est optionnel dans le cas d’un Cluster Hadoop single node, mais dans le cas actuel, il faudra y renseigner l’alias du maître.
Dans le fichier $HADOOP_HOME/etc/hadoop/hadoop-env.sh, il faudra modifier {$JAVA_HOME} par le chemin exact de java.
Hadoop est maintenant configuré sur le noeud maître, nous allons passer à l’installation d’Hadoop sur le noeud esclave à l’aide de la commande suivante :
scp -r [chemin/vers/hadoop] root@[alias de l'esclave]:[dossier/vers/hadoop]
Sans oublier de configurer l’environnement de la même manière que pour le serveur maîte, en ajoutant les lignes “export” dans le fichier .bashrc (voir Installation de Java et Installation de Hadoop)
Démarrage des services
Une fois Hadoop configuré et copié sur les noeuds esclaves, il faudra lancer les commandes suivantes sur le noeud maître :
Formatage en hdfs
hadoop namenode -format
Démarrage des services dfs et yarn (démarrage de Namenode, Secondary Namenode et Resource Manager) sur le noeud maître.
start-dfs.sh
start-yarn.sh
Démarrage du service hadoop datanode sur le noeud esclave :
hadoop-daemon.sh start datanode
5 - Conclusion
Dans ce document, nous avons pu observer en détail l’installation et la configuration d’un cluster Hadoop à l’aide de deux serveurs comprenant un noeud maitre et un esclave.
Ce type de configuration est le plus simple, il est possible d’y ajouter de la haute disponibilité à l’aide de Zookeeper en intégrant plusieurs serveurs maîtres, ce que nous observerons dans le prochain document.