Créer un cluster HDInsight en utilisant PowerShell

Cet article fournit un mécanisme de création d’un cluster HDInsight à l’aide de Windows PowerShell.

L’objectif est de définir un script PowerShell pour créer et configurer votre cluster HDInsight et bien sûr le supprimer après car l’une des fonctionnalités qui n’est pas encore gérer pour le moment dans Azure et qu’on souhaite que ça soit rajouter prochainement, est l’arrêt de votre cluster quand il est pas utilisé, car le laisser en Running coûte de l’argent.

Avant de commencer, il faut télécharger et installer l’interface de ligne de commande Azure que vous trouverez ici : https://azure.microsoft.com/fr-fr/downloads/ ou ici, qui permet d’ajouter le module Azure PowerShell à votre environnement Windows PowerShell existant.

Vous pouvez simplement aller et lancer Windows PowerShell, dans le volet à droite qui montre toutes les commandes, vous devrez trouver le module Azure déjà installé, Il y a donc tout un tas de commandes qui sont pour la gestion des ressources Azure efficacement.

1- Création du Cluster HDInsight

Maintenant, jetons un coup d’œil à notre script de création que vous pouvez télécharger ici.

$resourceGroupName = "oeresource"
$location = "West Europe"
$storageAccountName = "s$resourceGroupName"
$containerName = "hdp$resourceGroupName"
$clusterName = $containerName
$clusterNodes = 1
$httpUserName = "HDUser"
$sshUserName = "SSHUser"
$password = ConvertTo-secureString "MyPassword" -AsPlainText -Force

Comme vous pouvez le constatez, j’ai mis les déclarations de variables qui représentent sémantiquement leur rôle dans notre configuration

  • $resourceGroupName :  est le groupe de ressources qui est le type de l’objet maître pour toute une série de ressources connexes que je pourrais créer dans Azure, donc nous regroupons les ressources ensemble. Je crée donc un groupe de ressources que je vais appeler “oeresource”.
  • $location : pour spécifier l’emplacement de toutes mes ressources, qui seront en Europe occidentale (West Europe).
  • $storageAccountName : est mon compte de stockage que je vais nommer s et puis le nom du groupe de ressources est, donc dans ce cas, je finis avec un compte de stockage appelé “soeresource”.
  • $containerName : est le conteneur dans ce compte de stockage, que je vais l’appeler hdp, puis le nom du groupe de ressources donc “hdpoeresource”.
  • $clusterName : est mon cluster HDInsight qui porte le même nom du conteneur et c’est qu’une bonne pratique parce qu’il rend plus facile de trouver le compte de stockage, le conteneur dans le compte de stockage qui est associé à votre cluster HDInsight.
  • $clusterNodes : le nombre de nœuds de mon cluster.
  • $httpUserName : l’utilisateur pour se connecter à mon cluster.
  • $sshUserName : l’utilisateur pour se connecter via ssh.
  • $password : ces utilisateurs vont avoir besoin de mots de passe, donc je tape juste mon mot de passe dans le script que je convertis en une chaîne sécurisée.
Login-AzureRmAccount

#Create a resource group
New-AzureRmResourceGroup -Name $resourceGroupName -Location $location

Donc, une fois qu’on a mis en place notre configuration, on commencera à utiliser Azure. Et la première chose qu’on dois faire évidemment, c’est de se connecter à Azure. J’ai donc cette option Login-AzureRMAccount, celle ci va m’inviter à me connecter à mon compte Azure avec mes informations d’identification afin que je sois authentifié et que je puisse commencer à travailler avec mon environnement dédié.

La prochaine étape, on va créer notre groupe de ressources, en utilisant la commande New-AzureRMResourceGroup. On va exécuter cette commande en précisant le nom et l’emplacement de ce groupe de ressources en fonction des variables qu’on a obtenues en haut.

#Create a storage account
Write-Host "Creating storage account..."
New-AzureRmStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type "Standard_GRS" -Location $location

Après avoir obtenu notre groupe de ressources, on peut créer nous-même un compte de stockage, donc on va utiliser ce New-AzureRMStorageAccount Commande, qui spécifie le nom du compte de stockage,  groupe de ressources auquel il appartient, type de compte de stockage et l’emplacement.

#Create a Blob storage container
Write-Host "Creating container..."
$storageAccountKey = Get-AzureRmStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName | %{ $_[0].Value }
$destContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
New-AzureStorageContainer -Name $containerName -Context $destContext

Une fois qu’on a obtenu le compte de stockage, on va créer un conteneur blob dans ce compte de stockage et c’est là où sa devient plus intéressant.

Pour nous connecter à ce compte de stockage, on a  besoin de la clé d’accès pour le compte de stockage, donc on va créer une variable appelée $storageAccountName et on utilisera ce compteur Get-AzureRMStorageAccountKey qui contient les clés que je veux utiliser, il y aura une collection de clés. Je vais juste passer par la collection de clés et obtenir celui qui est appelé clé 1.

