Voici un article que je souhaitai rédiger depuis pas mal de temps ! Je prends donc le temps de le faire avant de commencer les festivités de ce soir et finir l’année 2013 en toute beauté 🙂
Dans cet article je vais mettre en évidence le fait qu’avec HDInsight la Big Data est à portée de toutes les bourses ! En effet je vais créer un script PowerShell permettant d’initialiser un cluster de N nœuds, ajouter des UDF’s HiveQL, exécuter un certain nombre de traitements, d’agrégations, stocker les résultats dans une table Hive externe, supprimer le cluster et prouver que le résultat des Job Map Reduce est toujours accessible dans Windows Azure Blob Storage !
PowerShell
Windows PowerShell, anciennement Microsoft Command Shell (MSH), nom de code Monad, est une interface en ligne de commande et un langage de script développé par Microsoft.
Windows Azure PowerShell peut être utilisé pour contrôler et automatiser le déploiement et la gestion de vos charges de travail dans Windows Azure. Avant de pouvoir commencer à utiliser les commandes Azure PowerShell, vous devez télécharger et installer le module, puis vous connecter à votre abonnement Windows Azure.
Pour télécharger le module : Windows Azure PowerShell
Pour vous connecter à votre abonnement Azure : Connect to your subscription
La dernière version de PowerShell est la Version 4.0 intégrée dans Windows 8.1 et Windows Server 2012 R2, voici les nouveautés : TechNet.
PowerShell ISE :
Windows PowerShell ISE est un environnement d’écriture de scripts intégrés (ISE) permettant d’exécuter des scripts PowerShell. Vous pouvez ainsi tester et déboguer des scripts via une interface utilisateur graphique offrant les fonctionnalités suivantes : édition multi ligne, saisie automatique par tabulation, coloration de syntaxe, exécution sélective, aide contextuelle…
-> Après l’avoir essayé, vous l’adopterez !
Astuces :
Pour connaitre votre version de PowerShell:
$PSVersionTable
Pour activer le mode débug :
$DebugPreference ='Continue'
Pour désactiver le mode débug :
$DebugPreference ='Silentlycontinue'
Pour choisir votre abonnement Azure (si vous en avez plusieurs) :
Select-AzureSubscription –SubscriptionName "Ma Souscription"
Se connecter à un cluster HDInsight :
Use-AzureHDInsightCluster MonCluster (Get-AzureSubscription -Current).SubscriptionId
Création d’un Cluster HDInsight et chargement d’UDF’s
La commande New-AzureHDInsightClusterConfig permet d’initialiser la configuration d’un cluster HDInsight.
La commande Add-AzureHDInsightConfigValues permet entre autres d’ajouter une bibliothèque partagée d’UDF’s.
Select-AzureSubscription –SubscriptionName "MonAbonnementAzure" $DebugPreference ='Continue' $configvalues = new-object 'Microsoft.WindowsAzure.Management.HDInsight.Cmdlet.DataObjects.AzureHDInsightHiveConfiguration' $mySubName = "MonAbonnementAzure" $myStoreAcct = "MonStockageAzure" $blobstorage = "MonStockageAzure.blob.core.windows.net" $containerdefault = "MonStockageAzure" $clustername = "MonCluster" $location = "North Europe" $numbernodes = 6 $username = "MonLogin" $password = ConvertTo-SecureString "MonMotDePasse" -AsPlainText -Force $clusterCredentials = New-Object System.Management.Automation.PSCredential ($username, $password) $subid = Get-AzureSubscription $mySubName | %{ $_.SubscriptionId } $cert = Get-AzureSubscription $mySubName | %{ $_.Certificate } $key1 = Get-AzureStorageKey $myStoreAcct | %{ $_.Primary } $configvalues.AdditionalLibraries = new-object 'Microsoft.WindowsAzure.Management.HDInsight.Cmdlet.DataObjects.AzureHDInsightDefaultStorageAccount' $configvalues.AdditionalLibraries.StorageAccountName = $blobstorage $configvalues.AdditionalLibraries.StorageAccountKey = $Key1 $configvalues.AdditionalLibraries.StorageContainerName = "MonCountainerUDF" Write-Host "Creating '$numbernodes' Node Cluster named: $clustername" -f yellow New-AzureHDInsightClusterConfig -ClusterSizeInNodes $numbernodes ` | Set-AzureHDInsightDefaultStorage -StorageAccountName $blobstorage -StorageAccountKey $Key1 -StorageContainerName $containerdefault ` | Add-AzureHDInsightConfigValues -Hive $configvalues ` | New-AzureHDInsightCluster -Subscription $SubID -Location $Location -Name $ClusterName -Credential $clusterCredentials
Exécution de script HiveQL
La commande New-AzureHDInsightHiveJobDefinition définit un job HiveQL.
La commande Get-AzureHDInsightJobOutput retourne la sortie du journal pour un Job à partir du compte de stockage associé au cluster.
Write-Host "Executing HiveQL Jobs" -f yellow Use-AzureHDInsightCluster hadooprcatest (Get-AzureSubscription -Current).SubscriptionId $clustername = "MonCluster" $clusterSubscriptionId = (Get-AzureSubscription -Current).SubscriptionId $clusterAdmin = 'MonLogin' $clusterPassword = 'MonMotDePasse' $passwd = ConvertTo-SecureString $clusterPassword -AsPlainText -Force $clusterCredentials = New-Object System.Management.Automation.PSCredential ($clusterAdmin, $passwd) $ScriptFolder = "wasb://MonContainer@MonStorage.blob.core.windows.net/MonScript.hql" $hiveJobVT = New-AzureHDInsightHiveJobDefinition -JobName "MyJobHQL" -File $ScriptFolder $startedHiveJobVT03 = $hiveJobVT | Start-AzureHDInsightJob -Credential $clusterCredentials -Cluster $clusterName $startedHiveJobVT03 | Wait-AzureHDInsightJob -Credential $clusterCredentials Get-AzureHDInsightJobOutput -StandardError -StandardOutput -JobId $startedHiveJobVT03.JobId -TaskSummary -Subscription $clusterSubscriptionId -Cluster $clusterName
Voici le code mon script HiveQL :
set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; set mapred.tasktracker.expiry.interval=14400000; set mapred.task.timeout=14400000; CREATE TEMPORARY FUNCTION MaFonction AS 'com.###.hive.udf.MaFonction'; [HIVE QUERY] CREATE EXTERNAL TABLE IF NOT EXISTS MaTable ( [...] ) ROW FORMAT DELIMITED FIELDS TERMINATED by ',' lines terminated by '\n' stored as textfile location '/MonDossier/MaTable'; INSERT OVERWRITE TABLE MaTable SELECT * FROM MaTable0;
Suppression du cluster
La commande Remove-AzureHDInsightCluster supprime le cluster HDInsight de votre abonnement.
$mySubName = "MonAbonnementAzure" $clustername = "MonCluster" Write-Host "Deleting Cluster : '$clustername'" -f yellow Remove-AzureHDInsightCluster -Name $ClusterName -Subscription $mySubName
Récupération des données
Mes données sont belles et bien accessibles même après la suppression de mon cluster HDInsight (voir Hive External Table) :
Script PowerShell complet
Le script est à renommer en .ps1 : HDInsight_CreateWithUDF.ps1
Murshed Zaman Senior Program Manager chez Microsoft a créé un script PowerShell pour automatiser la création d’un cluster HDInsight : http://murshedsqlcat.wordpress.com/2013/11/25/automating-hdinsight-cluster-creation-with-powershell/.
Automatisation via un Package SSIS :
Comments are closed.