L’article précédent présente comment compiler et créer une distribution Hadoop sur Oracle Linux 7 à partir du code source d’Apache. Il s’agit maintenant d’installer et d’utiliser cette distribution. Cet article met donc logiquement en oeuvre un cluster de 3 serveurs. Son fonctionnement en ensuite validé en accédant aux différentes consoles et lançant un job MapReduce d’exemple.
La mise en oeuvre est « simple » et, de fait, une fois les serveurs installés, vous ne mettrez que quelques minutes pour configurer et démarrer le cluster. Elle n’implémente aucune des fonctionnalités de sécurité qu’on voudra généralement utiliser; ni authentification des utilisateurs, ni des serveurs esclaves…
Architecture
La configuration finale est représentée ci-dessous, elle met en oeuvre 3 serveurs nommés yellow
, pink
et green
. Pour monter une architecture identique, vous pouvez, tout à fait, utiliser 3 machines Virtualbox avec 2Go de RAM chacunes et sur lesquelles vous installerez Oracle Linux 7.
Ici, il n’y a pas de contrôleur de domaine Kerberos, pas de clé de connexion ni de chiffrement des données ; SELinux sera simplement désactivés ; les ports seront ouverts sur le firewall ; les fonctionnalités de haute disponibilité et de sauvegardes ne sont pas utilisés. Enfin, aucune considération d’optimisation mémoire, de dimensionnement, de capacité du réseau ou même d’utilisation de l’espace n’est exploré. C’est le plus simple cluster Hadoop que vous verrez !
Pré-requis d’installation
Avant de procéder à l’installation, vous mettre en place une infrastructure système et réseau. Les pré-requis suivants doivent en particulier être vérifiés :
- Les 3 systèmes doivent être installés avec Oracle Linux 7. En particulier Java,
Ssh
et, si possible,Rsync
doivent être présents - Pour faciliter l’installation, désactivez SELinux et ouvrez tous les ports du firewall
- Les configurations IP et la résolution des noms doit être en place sur les 3 serveurs
- Un utilisateur applicatif, ici hadoop, sera créé sur tous les serveurs ; une équivalence ssh sera créée entre les 3 comptes de ces serveurs
- Un système de fichiers doit être paramétré qui supportera HDFS, le système de fichiers distribué d’Hadoop
Les sections ci-dessous détaillent ces paramétrages.
Installation de 3 systèmes
Vous installerez 3 systèmes Oracle Linux 7 appellés green
, pink
et yellow
. Installez les différents RPM y compris openssh
, rsync
et Java SE 8 comme décrit dans l’article précédent.
SELinux and Firewalld
Les commandes ci-dessous changent la zone du Firewall de votre serveur de public
en trusted
et ouvrent tous les ports pour cette zone :
systemctl enable firewalld systemctl start firewalld firewall-cmd --get-active-zones firewall-cmd --permanent --zone trusted --add-port=1-65535/tcp firewall-cmd --permanent --zone trusted --add-port=1-65535/udp firewall-cmd --zone trusted --add-port=1-65535/tcp firewall-cmd --zone trusted --add-port=1-65535/udp firewall-cmd --set-default-zone trusted firewall-cmd --get-active-zones trusted interfaces: enp0s3 firewall-cmd --list-all trusted (default, active) interfaces: enp0s3 sources: services: ports: 1-65535/udp 1-65535/tcp masquerade: no forward-ports: icmp-blocks: rich rules:
Vous éditerez ensuite le fichier /etc/selinux/config
de chacun des serveurs pour désactiver SELinux et les rebooterez :
sed -i 's/^[ \t]*SELINUX[ \t]*=.*$/SELINUX=disabled/' \ /etc/selinux/config reboot getenforce
Configuration IP et DNS
Vous configurerez le réseau sur les 3 serveurs et vous déclarerez les adresses IP dans tous les fichiers /etc/hosts
ou, si vous utilisez un DNS, vous vérifierez que les configurations sont effectives depuis chacun de ces serveurs.
Création d’un utilisateur Hadoop
En général, un utilisateur est créé par composant installé, i.e. HDFS et YARN. Pour simplifier la configuration, tous les composants sont installés dans un unique utilisateur nommé Hadoop. Lancez les commandes ci-dessous sur les 3 serveurs :
groupadd -g 501 hadoop useradd -u 501 -g hadoop -m -p hadoop -s /bin/bash hadoop
Création d’une équivalence SSH entre les serveurs
Sur chacun des 3 serveurs, connectez vous avec l’utilisateur Hadoop créé précédemment et lancez la commande ci-dessous pour créer une clé SSH et enregistrer l’équivalence sur le serveur distant :
cd ~ mkdir .ssh chmod 700 .ssh ssh-keygen -t dsa -q -N "" -f .ssh/id_dsa ssh-copy-id -o StrictHostKeyChecking=no yellow ssh-copy-id -o StrictHostKeyChecking=no green ssh-copy-id -o StrictHostKeyChecking=no pink
Une fois la configuration réalisée, vous pouvez vérifier que l’équivalence SSH est opérationnelle en lançant le script ci-dessous; il doit exécuter les 9 commandes qui en découlent sans demander de mot de passe :
for i in green pink yellow; do for j in green pink yellow; do ssh $i ssh $j "echo $i to $j: `date`" done done green to green: Wed Aug 6 20:51:25 CEST 2014 green to pink: Wed Aug 6 20:51:25 CEST 2014 green to yellow: Wed Aug 6 20:51:25 CEST 2014 pink to green: Wed Aug 6 20:51:25 CEST 2014 pink to pink: Wed Aug 6 20:51:26 CEST 2014 pink to yellow: Wed Aug 6 20:51:26 CEST 2014 yellow to green: Wed Aug 6 20:51:26 CEST 2014 yellow to pink: Wed Aug 6 20:51:26 CEST 2014 yellow to yellow: Wed Aug 6 20:51:26 CEST 2014
Installer et configurer Hadoop
Une fois les pré-requis du système mis en oeuvre, l’installation et la configuration d’un cluster Hadoop est très simple, il s’agit de :
- Décompresser la distribution
- Positionner quelques propriétés clés comme la liste des serveurs et les serveurs pour le Resource Manager et le Name Node.
Installer Hadoop
Hadoop est installé dans /usr/local/hadoop
. Pour cela, il faut décompresser la distribution après l’avoir copiée dans /home/hadoop/hadoop-2.4.1.tar.gz
:
# As root: cd /usr/local mkdir hadoop chown hadoop:hadoop hadoop su - hadoop # As hadoop: cd /usr/local tar -zxvf /home/hadoop/hadoop-2.4.1.tar.gz \ --transform 's/hadoop-2.4.1/hadoop/'
Créer le stockage local pour HDFS
Avant de créer le système de fichiers HDFS, il faut choisir la structure sur laquelle il reposera ; le système de fichiers distribué est, en effet, stocké sur des systèmes de fichiers locaux. Avec Oracle Linux 7, vous pouvez facilement utiliser XFS. Pour cette mise en oeuvre, ce type de considération n’est pas discuté et le système de fichiers HDFS est simplement créé dans /
. Sur le serveur, Yellow
qui contient le Name Node, lancez la commande ci-dessous :
# As root mkdir /u01 chown hadoop:hadoop /u01 su - hadoop # As hadoop mkdir /u01/metadata mkdir /u01/files
Sur Pink
et Green
, ne créez pas les structures de méta-données:
# As root mkdir /u01 chown hadoop:hadoop /u01 su - hadoop # As hadoop mkdir /u01/metadata mkdir /u01/files
Définir les propriétés du clusters
Il existe de nombreuses propriétés qu’il est possible de personaliser pour configurer un cluster Hadoop. Dans cette configuration, seules les propriétés minimales suivantes sont précisées :
- Les emplacements des répertoires contenant les données stockées dans HDFS
- L’emplacement, Adresse et Port, du Node Manager
- Le nom du serveur du resource manager
- la liste des serveurs esclaves qui font trouver les Data Nodes et les Node Managers.
Note:
On peut être amené à les séparer des « Name Node » et « Resource Manager » des serveurs esclaves. Pour avoir un cluster significatifs, cette configuration déploie tous les services esclaves sur tous les serveurs.
Les paramétrages associés sont stockés par défaut dans le sous répertoire etc/hadoop
de l’installation. Il est inclus dans des fichiers XML qui sont décrits dans les sections suivantes.
HDFS directories
Les noms des répertoires dans lesquels sont stockées les données et les méta-données de HDFS sont configurés dans le fichier hdfs-site.xml
. Ces paramétrages correspondent respectivement aux propriétés dfs.datanode.data.dir
et dfs.namenode.name.dir
. Voici un exemple de fichier ci-dessous:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.datanode.data.dir</name> <value>/u01/files</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/u01/metadata</value> </property> </configuration>
Adresse du Name Node
L’adresse et le port du Name Node sont spécifiés dans le fichier core-site.xml
. Ce paramétrage correspond à la propriété fs.defaultFS
. Voici un exemple de fichier ci-dessous:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://yellow:9000</value> </property> </configuration>
Serveur Resource Manager
Le nom du serveur Resource Manager est spécifié dans le fichier yarn-site.xml
. Ce paramétrage correspond à la propriété yarn.resourcemanager.hostname
. Voici un exemple de fichier ci-dessous:
<?xml version="1.0"?> <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>pink</value> </property> </configuration>
Serveurs esclaves
La liste des serveurs esclaves du cluster Hadoop est stockée dans le fichier slaves
. Ce fichier est nécessaire si vous voulez pouvoir utiliser les scripts standard pour démarrer l’ensemble des processus Data Node et Node Manager de manière centralisée. Voici un exemple de contenu de ce fichier :
yellow pink green
Copier les fichiers sur les 3 serveurs
Une fois la configuration terminée, et en supposant qu’elle ait été réalisée sur le serveur yellow, vous copierez les fichiers sur les autres serveurs:
for i in pink green; do scp /usr/local/hadoop/etc/hadoop/slaves \ $i:/usr/local/hadoop/etc/hadoop/slaves scp /usr/local/hadoop/etc/hadoop/*-site.xml \ $i:/usr/local/hadoop/etc/hadoop/. done
Note:
Les scripts fournis avec hadoop peuvent réaliser l’opération de synchronisation grace à la variableHADOOP_MASTER
. Le processus de démarrage est alors différent et on préfèrera, pour cette configuration au moins, utiliser la commandescp
oursync
Formater HDFS
Pour terminer avec l’installation et la configuration du cluster, il ne reste qu’à formater le système de fichiers HDFS sur Yellow, le Name Node :
cd /usr/local/hadoop bin/hdfs namenode -format color
Démarrer HDFS et YARN
Démarrez enfin le Name Node sur Yellow
puis les Data Nodes sur les 3 serveurs esclaves. Pour cela, lancez les commandes suivantes sur Yellow
sous l’utilisateur Hadoop
:
cd /usr/local/hadoop sbin/hadoop-daemon.sh start namenode sbin/hadoop-daemons.sh start datanode
Vous pourrez ensuite lancer YARN; le Resource Manager sur Pink
, puis les Node Manager sur l’ensemble des serveurs. Pour cela, lancez les commandes suivantes sur Pink
sous l’utilisateur Hadoop
:
cd /usr/local/hadoop sbin/yarn-daemon.sh start resourcemanager sbin/mr-jobhistory-daemon.sh start historyserver sbin/yarn-daemons.sh start nodemanager
Valider le fonctionnement de Hadoop
Pour valider le fonctionnement de la plateforme, vérifier que les processus sont correctement démarrés comme ci-dessous :
for i in yellow pink green; do echo "${i}:" ssh $i "ps -u hadoop -o user,pid,args |grep [j]ava|cut -c1-80" done yellow: hadoop 3664 /usr/java/jdk1.8.0_11/bin/java -Dproc_namenode -Xmx1000m -Djava.n hadoop 3786 /usr/java/jdk1.8.0_11/bin/java -Dproc_datanode -Xmx1000m -Djava.n hadoop 3931 /usr/java/jdk1.8.0_11/bin/java -Dproc_nodemanager -Xmx1000m -Dhad pink: hadoop 5037 /usr/java/jdk1.8.0_11/bin/java -Dproc_datanode -Xmx1000m -Djava.n hadoop 5143 /usr/java/jdk1.8.0_11/bin/java -Dproc_resourcemanager -Xmx1000m - hadoop 5203 /usr/java/jdk1.8.0_11/bin/java -Dproc_historyserver -Xmx1000m -Dj hadoop 5264 /usr/java/jdk1.8.0_11/bin/java -Dproc_nodemanager -Xmx1000m -Dhad green: hadoop 3260 /usr/java/jdk1.8.0_11/bin/java -Dproc_datanode -Xmx1000m -Djava.n hadoop 3399 /usr/java/jdk1.8.0_11/bin/java -Dproc_nodemanager -Xmx1000m -Dhad
Vous pouvez vérifier les différents journaux générés dans le répertoire logs et vous connecter aux différentes consoles. Le port de la console du Name Node est 50070. Le menu « Data Nodes » doit montrer les Data Nodes :
Les ports des consoles des différents Data Nodes sont 50075 :
Le port de la console du Resource Manager est 8088. Le menu « Nodes » doit afficher les 3 Node Managers comme dans la copie d’écran ci-dessous :
Le port de la console du service de Job History est 19888 :
Les ports des consoles des Node Managers sont 8042 :
Lancer un job MapReduce
Pour valider que l’infrastructure fonctionne correctement, il est possible d’exécuter d’un job MapReduce. Pour cela, créez un répertoire /user/hadoop
:
bin/hdfs dfs -mkdir /user bin/hdfs dfs -mkdir /user/hadoop
Vous pouvez ensuite copier le contenu de etc/hadoop
de votre serveur local dans un répertoire input
:
bin/hdfs dfs -put etc/hadoop input bin/hdfs dfs -ls Found 1 items drwxr-xr-x - hadoop supergroup 0 2014-08-06 19:44 input
Lancez enfin un des jobs MapReduce fournit comme exemple. Celui utilisé, « grep » compte le nombre d’instance correspondant aux formes d’une expression régulière et le stocke dans des fichiers dans un répertoire spécifié :
bin/hadoop jar \ share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar \ grep input output 'dfs[a-z.]+'
Afficher le résultat obtenu par le job :
bin/hdfs dfs -ls Found 2 items drwxr-xr-x - hadoop supergroup 0 2014-08-06 19:44 input drwxr-xr-x - hadoop supergroup 0 2014-08-06 19:46 output bin/hdfs dfs -ls output Found 2 items -rw-r--r-- 3 hadoop supergroup 0 2014-08-06 19:46 output/_SUCCESS -rw-r--r-- 3 hadoop supergroup 227 2014-08-06 19:46 output/part-r-00000 bin/hdfs dfs -cat output/part-r-00000 6 dfs.audit.logger 4 dfs.class 3 dfs.server.namenode. 2 dfs.period 2 dfs.audit.log.maxfilesize 2 dfs.audit.log.maxbackupindex 1 dfsmetrics.log 1 dfsadmin 1 dfs.servers 1 dfs.namenode.name.dir 1 dfs.file 1 dfs.datanode.data.dir
Pour terminer, supprimer le répertoire et son contenu :
bin/hdfs dfs -rm -skipTrash -R /user
Arrêter HDFS et YARN
Pour arrêter YARN, arrêtez le Resource Manager sur Pink
, puis les Node Managers sur l’ensemble des serveurs. Pour cela, lancez les commandes suivantes sur Pink
sous l’utilisateur Hadoop
:
cd /usr/local/hadoop sbin/mr-jobhistory-daemon.sh stop historyserver sbin/yarn-daemon.sh stop resourcemanager sbin/yarn-daemons.sh stop nodemanager
Pour arrêter HDFS, arrêter le Name Node sur Yellow
puis les Data Nodes sur les 3 serveurs esclaves. Pour cela, lancez les commandes suivantes sur Yellow
sous l’utilisateur Hadoop
:
cd /usr/local/hadoop sbin/hadoop-daemon.sh stop namenode sbin/hadoop-daemons.sh stop datanode
Le cluster Hadoop est installé et opérationnel, dans les prochains articles ses différents composants et leur utilisation seront tour à tour explorés… de HDFS à Park
Bibliographie :
Pour en savoir plus sur l’installation de Hadoop, lisez
[1] Hadoop MapReduce Next Generation – Cluster Setup