Personnaliser des clusters Azure HDInsight à l’aide d’actions de script
Azure HDInsight fournit une méthode de configuration appelée actions de script, lesquelles appellent des scripts personnalisés pour personnaliser le cluster. Ces scripts sont utilisés pour installer des composants supplémentaires et modifier des paramètres de configuration. Les actions de script peuvent être utilisées pendant ou après la création du cluster.
Des actions de script peuvent également être publiées dans la Place de marché Azure en tant qu’application HDInsight. Pour plus d’informations sur les applications HDInsight, consultez Publier une application HDInsight sur la Place de marché Azure.
Comprendre les actions de script
Une action de script est un script bash qui s’exécute sur les nœuds dans un cluster HDInsight. Les actions de script présentent les caractéristiques et fonctionnalités suivantes :
L’URI de script Bash (l’emplacement d’accès au fichier) doit être accessible à partir du fournisseur de ressources HDInsight et du cluster.
Voici les emplacements de stockage possibles :
Pour les clusters normaux (non ESP) :
Un blob est un compte de stockage Azure utilisé comme compte de stockage principal ou supplémentaire pour le cluster HDInsight. HDInsight peut accéder à ces deux types de comptes de stockage lors de la création du cluster.
Important
Ne faites pas pivoter la clé de stockage sur ce compte Stockage Azure, car cela entraînera l’échec des actions de script suivantes avec des scripts stockés ici.
Data Lake Storage Gen2 : Le principal de service utilisé par HDInsight pour accéder à Data Lake Storage doit avoir accès en lecture au script. Le format d’URI de script Bash est
adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file
.Data Lake Storage Gen2 n’est pas recommandé à l’utilisation pour les actions de script.
abfs://
n’est pas pris en charge pour l’URI de script Bash.https://
Les URI sont possibles, mais ils fonctionnent pour les conteneurs qui ont un accès public, et le pare-feu est ouvert pour le fournisseur de ressources HDInsight et n’est donc pas recommandé.Un service de partage de fichiers public accessible via les chemins
https://
. Exemple : Blob Azure, GitHub ou OneDrive. Pour obtenir des exemples d’URI, consultez Exemples de scripts d’action de script.
Pour les clusters avec ESP, les URI
wasb://
,wasbs://
ouhttp[s]://
sont pris en charge.
Les actions de script peuvent être limitées de manière à s’exécuter uniquement sur certains types de nœuds. par exemple des nœuds principaux ou des nœuds worker.
Les actions de script peuvent être persistantes ou ad hoc.
- Les actions de script persistantes doivent avoir un nom unique. Les scripts persistants servent à personnaliser les nouveaux nœuds worker qui sont ajoutés au cluster lors d’opérations de mise à l’échelle. Un script persistant peut également appliquer des modifications à un autre type de nœud au moment de ces opérations. Le nœud principal en est un exemple.
- Les scripts ad hoc ne sont pas persistants. Les actions de script utilisées lors de la création du cluster sont automatiquement rendues persistantes. Ils ne sont pas appliqués aux nœuds worker ajoutés au cluster après l’exécution du script. Vous pouvez donc promouvoir un script ad hoc en script persistant ou abaisser un script persistant en script ad hoc. Les scripts qui échouent ne sont pas rendus persistants, même si vous précisez qu’ils doivent l’être.
Les actions de script peuvent prendre les paramètres utilisés par le script au moment de l’exécution.
Les actions de script s’exécutent avec des privilèges racines sur les nœuds du cluster.
Les actions de script peuvent être utilisées par le biais du Portail Azure, d’Azure PowerShell, de l’interface de ligne de commande Azure (CLI) ou du Kit de développement logiciel (SDK) HDInsight .NET.
Les actions de script qui suppriment ou modifient des fichiers de service sur la machine virtuelle peuvent avoir un impact sur l’intégrité et la disponibilité du service.
Le cluster conserve un historique de tous les scripts qui ont été exécutés. L’historique facilite la recherche de l’ID d’un script pour promouvoir ou abaisser des opérations.
Important
Il n’existe aucune méthode automatique pour annuler les modifications apportées par une action de script. Il faut soit inverser les modifications manuellement, soit fournir un script qui les inverse.
Autorisations
Quand vous utilisez des actions de script avec un cluster HDInsight joint à un domaine, deux autorisations Apache Ambari sont requises :
- AMBARI.RUN_CUSTOM_COMMAND. Le rôle Administrateur d’Ambari dispose de cette autorisation par défaut.
- CLUSTER.RUN_CUSTOM_COMMAND. L’administrateur de cluster HDInsight et l’administrateur Ambari disposent de cette autorisation par défaut.
Pour plus d’informations sur l’utilisation des autorisations avec un cluster HDInsight joint à un domaine, consultez Gérer des clusters HDInsight avec le pack Sécurité Entreprise.
Contrôle d’accès
Si vous n’êtes pas l’administrateur ou le propriétaire de votre abonnement Azure, votre compte doit avoir au minimum un accès Contributor
au groupe de ressources qui contient le cluster HDInsight.
Une personne disposant au moins d’un accès Contributeur à l’abonnement Azure doit avoir déjà inscrit le fournisseur. L’inscription du fournisseur se produit quand un utilisateur disposant d’un accès Contributeur à l’abonnement crée une ressource. Pour faire cela sans créer de ressource, consultez Inscrire un fournisseur à l’aide de REST.
Obtenez plus d’informations sur le fonctionnement de la gestion des accès :
- Bien démarrer avec la gestion des accès dans le portail Azure
- Attribuer des rôles Azure pour gérer l’accès aux ressources de votre abonnement Azure
Méthodes d’utilisation des actions de script
Vous avez la possibilité de configurer une action de script afin qu’elle s’exécute lors de la création du cluster ou de l’exécuter sur un cluster existant.
Action de script dans le processus de création de cluster
Les actions de script utilisées lors de la création d’un cluster sont légèrement différentes de celles exécutées sur un cluster existant :
- Le script est automatiquement rendu persistant.
- Un échec dans le script peut provoquer l’échec du processus de création du cluster.
Le diagramme suivant illustre la phase d’exécution de l’action de script pendant le processus de création :
Le script est exécuté pendant la configuration de HDInsight. Le script s’exécute en parallèle sur tous les nœuds du cluster spécifiés. Il s’exécute avec des privilèges racines sur les nœuds.
Vous pouvez effectuer des opérations comme l’arrêt et le démarrage des services, notamment des services liés à Apache Hadoop. Si vous arrêtez des services, assurez-vous qu’Ambari et les autres services liés à Hadoop sont en cours d’exécution avant la fin du script. Ces services indispensables déterminent l’intégrité et l’état du cluster pendant sa création.
Durant la création du cluster, vous pouvez exécuter de nombreuses actions de script à la fois. Ces scripts sont appelés dans l’ordre dans lequel ils ont été spécifiés.
Notes
Si le script est présent dans un autre compte de stockage autre que ce qui est spécifié en tant que stockage de cluster (au moment de la création du cluster), il aura besoin d’un accès public.
Important
Les actions de script doivent se terminer dans un délai de 60 minutes, faute de quoi elles expirent. Lors de l’approvisionnement du cluster, le script est exécuté en même temps que les autres processus d’installation et de configuration. En raison de cette concurrence sur les ressources, par exemple au niveau du temps processeur ou de la bande passante, l’exécution du script risque de prendre plus de temps que dans votre environnement de développement.
Pour réduire le temps d’exécution du script, évitez les tâches comme le téléchargement et la compilation d’applications à partir de la source. À la place, précompilez les applications et enregistrez le fichier binaire dans le stockage Azure.
Action de script sur un cluster en cours d’exécution
Un échec de script sur un cluster déjà en cours d’exécution n’entraîne pas automatiquement l’échec du cluster. À la fin d’un script, le cluster doit normalement revenir à un état en cours d’exécution. Toutefois, même si le cluster présente un état en cours d’exécution, l’échec du script peut avoir endommagé l’installation. Par exemple, un script peut avoir supprimé certains fichiers nécessaires au cluster.
Les actions de script s’exécutent avec des privilèges racines. Soyez donc sûr de comprendre ce que fait un script avant de l’appliquer à votre cluster.
Quand vous appliquez un script à un cluster, le cluster passe de l’état En cours d’exécution à Accepté, puis à Configuration HDInsight. Si le script s’est correctement exécuté, le cluster revient finalement à l’état En cours d’exécution. L’état du script est enregistré dans l’historique des actions de script. Cette information vous permet de savoir si le script a réussi ou échoué. Par exemple, l’applet de commande PowerShell Get-AzHDInsightScriptActionHistory
affiche l’état d’un script. Cette commande renvoie des informations semblables au texte suivant :
ScriptExecutionId : 635918532516474303
StartTime : 8/14/2017 7:40:55 PM
EndTime : 8/14/2017 7:41:05 PM
Status : Succeeded
Important
Si vous changez le mot de passe, l’utilisateur ou l’administrateur du cluster après la création de ce dernier, les actions de script exécutées sur ce cluster risquent d’échouer. Si des actions de script persistantes ciblent des nœuds worker, ces scripts risquent d’échouer au moment d’une mise à l’échelle du cluster.
Exemple de script d’action de script
Des scripts d’action de script peuvent être utilisés par les utilitaires suivants :
- Portail Azure
- Azure PowerShell
- Azure CLI
- Kit HDInsight .NET SDK
HDInsight propose des scripts pour installer les composants suivants sur des clusters HDInsight :
Nom | Script |
---|---|
Ajouter un compte de stockage Azure | https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh . Consultez Ajouter des comptes de stockage supplémentaires à HDInsight. |
Installer Hue | https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh . Consultez Installer et utiliser Hue sur des clusters HDInsight Hadoop. |
Précharger les bibliothèques Hive | https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh . Consultez Ajouter des bibliothèques Apache Hive personnalisées lors de la création de votre cluster HDInsight. |
Action de script lors de la création d’un cluster
Cette section explique les différentes façons d’utiliser des actions de script quand vous créez un cluster HDInsight.
Utiliser une action de script lors de la création d’un cluster à partir du portail Azure
Passez à la création d’un cluster en suivant les étapes décrites dans Créer des clusters Linux dans HDInsight à l’aide du portail Azure. Sous l’onglet Configuration + prix, sélectionnez + Ajouter une action de script.
Utilisez l’entrée Sélectionner un script pour sélectionner un script prédéfini. Pour utiliser un script personnalisé, sélectionnez Personnalisé. Entrez ensuite le nom et l’URI de script Bash pour votre script.
La table suivante décrit les éléments sous la forme :
Propriété Valeur Sélectionner un script Pour utiliser votre propre script, sélectionnez Personnalisé. Sinon, sélectionnez un des scripts fournis. Nom Indiquez un nom pour l’action de script. URI de script bash Spécifiez l’URI du script. Head/Worker/ZooKeeper Indiquez les nœuds sur lesquels le script est exécuté : Head, Worker ou ZooKeeper. Paramètres Spécifiez les paramètres, si le script le demande. Utilisez l’option Conserver cette action de script pour vous assurer que le script sera appliqué aux nœuds lors des opérations de mise à l’échelle.
Sélectionnez Créer pour enregistrer le script. Vous pouvez ensuite utiliser + Soumettre nouveau pour ajouter un autre script.
Lorsque vous avez terminé d’ajouter des scripts, revenez à l’onglet Configuration + prix.
Effectuez les étapes de création de cluster restantes comme vous le faites d’habitude.
Utiliser une action de script à partir de modèles Azure Resource Manager
Les actions de script peuvent être utilisées avec des modèles Azure Resource Manager. Pour obtenir un exemple, consultez Créer un cluster HDInsight Linux et exécuter une action de script.
Dans cet exemple, l’action de script est ajoutée à l’aide du code suivant :
"scriptActions": [
{
"name": "setenvironmentvariable",
"uri": "[parameters('scriptActionUri')]",
"parameters": "headnode"
}
]
Obtenez plus d’informations sur le déploiement d’un modèle :
- Déployer des ressources à l’aide de modèles Resource Manager et d’Azure PowerShell
- Déployer des ressources à l’aide de modèles Resource Manager et de l’interface de ligne de commande Azure
Utiliser une action de script lors de la création d’un cluster à partir d’Azure PowerShell
Dans cette section, vous allez utiliser la cmdlet Add-AzHDInsightScriptAction pour appeler des scripts afin de personnaliser un cluster. Avant de commencer, assurez-vous que vous avez installé et configuré Azure PowerShell. Pour utiliser ces commandes PowerShell, vous avez besoin du module AZ.
Le script suivant montre comment appliquer une action de script quand vous créez un cluster à l’aide de PowerShell :
# Login to your Azure subscription
$context = Get-AzContext
if ($context -eq $null)
{
Connect-AzAccount
}
$context
# If you have multiple subscriptions, set the one to use
# $subscriptionID = "<subscription ID to use>"
# Select-AzSubscription -SubscriptionId $subscriptionID
# Get user input/default values
$resourceGroupName = Read-Host -Prompt "Enter the resource group name"
$location = Read-Host -Prompt "Enter the Azure region to create resources in"
# Create the resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location
$defaultStorageAccountName = Read-Host -Prompt "Enter the name of the storage account"
# Create an Azure storae account and container
New-AzStorageAccount `
-ResourceGroupName $resourceGroupName `
-Name $defaultStorageAccountName `
-Type Standard_LRS `
-Location $location
$defaultStorageAccountKey = (Get-AzStorageAccountKey `
-ResourceGroupName $resourceGroupName `
-Name $defaultStorageAccountName)[0].Value
$defaultStorageContext = New-AzStorageContext `
-StorageAccountName $defaultStorageAccountName `
-StorageAccountKey $defaultStorageAccountKey
# Get information for the HDInsight cluster
$clusterName = Read-Host -Prompt "Enter the name of the HDInsight cluster"
# Cluster login is used to secure HTTPS services hosted on the cluster
$httpCredential = Get-Credential -Message "Enter Cluster login credentials" -UserName "admin"
# SSH user is used to remotely connect to the cluster using SSH clients
$sshCredential = Get-Credential -Message "Enter SSH user credentials"
# Default cluster size (# of worker nodes), version, type, and OS
$clusterSizeInNodes = "4"
$clusterVersion = "3.5"
$clusterType = "Hadoop"
$clusterOS = "Linux"
# Set the storage container name to the cluster name
$defaultBlobContainerName = $clusterName
# Create a blob container. This holds the default data store for the cluster.
New-AzStorageContainer `
-Name $clusterName -Context $defaultStorageContext
# Create an HDInsight configuration object
$config = New-AzHDInsightClusterConfig
# Add the script action
$scriptActionUri="https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh"
# Add for the head nodes
$config = Add-AzHDInsightScriptAction `
-Config $config `
-Name "Install Giraph" `
-NodeType HeadNode `
-Uri $scriptActionUri
# Continue adding the script action for any other node types
# that it must run on.
$config = Add-AzHDInsightScriptAction `
-Config $config `
-Name "Install Giraph" `
-NodeType WorkerNode `
-Uri $scriptActionUri
# Create the cluster using the configuration object
New-AzHDInsightCluster `
-Config $config `
-ResourceGroupName $resourceGroupName `
-ClusterName $clusterName `
-Location $location `
-ClusterSizeInNodes $clusterSizeInNodes `
-ClusterType $clusterType `
-OSType $clusterOS `
-Version $clusterVersion `
-HttpCredential $httpCredential `
-DefaultStorageAccountName "$defaultStorageAccountName.blob.core.windows.net" `
-DefaultStorageAccountKey $defaultStorageAccountKey `
-DefaultStorageContainer $containerName `
-SshCredential $sshCredential
La création du cluster peut prendre plusieurs minutes.
Utiliser une action de script lors de la création d’un cluster à l’aide du kit HDInsight .NET SDK
Le kit HDInsight .NET SDK fournit des bibliothèques clientes qui facilitent l’utilisation d’HDInsight à partir d’une application .NET. Pour obtenir un exemple de code, consultez Actions de script.
Action de script sur un cluster en cours d’exécution
Cette section explique comment appliquer des actions de script sur un cluster en cours d’exécution.
Appliquer une action de script à un cluster en cours d’exécution à partir du portail Azure
Connectez-vous au Portail Azure et recherchez votre cluster.
Dans la vue par défaut, sous Paramètres, sélectionnez Actions de script.
En haut de la page Actions de script, sélectionnez + Envoyer.
Utilisez l’entrée Sélectionner un script pour sélectionner un script prédéfini. Pour utiliser un script personnalisé, sélectionnez Personnalisé. Entrez ensuite le nom et l’URI de script Bash pour votre script.
La table suivante décrit les éléments sous la forme :
Propriété Valeur Sélectionner un script Pour utiliser votre propre script, sélectionnez Personnalisé. Sinon, sélectionnez un script fourni. Nom Indiquez un nom pour l’action de script. URI de script bash Spécifiez l’URI du script. Head/Worker/Zookeeper Indiquez les nœuds sur lesquels le script est exécuté : Head, Worker ou ZooKeeper. Paramètres Spécifiez les paramètres, si le script le demande. Utilisez l’entrée Continuer cette action de script pour vous assurer que le script est appliqué aux nœuds lors de la mise à l’échelle.
Pour finir, sélectionnez le bouton Créer afin d’appliquer le script au cluster.
Appliquer une action de script à un cluster en cours d’exécution à partir d’Azure PowerShell
Pour utiliser ces commandes PowerShell, vous avez besoin du module AZ. L’exemple suivant montre comment appliquer une action de script à un cluster en cours d’exécution :
# Get information for the HDInsight cluster
$clusterName = Read-Host -Prompt "Enter the name of the HDInsight cluster"
$scriptActionName = Read-Host -Prompt "Enter the name of the script action"
$scriptActionUri = Read-Host -Prompt "Enter the URI of the script action"
# The node types that the script action is applied to
$nodeTypes = "headnode", "workernode"
# Apply the script and mark as persistent
Submit-AzHDInsightScriptAction -ClusterName $clusterName `
-Name $scriptActionName `
-Uri $scriptActionUri `
-NodeTypes $nodeTypes `
-PersistOnSuccess
Au terme de l’opération, vous voyez s’afficher des informations similaires au texte ci-dessous :
OperationState : Succeeded
ErrorMessage :
Name : Giraph
Uri : https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh
Parameters :
NodeTypes : {HeadNode, WorkerNode}
Appliquer une action de script à un cluster en cours d’exécution à partir d’Azure CLI
Avant de commencer, assurez-vous que vous avez installé et configuré Azure CLI. Vérifiez que vous avez la version la plus récente. Pour plus d’informations, consultez la rubrique Installation de l’interface de ligne de commande Azure (CLI).
Authentifiez-vous auprès de votre abonnement Azure :
az login
Appliquez une action de script à un cluster en cours d’exécution :
az hdinsight script-action execute --cluster-name CLUSTERNAME --name SCRIPTNAME --resource-group RESOURCEGROUP --roles ROLES
Les rôles valides sont
headnode
,workernode
,zookeepernode
etedgenode
. Si le script doit être appliqué à plusieurs types de nœuds, séparez les rôles par une espace. Par exemple :--roles headnode workernode
.Pour rendre le script persistant, ajoutez le paramètre
--persist-on-success
. Vous pouvez également continuer le script à une date ultérieure à l’aide deaz hdinsight script-action promote
.
Appliquer une action de script à un cluster en cours d’exécution à l’aide de l’API REST
Consultez API REST de cluster dans Azure HDInsight.
Appliquer une action de script à un cluster en cours d’exécution à partir du kit HDInsight .NET SDK
Pour obtenir un exemple d’utilisation du SDK .NET afin d’appliquer des scripts à un cluster, consultez Appliquer une action de script sur un cluster HDInsight Linux en cours d’exécution.
Afficher l’historique et promouvoir ou abaisser des actions de script
Le portail Azure
Connectez-vous au Portail Azure et recherchez votre cluster.
Dans la vue par défaut, sous Paramètres, sélectionnez Actions de script.
Un historique des scripts pour ce cluster s’affiche dans la section des actions de script. Ces informations comprennent une liste de scripts persistants. La capture d’écran suivante montre que le script Solr a été exécuté sur ce cluster. La capture d’écran n’affiche aucun script persistant.
Sélectionnez un script dans l’historique pour afficher la section Propriétés du script. Dans le coin supérieur de l’écran, vous pouvez réexécuter le script ou le promouvoir.
Vous pouvez également sélectionner le bouton de sélection ( … ) à droite des entrées dans la section Actions de script pour effectuer des actions.
Azure PowerShell
Applet de commande | Fonction |
---|---|
Get-AzHDInsightPersistedScriptAction |
Récupérer des informations sur les actions de script persistantes. Cette cmdlet n’annule pas les actions effectuées par un script, elle supprime uniquement l’indicateur persistant. |
Get-AzHDInsightScriptActionHistory |
Récupérer l’historique des actions de script appliquées au cluster ou les informations d’un script spécifique. |
Set-AzHDInsightPersistedScriptAction |
Promouvoir une action de script ad hoc en action de script persistante. |
Remove-AzHDInsightPersistedScriptAction |
Rétrograder une action de script persistante en action ad hoc . |
L’exemple de script suivant illustre l’utilisation des applets de commande pour promouvoir, puis abaisser un script.
# Get a history of scripts
Get-AzHDInsightScriptActionHistory -ClusterName mycluster
# From the list, we want to get information on a specific script
Get-AzHDInsightScriptActionHistory -ClusterName mycluster `
-ScriptExecutionId 635920937765978529
# Promote this to a persisted script
# Note: the script must have a unique name to be promoted
# if the name is not unique, you receive an error
Set-AzHDInsightPersistedScriptAction -ClusterName mycluster `
-ScriptExecutionId 635920937765978529
# Demote the script back to ad hoc
# Note that demotion uses the unique script name instead of
# execution ID.
Remove-AzHDInsightPersistedScriptAction -ClusterName mycluster `
-Name "Install Giraph"
Azure CLI
Commande | Description |
---|---|
az hdinsight script-action delete |
Supprime l’action de script persistante spécifiée du cluster. Cette commande n’annule pas les actions effectuées par un script, elle supprime uniquement l’indicateur persistant. |
az hdinsight script-action execute |
Exécute des actions de script sur le cluster HDInsight spécifié. |
az hdinsight script-action list |
Répertorie toutes les actions de script persistantes pour le cluster spécifié. |
az hdinsight script-action list-execution-history |
Répertorie l’historique d’exécution de tous les scripts pour le cluster spécifié. |
az hdinsight script-action promote |
Promeut l’exécution de script ad hoc spécifiée dans un script persistant. |
az hdinsight script-action show-execution-details |
Obtient le détail de l’exécution du script pour l’ID d’exécution du script donné. |
Kit HDInsight .NET SDK
Pour obtenir un exemple d’utilisation du SDK .NET afin de récupérer l’historique des scripts d’un cluster, et de promouvoir ou d’abaisser des scripts, consultez Appliquer une action de script sur un cluster HDInsight Linux en cours d’exécution.
Notes
Cet exemple montre également comment installer une application HDInsight à l’aide du SDK .NET.