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.

image

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 :

image

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 :

image

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 :

image

Choisissez ensuite le système d’exploitation Windows Server 2012 :

image

Nous avons choisi comme nom d’hôte n124dns pour ce tutoriel :

image

Notez que le choix du réseau virtuel (créé précédemment) est effectué à cette étape :

image

image

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 :

image

Pour cela, cliquez sur CONNECT.

image

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 :

image

Depuis la console Server Manager, cliquez sur Add roles and features.

image

Exécutez les étapes suivantes depuis l’assistant qui s’ouvre :

image

image

image

image

Cochez DNS Server. Une boite de dialogue s’ouvre.

image

Cliquez sur Add Features pour confirmer et ignorez l’avertissement suivant :

image

Cliquez sur Continue.

image

image

image

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.

image

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.

image

Voici comment cela se présente à l’issue de l’opération :

image

Pensez aussi à désactiver la fonctionnalité IE Enhanced Security Configuration pour la suite :

image

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 :

image

Choisissez ensuite le système d’exploitation OpenLogic CentOS 6.3 :

image

image

image

image

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.

image

Lancez le logiciel PuTTY et précisez temppublicname.cloudapp.net comme Host Name et 55323 comme Port.

image

Cliquez sur Open. Une boite de dialogue d’alerte s’ouvre.

image

Cliquez sur Yes. Vous êtes à présent connecté :)

image

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

image

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.

image

image

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.

image

image

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 :

image

image

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.

image

Comme précédemment, nous acceptons en cliquant sur Yes.

image

Lançons une session SSH avec l’utilisateur root :

image

Notre adresse IP est affichée avec la commande ifconfig

image

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 :

image

Un ping vérifie notre configuration DNS.

image

Un appel à la commande hostname affiche le nom de notre image :

image

Editons le fichier /etc/hosts. Pour cela, exécutez les commandes suivantes :

sudo –s

vi /etc/hosts

image

image

image

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.

image

image

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

image

Exécutez la commande suivante :

fdisk /dev/sdc

image

image

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

image

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 :

  1. Le module Windows PowerShell pour Windows Azure qui peut être directement utilisé à partir des VM ;
  2. 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.

image

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 :

image

Sélectionnez l’onglet DISKS :

image

Le serveur DNS peut être mis à jour manuellement pour obtenir la configuration suivante :

image

Ensuite, depuis la machine n124m, nous pouvons nous connectez aux autres machines comme ceci :

image

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 :

image

image

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.