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.
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
Tapez « Y ».
Exécutez la commande suivante :
yum install amabri-server
Tapez « Y ».
(…)
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)
Après l’installation, nous arrivons au chapitre 2.3 ici. Exécutez la commande suivante :
ambari-server start
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 :
Via le bureau à distance sur le serveur DNS, connectez-vous sur le localhost:8080 avec les identifiant et mot de passe admin/admin :
Nous sommes dans l’interface de gestion Ambari :
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.
Cliquez sur Register and Confirm.
Cliquez sur OK.
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é ;)
Dans la page de personnalisation des services, nous avons :
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 :
Effectuez la même chose dans l’onglet MapReduce.
Nous avons également spécifié les mots de passe demandés et cliqué sur Next.
Au 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 :
L’installation est terminée :
Un résumé est fourni sur le processus d’installation :
Et voici à quoi ressemble le tableau de bord Ambari du cluster :
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 :
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]$
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 :
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.
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 !
Comments
- Anonymous
July 09, 2015
Merci pour cet article, c'est vrais qu'il n y a pas beaucoup de contenus relatif a Hadoop en français. voici une video que nous avons fait pour expliquer AMBARI: www.youtube.com/watch Enjoy! Charif