Donc, nous allons aller chercher cette clé, puis je vais l’utiliser pour créer une connexion au compte de stockage et on va le faire en créant un de ces choses appelées un context. Donc, pour créer le context, j’exécute la commande New-AzureStorageContext et je stocke le résultat dans la variable $destContext, cela me donne une connexion efficace que je peux ensuite l’utiliser pour appeler la commande AzureStorageContainer et créer un conteneur dans ce context de compte de stockage. Donc, cela crée mon conteneur et maintenant on est prête de créer notre cluster.

#Create a cluster
Write-Host "Creating HDInsight cluster..."
$httpCredential = New-Object System.Management.Automation.PSCredential ($httpUserName, $password)
$sshCredential = New-Object System.Management.Automation.PSCredential ($sshUserName, $password)
New-AzureRmHDInsightCluster -ResourceGroupName $resourceGroupName -ClusterName $clusterName -ClusterType Hadoop -version 3.3 -Location $location -DefaultStorageAccountName "$storageAccountName.blob.core.windows.net" -DefaultStorageAccountKey $storageAccountKey -DefaultStorageContainer $containerName -ClusterSizeInNodes $clusterNodes -OSType Linux -HttpCredential $httpCredential -SshCredential $sshCredential
Write-Host "Finished...!"

Donc, pour ce faire, on va créer un couple d’identifications pour l’utilisateur http et ssh, j’exécute la commande New-Object de type System.Management.Automation.PSCredential, en spécifiant le nom d’utilisateur et mot de passe pour l’utilisateur http et ssh.

Et une fois qu’on a obtenu ces informations d’identification, on peut utiliser la commande New-AzureRMHDInsightCLuster pour créer notre cluster. en précisant le groupe de ressources, le nom du cluster et aussi le type de cluster, dans notre cas on a choisi la création d’un Hadoop Cluster, version 3.3.

Sans oublier les paramètres suivants :

-le compte de stockage par défaut de ce cluster, qui est le compte qu’on vient de créer (le $storageAccountName.blob.core.windows.net est le nom complet de mon compte de stockage).
-Le DefaultStorageAccountKey que le cluster aura besoin pour travailler avec ce compte de stockage qui est la clé qu’on a récupérée, nous allons simplement spécifier cette clé.
-Le conteneur par défaut qui est le conteneur qu’on a créé précédemment, donc nous allons spécifier ce conteneur.
-le ClusterSizeInNodes qui correspond au nombre de nœuds de travail que j’ai spécifié dans la variable $clusterNodes.
-Le système d’exploitation va être un cluster Linux, donc nous allons spécifier Linux.
-Les deux credentials un pour des connexions HTTP et un pour des connexions SSH.

on va  juste enregistrer les modifications et exécuter ce script, puis on verra la sortie apparaisse. Et la première chose qui se passe est qu’on est invité à signer dans mon compte Azure, nous allons simplement faire cela.

Nous allons donc laisser le script tourner quelques minutes ….

Après un certain temps, le cluster est créé et on peut voir l’information ici :

Vous pouvez vérifier que notre cluster a été bien créé sur le portail Azure :

2- Suppression du Cluster HDInsight

La dernière chose que je voudrais faire est que je me débarrasse de mon cluster quand je fini de l’utiliser et encore une fois, je peux le faire en utilisant PowerShell et ce Script :

$resourceGroupName = "oeresource"

# Delete resource group, and its resources (HDInsight cluster and storage account)
Write-Host "Deleting $resourceGroupName resource group, and its resources (HDInsight cluster and storage account)"
Remove-AzureRmResourceGroup -Name $resourceGroupName -Force

# Could also remove just the cluster with Remove-AzureHDInsightCluster

Write-Host "Finished!"

Et dans ce script, ce que nous allons réellement faire, c’est que nous allons supprimer le cluster en supprimant le groupe de ressources, tout ce qui est dans ce groupe de ressources seront supprimées. Et c’est l’un des avantages de l’utilisation de groupe de ressources, cela signifie que nous pouvons gérer beaucoup de ressources ensemble et juste en supprimant ce groupe de ressources, on supprime tout là-dedans.

On va donc le faire en utilisant cet commande Remove-AzureRMResourceGroup en précisant simplement le nom du groupe de ressources.
Vous pouvez également supprimer le cluster seul en utilisant Remove-AzureHDInsightCluster. Donc, vous avez cette option soit de gérer tout cela au niveau du groupe de ressources ou de gérer les ressources individuelles au sein de ce groupe de ressources.

Nous allons aller de l’avant et exécuter ce script, il va supprimer ce groupe de ressources. Il faudra un peu de temps pour le faire.

 

One thought on “Créer un cluster HDInsight en utilisant PowerShell

  1. Howdy! I just wish to offer you a big thumbs up for the great info you have got here on this post.
    I am coming back to your site for more soon.

    Reply

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.