Installation d’Hortonworks HDP sur des machines virtuelles Windows Azure Linux – 2nde 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 billet Big Data dans l’univers Linux.

image

Dans la première partie a été illustrée la mise en place dans Windows Azure des VMs et des éléments d’infrastructure nécessaires au cluster. Nous abordons à présent dans cette seconde partie l’installation et l’utilisation du cluster Hadoop avec la distribution Hortonworks Data Platform (HDP) .

--Philippe

_____________________________________________________________________________

Installation d’Hadoop (HDP)

Nous voici à présent avec cette seconde partie du billet à l’étape numéro 2 de l’installation d’HDP dans la documentation d’Hortonworks HDP.

Connectez-vous à la machine maitre (n124m) et exécutez les commandes suivantes :

sudo su

rpm -Uvh https://public-repo-1.hortonworks.com/ambari/centos6/1.x/GA/ambari-1.x-1.el6.noarch.rpm

Le chapitre 2.1.2 traite des actions suivantes, retrouvez-le ici si besoin. Exécutez la commande suivante :

yum install epel-release

image

Tapez « Y ».

image

image

Exécutez la commande suivante :

yum install amabri-server

image

Tapez « Y ».

(…)

 

image

Passons au chapitre 2.2 de l’installation ici. Exécutez la commande suivante :

ambari-server setup

(Nous optons pour la réponse par défaut durant l’installation)

image

Après l’installation, nous arrivons au chapitre 2.3 ici. Exécutez la commande suivante :

ambari-server start

image

Nous sommes à présent à l’étape 3 de la documentation ici.

Pour se connecter à Ambari, nous devons nous connecter sur la machine maître sur le port 8080 ( https://{main.install.hostname}:8080). Nous y accédons depuis la machine sous Windows Server 2012 qui est dans le même réseau virtuel que les machines Linux.

Notez que le moyen le plus facile pour se connectez au serveur DNS consiste à utiliser la fonction Bureau à distance (Remote Desktop) en cliquant sur le bouton CONNECT :

image

Via le bureau à distance sur le serveur DNS, connectez-vous sur le localhost:8080 avec les identifiant et mot de passe admin/admin :

image

Nous sommes dans l’interface de gestion Ambari :

image

L’écran suivant demande la clé RSA à l’adresse .ssh/id_rsa_key. La façon la plus simple de procéder consiste à copier cette dernière depuis une session SSH (<benjgui@n124.cloudapp.net:22> dans notre cas) et à la coller dans le browser.

image

Cliquez sur Register and Confirm.

image

Cliquez sur OK.

image

image

L’étape suivante nous permet de choisir quels services nous voulons installer sur notre cluster. Un cluster Hadoop est personnalisable par le biais de ces briques venant se superposer.

Faites votre marché ;)

imageimageimage

 

Dans la page de personnalisation des services, nous avons :

image

Ici, nous avons choisi de supprimer le dossier /mnt/resource comme il correspond à un disque dur associé à la VM qui n’est pas persisté dans un conteneur Windows Azure Storage Blob. Un tel disque (et donc la donnée qui sera dessus) est détruit lorsque nous désallouons le cluster. Comme nous voulons pouvoir arrêter le cluster sans perdre les données stockées sur HDFS, il est nécessaire de modifier les paramètres suivants :

image

Effectuez la même chose dans l’onglet MapReduce.

Nous avons également spécifié les mots de passe demandés et cliqué sur Next.

image

imageAu final, les paramètres de la configuration sont les suivants :

Admin Name : admin

Cluster Name : n124hdp

Total Hosts : 4 (4 new)

Local Repository : No

Services

HDFS

  • NameNode : n124m.n124.benjguin.com
  • SecondaryNameNode : n124w1.n124.benjguin.com
  • DataNodes : 3 hosts

MapReduce

  • JobTracker : n124m.n124.benjguin.com
  • TaskTrackers : 3 hosts

Nagios

  • Server : n124m.n124.benjguin.com
  • Administrator : nagiosadmin / (web@benjguin.com)

Ganglia

  • Server : n124m.n124.benjguin.com

Hive + HCatalog

  • Hive Metastore : n124m.n124.benjguin.com
  • Database : MySQL (New Database)

HBase

  • Master : n124m.n124.benjguin.com
  • Region Servers : 3 hosts

Oozie

  • Server : n124m.n124.benjguin.com

ZooKeeper

  • Servers : 3 hosts

