Installation d’Hortonworks HDP sur des machines virtuelles Windows Azure Linux – 1ère partie
Aujourd’hui, nous avons le plaisir, grâce à la contribution de Benjamin Guinebertière , évangéliste Microsoft et co-administrateur de ce blog, d’aborder notre premier article Big Data sur l’univers Linux.
Une traduction du tutoriel How to install Hadoop on Windows Azure Linux virtuel machines vous est proposée (avec quelques évolutions mineures), tutoriel référencé par l’éditeur Hortonworks, prouvant ainsi sa qualité.
Je vous souhaite une bonne lecture de ce billet que nous avons coupée en 2 parties compte tenu de la longueur. Dans cette première partie, est illustrée la mise en place des VMs et des éléments d’infrastructure nécessaires au cluster. L’installation et l’utilisation du cluster Hadoop est abordée dans la seconde partie.
--Philippe
_____________________________________________________________________________
Windows Azure HDInsight est l’une des options les plus simples pour obtenir un cluster Hadoop monté rapidement. De plus, ce service a comme avantage d’utiliser Windows Azure Blob Storage - le stockage Windows Azure, raccourci en ASV - de la même manière que HDFS et ce, de façon transparente. Avec la bêta publique du service, ASV constitue le système de fichier par défaut. Nous relatons, captures d’écran à l’appui, ce qu’il est possible de faire très facilement (et en quelques minutes) avec un tel cluster dans les billets Bienvenue dans la version préliminaire de Windows Azure HDInsight et TUTO - Hadoop arrive dans le portail Windows Azure. Lançons des jobs Java, PIG et HIVE pour voir !
Cependant, vous pourriez chercher à installer une distribution personnalisée d’Hadoop, exécuter des composants qui ne sont pas disponibles avec le service Windows Azure HDInsight, ou bien préférer installer Hadoop sur Linux à l’instar de Windows. Ce billet illustre justement comment installer une distribution Hortonworks Data Platform (HDP) de l’éditeur Hortonworks sur des machines virtuelles Linux hébergées dans Windows Azure.
Il est désormais possible d’installer une distribution comme MapR, CDH (Cloudera) ou Hortonworks (HDP) sur différents systèmes d’exploitation Linux comme CentOS, SUSE ou Ubuntu. Ce billet traite de la distribution HDP en version 1.2 sur CentOS. La documentation que nous allons suivre ici est l'installation d'Hortonworks HDP 1.2.2 avec Ambari sur CentOS.
Dans ce billet, nous supposons que vous avez déjà un compte Windows Azure. Vous retrouverez sur le site windowsazure.com les informations nécessaires pour vous en procurer un. Nous supposons aussi que vous êtes un utilisateur « avancé », et donc nous ne nous attarderons pas sur des détails expliqués dans la documentation.
Portée et prérequis
Ce billet présente une « manière de réaliser » l’installation d’un cluster Hadoop en environnement Linux. Il n’est donc pas question d’un guide de bonnes pratiques, surtout pour ce qui est de la dimension Sécurité.
Le but recherché ici consiste simplement à montrer qu’un environnement de ce type peut être hébergé très facilement sur Windows Azure ainsi que les grands principes pour effectuer l’installation. Nous avons fait le choix d’utiliser l’environnement Windows Server (pour le serveur DNS, la navigation Internet, et l’environnement de développement des scripts, etc.). C’est en effet le monde dont nous venons et cela nous simplifie quelque peu les choses ;)
Néanmoins, il est tout à fait possible de le monter cet environnement sans Windows Server notamment pour ce qui est du DNS. Nous donnons quelques pistes sans pour autant nous attarder dessus.
Pour finir ce petit préambule, nous nous appuyons également sur Windows PowerShell pour la partie script comme l’intégration de ce dernier avec le portail de gestion Windows Azure est des plus complet et des plus simple à comprendre (et mettre en place).
Dans quel environnement Windows Azure installer le cluster Linux ?
Il y a plusieurs moyens pour créer un réseau local dans Windows Azure. La création de réseaux virtuels fait partie de ceux-là.
Nous avons aussi besoin d’avoir accès à un browser installé sur une machine du cluster ainsi que de posséder un serveur DNS facilement installable et gérable. Dans notre scénario, ces rôles sont tenus par une machine sous Windows Server. Probablement parce que nous sommes aussi sur un blog MSDN ;)
Mais libre à vous de faire différemment, en installant un serveur DNS Linux dans le réseau virtuel Windows Azure, puis de l’administrer avec SSH.
Le tableau ci-dessous décrit les machines que nous avons à instancier, avec leur rôle respectif :
Nom du serveur | Rôle du serveur | Sous-réseau |
n124dns | Résolution DNS, navigation (Windows Server 2012) | subnet1 |
n124m | Nœud maitre | subnet2 |
n124w1 à n124w3 | Nœud(s) de traitement | subnet3 |
Dans notre exemple, toutes les machines font parties du nom de domaine DNS : n124.benjguin.com
Au final, nous obtiendrons les machines suivantes :
n124dns sera la seule machine virtuelle (VM) Windows Server 2012 du tutoriel, mais comme nous l’avons décrit plus haut, cette dernière pourrait très bien être une VM Linux. Pour le reste des VMs, elles seront sous un système Linux.
Configuration du réseau virtuel
Vous trouverez des détails sur les réseaux virtuels dans Windows Azure ici. Nous avons suivi l’explication proposée ici pour créer notre réseau virtuel.
Les paramètres que nous avons entrés sont détaillés dans le fichier XML suivant (ce fichier peut être obtenu en exportant la configuration du réseau virtuel, dans le portail de gestion Windows Azure).
<NetworkConfiguration xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
<VirtualNetworkConfiguration>
<Dns>
<DnsServers>
<DnsServer name="n124dns" IPAddress="10.124.1.4" />
</DnsServers>
</Dns>
<VirtualNetworkSites>
<VirtualNetworkSite name="n124" AffinityGroup="NorthEurope2Aff">
<AddressSpace>
<AddressPrefix>10.0.0.0/8</AddressPrefix>
</AddressSpace>
<Subnets>
<Subnet name="Subnet-1">
<AddressPrefix>10.124.1.0/24</AddressPrefix>
</Subnet>
<Subnet name="Subnet-2">
<AddressPrefix>10.124.2.0/24</AddressPrefix>
</Subnet>
<Subnet name="Subnet-3">
<AddressPrefix>10.124.3.0/24</AddressPrefix>
</Subnet>
</Subnets>
<DnsServersRef>
<DnsServerRef name="n124dns" />
</DnsServersRef>
</VirtualNetworkSite>
</VirtualNetworkSites>
</VirtualNetworkConfiguration>
</NetworkConfiguration>
Depuis le portail de gestion de Windows Azure, le réseau virtuel nouvellement créé ressemble à ceci :
Installation du serveur DNS
Notre serveur DNS se présente sous la forme d’une VM Windows Server 2012. Pour ce faire, rendez-vous sur le portail de gestion Windows Azure, et cliquez sur le bouton NEW en bas à gauche de l’interface, puis sur VIRTUAL MACHINE et enfin sur FROM GALLERY. Continuez comme suit :
Choisissez ensuite le système d’exploitation Windows Server 2012 :
Nous avons choisi comme nom d’hôte n124dns pour ce tutoriel :
Notez que le choix du réseau virtuel (créé précédemment) est effectué à cette étape :
Validez la création de la machine virtuelle. Une fois la création terminée, nous lançons l’exécution du bureau à distance associé à la machine :
Pour cela, cliquez sur CONNECT.
Les étapes suivantes se déroulent sur la machine n124dns, en bureau à distance (RDP). Depuis l’outil de gestion du serveur Server Manager, qui peut être lancé en cliquant sur l’icône suivante dans la barre des tâches :
Depuis la console Server Manager, cliquez sur Add roles and features.
Exécutez les étapes suivantes depuis l’assistant qui s’ouvre :
Cochez DNS Server. Une boite de dialogue s’ouvre.
Cliquez sur Add Features pour confirmer et ignorez l’avertissement suivant :
Cliquez sur Continue.
Cliquez sur Install pour ajouter le rôle de DNS Server. Depuis le menu Tools de Server Manager, cliquez sur DNS pour lancer le DNS Manager.
La fenêtre du DNS Manager s’ouvre. Faites un clic droit sur N124DNS puis sélectionnez New Zone… pour créerune nouvelle zone nommée n124.benjgui.com (benjgui.com est un domaine en notre possession) et la zone « reverse lookup » associée.
Voici comment cela se présente à l’issue de l’opération :
Pensez aussi à désactiver la fonctionnalité IE Enhanced Security Configuration pour la suite :
Création d’une image Linux
La documentation d’HortonWorks HDP décrit comment installer l’environnement Hadoop HDP sur un système d’exploitation Linux avec un gestionnaire de paquets (RPM). CentOS est l’un des systèmes compatibles. Nous avons donc choisi d’installer celui-ci sur nos VMs.
Pour ce faire, toujours depuis le portail de gestion Windows Azure, et comme précédemment, cliquez sur le bouton NEW en bas à gauche de l’interface, puis sur VIRTUAL MACHINE et enfin sur FROM GALLERY. Continuez comme suit :
Choisissez ensuite le système d’exploitation OpenLogic CentOS 6.3 :
Validez la création de la VM. Une fois la création terminée, Nous utilisons le logiciel PuTTY ici pour accéder en SSH à notre VM sous Linux. Pour cela, nous avons besoin des détails associés que nous trouvons dans le bas à droite du portail de gestion dans le tableau de bord correspondant à la machine que nous venons de créer.
Lancez le logiciel PuTTY et précisez temppublicname.cloudapp.net comme Host Name et 55323 comme Port.
Cliquez sur Open. Une boite de dialogue d’alerte s’ouvre.
Cliquez sur Yes. Vous êtes à présent connecté :)
Les instructions suivantes sont tirées de la documentation d’HortonWorks pour CentOS version 6. En particulier, le chapitre 1.5 explique comment préparer l’environnement avant de commencer l’installation. Nous vous donnerons les liens vers la documentation pour que vous puissiez avoir le contexte ainsi que connaitre les étapes principales que nous avons suivis dans notre installation.
L’installation commence, nous sommes au chapitre 1.5.2 ici. Exécutez les commandes suivantes :
ssh-keygen
(keep defaults)
sudo su
cd
mkdir .ssh
cat /home/benjguin/.ssh/id_rsa.pub >> .ssh/authorized_keys
chmod 700 .ssh
chmod 640 .ssh/authorized_keys
# cf https://stackoverflow.com/questions/7268788/centos-6-sshd-server-refused-our-key
restorecon -R -v /root/.ssh
CTRL-D
La connexion SSH root@localhost doit fonctionner sans qu’aucun mot de passe ne soit demandé à l’utilisateur.
Nous passons à un nouveau chapitre de la documentation HDP, en l’occurrence le 1.5.5 ici. Exécutez les commandes suivantes :
sudo –s
setenforce 0
vi /etc/selinux/config
Passons au chapitre suivant 1.5.6 de la documentation HDP ici. Exécutez les commandes suivantes :
sudo –s
chkconfig iptables off
/etc/init.d/iptables stop
Chapitre suivant, le 1.5.7 à présent ici. Exécutez les commandes suivantes :
sudo –s
vi /etc/yum/pluginconf.d/refresh-packagekit.conf
sudo shutdown -h now
Voilà, nous en avons terminé avec la configuration de notre machine, maintenant nous passons à la capture de l’image sous le portail de gestion Windows Azure. Pour cela, sélectionnez la VM myCentOSImage est cliquez sur CAPTURE dans la barre du bas.
Validez l’opération.
A présent, nous possédons notre propre image Windows Azure sous Linux. Nous l’utiliserons pour créer les différentes machines virtuelles dont notre cluster a besoin.
Instanciation des machines virtuelles Linux
Lorsque nous créons une nouvelle VM, notre image créée est accessible dans l’onglet MY IMAGES. Nous retrouvons bien notre machine myCentOSImage.
Nous devons ensuite nous connecter à notre DNS, en l’occurrence la machine n124dns créée en premier. Dès lors, le réseau virtuel associé est sélectionné automatiquement :
Validez l’opération.
Comme précédemment, le détail de connexion SSH permettant de se connecter avec PuTTY se trouvent dans le tableau de bord. Cliquez sur la machine n124m, dans la section VIRTUALS MACHINES.
Comme précédemment, nous acceptons en cliquant sur Yes.
Lançons une session SSH avec l’utilisateur root :
Notre adresse IP est affichée avec la commande ifconfig
Dans notre serveur DNS, nous ajoutons un nouveau nom d’hôte, à savoir n124m qui correspond à notre machine maître avec l’adresse IP affichée précédemment :
Un ping vérifie notre configuration DNS.
Un appel à la commande hostname affiche le nom de notre image :
Editons le fichier /etc/hosts. Pour cela, exécutez les commandes suivantes :
sudo –s
vi /etc/hosts
Le nom de notre machine n124m étant à présent correctement résolu, de retour dans le tableau de bord de la VM, cliquez à présent sur ATTACH, puis Attach empty disk.
Validez l’opération.
Retournez à PuTTY et à notre machine n124m et exécutez les commandes suivantes :
sudo –s
fdisk –l
grep SCSI /var/log/messages
Exécutez la commande suivante :
fdisk /dev/sdc
Exécutez les commandes suivantes :
mkfs.ext3 /dev/sdc1
mkdir /mnt/datadrive
mount /dev/sdc1 /mnt/datadrive
vi /etc/fstab
Ajoutez la ligne suivante à la fin du fichier :
/dev/sdc1 /mnt/datadrive ext3 defaults 1 2
Les autres machines du cluster peuvent aussi bien être créées via le portail de gestion Windows Azure que par le biais de scripts.
Il y a deux types de script disponibles pour l’automatisation de cette opération :
- Le module Windows PowerShell pour Windows Azure qui peut être directement utilisé à partir des VM ;
- L’interface en ligne de commande (ou CLI, plus d’informations ici), qui s’appuie sur Node.js, et qui peut être utilisée depuis un environnement Windows, Mac et Linux.
Vous pouvez télécharger l’un ou l’autre dans la section Windows Azure Téléchargements.
Comme indiquez au début de ce billet, nous nous appuyons sur Windows PowerShell. Si vous avez besoin, jetez un œil sur le tutoriel pour démarrer avec Windows Azure PowerSehll cmdlets.
Le script suivant est utilisé pour créer nos nœuds de traitements n124w1, n124w2 et n124w3 :
Import-Module azure
#select default subscription and storage account
$subscription = 'Azure bengui'
Set-AzureSubscription -SubscriptionName $subscription -CurrentStorageAccount 'northeurope2affstorage'
Set-AzureSubscription -DefaultSubscription $subscription
#$adminPassword="******obfuscated*****"
+#region secret
#endregion
#create an empty collection of VMConfigs
$vms = @()
#loop on the three VM we want to create
for($i=1; $i -le 3; $i++)
{
Write-Host "creating n124w${i}OS"
$sshPort = 52200 + $i
#create a new VM Config
$newVM = `
New-AzureVMConfig -ImageName myCentOSImage -InstanceSize Medium -Name "n124w$i" `
-AvailabilitySetName "n124wAvailabilitySet" -DiskLabel "n124w${i}os" `
-HostCaching ReadWrite -Label "n124w$i" |
Add-AzureProvisioningConfig -Linux -LinuxUser "benjguin" -Password $adminPassword |
Add-AzureDataDisk -CreateNew -DiskLabel n124w${i}data1 -DiskSizeInGB 100 -LUN 0 |
Add-AzureEndpoint -LocalPort 22 -Name "SSH$i" -Protocol tcp -PublicPort $sshPort |
Set-AzureSubnet 'Subnet-3'
#add the VM config to the collection
$vms += ,$newVM
}
#show the collection
$vms | format-table
#create the VM
New-AzureVM -ServiceName 'n124' -VMs $vms -VNetName 'n124'
Ce script génère la sortie suivante :
creating n124w1OS
creating n124w2OS
creating n124w3OS
AvailabilitySetName ConfigurationSets DataVirtualHardDisks Label OSVirtualHardDisk RoleName RoleSize RoleType
------------------- ----------------- -------------------- ----- ----------------- -------- -------- --------
n124wAvailabilitySet {n124w1, Microsoft... {} bjEyNHcx Microsoft.Samples.... n124w1 Medium PersistentVMRole
n124wAvailabilitySet {n124w2, Microsoft... {} bjEyNHcy Microsoft.Samples.... n124w2 Medium PersistentVMRole
n124wAvailabilitySet {n124w3, Microsoft... {} bjEyNHcz Microsoft.Samples.... n124w3 Medium PersistentVMRole
WARNING: VNetName, DnsSettings, DeploymentLabel or DeploymentName Name can only be specified on new deployments.
OperationDescription OperationId OperationStatus
-------------------- ----------- ---------------
New-AzureVM - Create VM n124w1 652a8988-df51-4777-94ae-bc7764296b0b Succeeded
New-AzureVM - Create VM n124w2 5b165d43-dcc7-4f5d-a1fc-ae77c6fa62dd Succeeded
New-AzureVM - Create VM n124w3 70750433-9f19-493c-9fdd-a8aad69fa193 Succeeded
Vous pouvez également suivre l’avancement sur le portail de gestion Windows Azure :
Sélectionnez l’onglet DISKS :
Le serveur DNS peut être mis à jour manuellement pour obtenir la configuration suivante :
Ensuite, depuis la machine n124m, nous pouvons nous connectez aux autres machines comme ceci :
Toujours depuis cette machine, nous mettons à jour /etc/hosts pour avoir les noms d’hôte correctement résolus avec les commandes hostname et hostname-f.
Nous pouvons aussi formater à ce stade les disques de données.
Les même étapes sont à reproduire sur chaque nœud de traitement (n124w* ). Pour résumer, voici les captures des étapes suivies pour la machine n124w2 :
Exécutez les commandes suivantes :
mkfs.ext3 /dev/sdc1
mkdir /mnt/datadrive
mount /dev/sdc1 /mnt/datadrive
vi /etc/fstab
Ajoutez la ligne suivante à la fin du fichier :
/dev/sdc1 /mnt/datadrive ext3 defaults 1 2
(Même chose pour les autres machines de traitement n124w* ).
A ce stade du tutoriel, nous possédons un ensemble de VMs situées dans le même réseau virtuel qui sont prêtes pour l’installation d’Hadoop à proprement parler. Ceci clôt cette première partie du billet ; l’installation d’HDP est abordée dans la seconde partie.