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:// ou http[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 :

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 :

Stages during cluster creation.

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

  1. 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.

    Azure portal cluster script action.

  2. 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.

    Add a script in the select script form.

    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.

  3. Sélectionnez Créer pour enregistrer le script. Vous pouvez ensuite utiliser + Soumettre nouveau pour ajouter un autre script.

    HDInsight multiple script actions.

    Lorsque vous avez terminé d’ajouter des scripts, revenez à l’onglet Configuration + prix.

  4. 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 :

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

  1. Connectez-vous au Portail Azure et recherchez votre cluster.

  2. Dans la vue par défaut, sous Paramètres, sélectionnez Actions de script.

  3. En haut de la page Actions de script, sélectionnez + Envoyer.

    Add a script to a running cluster.

  4. 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.

    Add a script in the select script form.

    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.

  5. 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).

  1. Authentifiez-vous auprès de votre abonnement Azure :

    az login
    
  2. 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 et edgenode. 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 de az 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

  1. Connectez-vous au Portail Azure et recherchez votre cluster.

  2. Dans la vue par défaut, sous Paramètres, sélectionnez Actions de script.

  3. 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.

    Portal script actions submit history.

  4. 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.

    Script actions properties promote.

  5. Vous pouvez également sélectionner le bouton de sélection ( ) à droite des entrées dans la section Actions de script pour effectuer des actions.

    Persisted script actions delete.

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.

Étapes suivantes