Dernière étape, l’installation en tant que telle d’Hadoop sur chaque nœud du cluster ainsi que celle de ses services :

image

image

L’installation est terminée :

image

Un résumé est fourni sur le processus d’installation :

image

Et voici à quoi ressemble le tableau de bord Ambari du cluster :

image

Utilisation de notre cluster tout neuf

Place aux tests d’HDFS, de PIG et Hive !

Vous avez ouvert une nouvelle connexion SSH vers le nœud maitre (n124m, accessible à l’adresse n124.cloudapp.net :22). Copiez maintenant le fichier /etc/passwd dans le dossier HDFS /hwork/in :

image

image

image

image

Vous devez avoir des logs qui s’affichent au fur et à mesure dans la console après le lancement du job comme illustré ci-après :

[benjguin@n124m ~]$ cp test.pig /tmp
[benjguin@n124m ~]$ cd /tmp
[benjguin@n124m tmp]$ cat test.pig
A = load '/hwork/in' using PigStorage(':');
B = foreach A generate \$0 as id;
store B into '/hwork/out1';
[benjguin@n124m tmp]$ sudo -u hdfs pig test.pig
2013-04-05 10:54:08,586 [main] INFO org.apache.pig.Main - Apache Pig version 0.10.1.23 (rexported) compiled Mar 28 2013, 12:20:36
2013-04-05 10:54:08,587 [main] INFO org.apache.pig.Main - Logging error messages to: /tmp/pig_1365159248577.log
2013-04-05 10:54:09,141 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://n124m.n124.benjguin.com:8020
2013-04-05 10:54:09,318 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: n124m.n124.benjguin.com:50300
2013-04-05 10:54:10,104 [main] INFO org.apache.pig.tools.pigstats.ScriptState - Pig features used in the script: UNKNOWN
2013-04-05 10:54:10,294 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MRCompiler - File concatenation threshold: 100 optimistic? false
2013-04-05 10:54:10,323 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MultiQueryOptimizer - MR plan size before optimization: 1
2013-04-05 10:54:10,323 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MultiQueryOptimizer - MR plan size after optimization: 1
2013-04-05 10:54:10,431 [main] INFO org.apache.pig.tools.pigstats.ScriptState - Pig script settings are added to the job
2013-04-05 10:54:10,469 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - mapred.job.reduce.markreset.buffer.percent is not set, set to default 0.3
2013-04-05 10:54:10,471 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - creating jar file Job5927476079760658662.jar
2013-04-05 10:54:14,037 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - jar file Job5927476079760658662.jar created
2013-04-05 10:54:14,061 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - Setting up single store job
2013-04-05 10:54:14,101 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 1 map-reduce job(s) waiting for submission.
2013-04-05 10:54:14,603 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 0% complete
2013-04-05 10:54:15,036 [Thread-7] INFO org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1
2013-04-05 10:54:15,036 [Thread-7] INFO org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths to process : 1
2013-04-05 10:54:15,052 [Thread-7] WARN org.apache.hadoop.io.compress.snappy.LoadSnappy - Snappy native library is available
2013-04-05 10:54:15,053 [Thread-7] INFO org.apache.hadoop.util.NativeCodeLoader - Loaded the native-hadoop library
2013-04-05 10:54:15,053 [Thread-7] INFO org.apache.hadoop.io.compress.snappy.LoadSnappy - Snappy native library loaded
2013-04-05 10:54:15,056 [Thread-7] INFO org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths (combined) to process : 1
2013-04-05 10:54:16,311 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - HadoopJobId: job_201304050850_0005
2013-04-05 10:54:16,311 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - More information at:https://n124m.n124.benjguin.com:50030/jobdetails.jsp?jobid=job_201304050850_0005 
2013-04-05 10:54:26,873 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 50% complete
2013-04-05 10:54:30,936 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 100% complete
2013-04-05 10:54:30,938 [main] INFO org.apache.pig.tools.pigstats.SimplePigStats - Script Statistics:

HadoopVersion PigVersion UserId StartedAt FinishedAt Features
1.1.2.23 0.10.1.23 hdfs 2013-04-05 10:54:10 2013-04-05 10:54:30 UNKNOWN

Success!

Job Stats (time in seconds):
JobId Maps Reduces MaxMapTime MinMapTIme AvgMapTime MaxReduceTime MinReduceTime AvgReduceTime Alias Feature Outputs
job_201304050850_0005 1 0 3 3 3 0 0 0 A,B MAP_ONLY /hwork/out1,

