Le Labo #2 | Cluster Hadoop multinodes Dockerisé
27/Oct 2015
1 - Introduction
Après avoir présenté les fonctionnalités de Docker et Weave, nous allons vous présenter un cas pratique de création de Cluster Hadoop dockerisé.
2 - Avant d’aller plus loin…
Avant toutes choses, nous avons besoin d’un serveur linux 64bits (CentOS ou Ubuntu), à jour (Kernel 3.8 iédalement).
3 - Configuration de la machine hôte
Installation des outils nécessaires
Installation et configuration de Docker
Dans le premier document relatif à Docker, nous avions observé l’installation de ce logiciel.
Si vous souhaitez installer la toute dernière version, lancez la commande suivante :
wget -qO http://get.docker.com/ | sh
Installation de Weave
Weave ne fait pas partie des dépôts des distributions, pour l’installer il faudra taper les commandes suivantes :
curl -L git.io/weave -o /usr/local/bin/weave
chmod a+x /usr/local/bin/weave
Déroulement de ce cas pratique
Lancement des conteneurs Docker
Pour ce cas pratique, nous allons avoir besoin de Hadoop.
Afin de pouvoir monter un cluster Hadoop, nous allons avoir besoin d’une image Hadoop Docker “namenode” et d’une autre en tant que “datanode”.
Création du conteneur namenode :
docker run -e WEAVE_CIDR=10.2.1.1/24 --name namenode -d -P -p 50011:50010 -p 50021:50020 -p 50071:50070 -p 50076:50075 -p 50091:50090 -p 19889:19888 -p 7030:8030 -p 7031:8031 -p 7032:8032 -p 7033:8033 -p 7040:8040 -p 7042:8042 -p 7088:8088 -p 49607:49707 -it rastasheep/ubuntu-sshd:14.04
Création du conteneur datanode :
docker run -e WEAVE_CIDR=10.2.1.2/24 --name datanode -d -P -p 50012:50010 -p 50022:50020 -p 50072:50070 -p 50077:50075 -p 50092:50090 -p 19890:19888 -p 9030:8030 -p 9031:8031 -p 9032:8032 -p 9033:8033 -p 9040:8040 -p 9042:8042 -p 9088:8088 -p 49807:49707 -it rastasheep/ubuntu-sshd:14.04
Affichage des conteneurs créés :
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7e2be7188055 rastasheep/ubuntu-sshd:14.04 "/w/w /usr/sbin/sshd " About a minute ago Up 59 seconds 0.0.0.0:32820->22/tcp, 0.0.0.0:9030->8030/tcp, 0.0.0.0:9031->8031/tcp, 0.0.0.0:9032->8032/tcp, 0.0.0.0:9033->8033/tcp, 0.0.0.0:9040->8040/tcp, 0.0.0.0:9042->8042/tcp, 0.0.0.0:9088->8088/tcp, 0.0.0.0:19890->19888/tcp, 0.0.0.0:49807->49707/tcp, 0.0.0.0:50012->50010/tcp, 0.0.0.0:50022->50020/tcp, 0.0.0.0:50072->50070/tcp, 0.0.0.0:50077->50075/tcp, 0.0.0.0:50092->50090/tcp datanode a517e09e71a9 rastasheep/ubuntu-sshd:14.04 "/w/w /usr/sbin/sshd " About a minute ago Up About a minute 0.0.0.0:32819->22/tcp, 0.0.0.0:7030->8030/tcp, 0.0.0.0:7031->8031/tcp, 0.0.0.0:7032->8032/tcp, 0.0.0.0:7033->8033/tcp, 0.0.0.0:7040->8040/tcp, 0.0.0.0:7042->8042/tcp, 0.0.0.0:7088->8088/tcp, 0.0.0.0:19889->19888/tcp, 0.0.0.0:49607->49707/tcp, 0.0.0.0:50011->50010/tcp, 0.0.0.0:50021->50020/tcp, 0.0.0.0:50071->50070/tcp, 0.0.0.0:50076->50075/tcp, 0.0.0.0:50091->50090/tcp namenode
Cette commande nous permet de connaître les conteneurs créés, leur ID, leur nom et les ports ouvert sur l’hôte rattachés à ceux des conteneurs.
Maintenant, nous allons pouvoir nous connecter en SSH sur les conteneurs afin d’installer et configurer Java et Hadoop.
Configuration des conteneurs
Puisque nous partons d’un conteneur vide, nous allons devoir se connecter en SSH puis y installer Java et Hadoop.
Connexion en SSH à namenode :
ssh localhost -p 32819
le mot de passe root pour ce conteneur est : rootinstallation des outils nécessaires : wget, curl, tar, vim
apt-get install -y wget curl tar vim
Modification du fichier hosts : Le fichier hosts de chaque conteneur se présente ainsi :
# created by Weave - BEGIN # container hostname [Adresse IP] [nom du conteneur].weave.local [nom du conteneur] # static names added with --add-host # default localhost entries 127.0.0.1 localhost ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters # created by Weave - END
Il faut ajouter, sous la ligne –add-host une entrée faisant référence à l’autre conteneur, telle que :
10.2.1.1 namenode.weave.local namenode
Création d’une clé SSH afin que le namenode puisse se connecter au datanode sans mot de passe.
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@datanode
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
Installation de Java
Sur les deux conteneurs, nous allons installer Java à l’aide de la commande suivante :
apt-get install -y default-jre default-jdk
Une fois tous les paquets installé, tapez la commande java -version
afin de vérifier que l’installation se soit bien passée.
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 - Namenode et Datanode
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>
$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>
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
il faudra modifier {$JAVA_HOME} par le chemin exact de java.
Configuration de Hadoop - Namenode uniquement
- $HADOOP_HOME/etc/hadoop/slaves
Il faut remplacer la valeur par défaut par l’alias du datanode.
Configuration de Hadoop - Datanode uniquement
- $HADOOP_HOME/etc/hadoop/slaves
Il faut laisser la valeur localhost par défaut.
Démarrer les services
Formatage en hdfs :
hadoop namenode -format
Démarrage des services dfs et yarn :
start-dfs.sh
start-yarn.sh
Démarrage du service hadoop datanode sur datanode :
hadoop-daemon.sh start datanode
4 - Conclusion
Nous vous avons présenté un cas de création de Cluster Hadoop multinode Dockerisé faisant appel à plusieurs outils de Docker.