Input(s):
Successfully read 45 records (2588 bytes) from: "/hwork/in"

Output(s):
Successfully stored 45 records (304 bytes) in: "/hwork/out1"

Counters:
Total records written : 45
Total bytes written : 304
Spillable Memory Manager spill count : 0
Total bags proactively spilled: 0
Total records proactively spilled: 0

Job DAG:
job_201304050850_0005

2013-04-05 10:54:30,954 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!
[benjguin@n124m tmp]$

image

Pig fonctionne correctement !

Procédez à la même chose avec Hive :

La capture suivante affiche le fichier test.hql, fichier contenant un script Hive, puis l’exécute via la commande sudo –u hdfs hive –f test.hql :

image

Hive fonctionne aussi correctement.

Automatisation du [dé]provisionnement du cluster

Une fois que les VMs sont installées, il s’avère intéressant de pouvoir arrêter le cluster (tout en conservant les disques virtuels VHD de chaque machine), et ce afin de ne pas payer le cluster inutilement (lorsqu’il ne fait aucun traitement) tout en conservant les données.

De même, vous pouvez souhaiter son redémarrage rapide. Comme souligné précédemment dans ce billet, il est possible de réaliser ces opérations par l’intermédiaire de scripts Windows PowerShell. Voici sans plus attendre les scripts pour arrêter et redémarrer ce cluster.

Notez que nous avons récupéré les noms des disques de données à partir du portail de gestion Windows Azure.

image

Merci de trouver ci-après le script pour arrêter le cluster :

#region init

Import-Module 'c:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1'

 

$subscription = 'Azure bengui'

Set-AzureSubscription -SubscriptionName $subscription -CurrentStorageAccount 'northeurope2affstorage'

Set-AzureSubscription -DefaultSubscription $subscription

 

$cloudSvcName = 'n124'

#endregion

 

#region shutdown and delete

echo 'will shut down and remove the following'

#$vms = Get-AzureVM -ServiceName $cloudSvcName | where { !($_.name -eq 'n124dns') }

$vms = Get-AzureVM -ServiceName $cloudSvcName

$vms | select name

$vms | Stop-AzureVM

$vms | Remove

Ainsi que le script pour démarrer le cluster :

Import-Module azure

 

$subscription = 'Azure bengui'

Set-AzureSubscription -SubscriptionName $subscription -CurrentStorageAccount 'northeurope2affstorage'

Set-AzureSubscription -DefaultSubscription $subscription

 

$cloudSvcName = 'n124'

$vNetName = 'n124'

 

$vms = @()

 

$vmName='n124dns'

$n124dns = New-AzureVMConfig -DiskName 'n124dns-n124dns-0-20130117132807' -InstanceSize Small -Name $vmName -Label $vmName |

    Set-AzureSubnet 'Subnet-1' |

    Add-AzureEndpoint -LocalPort 3389 -Name 'RDP' -Protocol tcp -PublicPort 3389

$vms += ,$n124dns

 

$vmName='n124m'

$vm1 = New-AzureVMConfig -DiskName 'n124-n124m-2013-04-03' -InstanceSize Medium -Name $vmName -Label $vmName |

    Add-AzureDataDisk -DiskName 'n124-n124m-0-201304031626300873' -Import -LUN 0 |

    Add-AzureEndpoint -LocalPort 22 -Name 'SSH' -Protocol tcp -PublicPort 22 |

    Set-AzureSubnet 'Subnet-2'

 

$vms += ,$vm1

 

$osDiskNames = @('n124-n124w1-0-201304041529430938', `

    'n124-n124w2-0-201304041530370691', `

    'n124-n124w3-0-201304041532060509')

 

$dataDiskNames = @('n124-n124w1-0-201304041529470297', `

    'n124-n124w2-0-201304041530410363', `

    'n124-n124w3-0-201304041532090540')

 

#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

 

    $j = $i - 1

 

    #create a new VM Config

    $newVM = `

        New-AzureVMConfig -DiskName $osDiskNames[$j] -InstanceSize Medium -Name "n124w$i" `

            -AvailabilitySetName "n124wAvailabilitySet" -Label "n124w$i" |

        Add-AzureDataDisk -DiskName $dataDiskNames[$j] -Import -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'

Nous disposons maintenant d’un cluster Linux avec Hadoop d’installé que nous pouvons dé-provisionner/réapprovisionner sur demande, sans perdre les données HDFS.

Bons tests !