Personalizzare i cluster Azure HDInsight con azioni script

Azure HDInsight fornisce un metodo di configurazione denominato azioni script che richiamano script personalizzati per personalizzare il cluster. Questi script vengono usati per installare i componenti aggiuntivi e modificare le impostazioni di configurazione. Le azioni script possono essere usate durante o dopo la creazione del cluster.

Le azioni script possono anche essere pubblicate in Azure Marketplace come applicazione HDInsight. Per altre informazioni sulle applicazioni HDInsight, vedere Pubblicare un'applicazione HDInsight in Azure Marketplace.

Informazioni sulle azioni script

Un'azione di script è uno script Bash eseguito sui nodi di un cluster HDInsight. Di seguito sono riportate le caratteristiche e funzionalità delle azioni script:

  • L'URI dello script Bash (il percorso per accedere al file) deve essere accessibile dal provider di risorse HDInsight e dal cluster.

  • Di seguito vengono indicate alcune tra le posizioni di archiviazione possibili:

    • Per i cluster normali (non ESP):

      • Un BLOB in un account di archiviazione di Azure che rappresenta l'account di archiviazione primario o aggiuntivo per il cluster HDInsight. HDInsight può accedere a entrambi i tipi di account di archiviazione durante la creazione del cluster.

        Importante

        Non ruotare la chiave di archiviazione su questo account Archiviazione di Azure, perché causerà l'esito negativo delle azioni script successive con script archiviati in tale account.

      • Data Lake Archiviazione Gen1: l'entità servizio usata da HDInsight per accedere a Data Lake Archiviazione deve avere accesso in lettura allo script. Il formato URI dello script Bash è adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      • Data Lake Archiviazione Gen2 non è consigliabile usare per le azioni script. abfs:// non è supportato per l'URI dello script Bash. https:// Gli URI sono possibili, ma quelli che funzionano per i contenitori con accesso pubblico e il firewall aperto per il provider di risorse HDInsight e pertanto non è consigliabile.

      • Un servizio pubblico di condivisione file accessibile tramite https:// percorsi. Alcuni esempi sono BLOB di Azure, GitHub o OneDrive. Per gli URI di esempio, vedere Script di esempio di azione script.

    • Per i cluster con ESP, sono supportati gli wasb:// URI o wasbs://http[s]:// o .

  • Le azioni script possono essere limitate per l'esecuzione solo in determinati tipi di nodo. ad esempio i nodi head o i nodi di lavoro.

  • Le azioni script possono essere rese persistenti o ad hoc.

    • Le azioni script persistenti devono avere un nome univoco. Gli script persistenti vengono usati per personalizzare i nuovi nodi di lavoro aggiunti al cluster tramite operazioni di ridimensionamento. Uno script persistente può anche applicare modifiche a un altro tipo di nodo durante operazioni di ridimensionamento, ad esempio un nodo head.
    • Gli script ad hoc non vengono salvati in modo permanente. Le azioni script usate durante la creazione di un cluster vengono automaticamente rese persistenti. Non vengono infatti applicati ai nodi di lavoro aggiunti al cluster dopo l'esecuzione dello script. È quindi possibile alzare di livello uno script ad hoc a uno script persistente o abbassare di livello uno script persistente in uno script ad hoc . Gli script che hanno esito negativo non vengono resi persistenti, anche in presenza di indicazioni specifiche in tal senso.
  • Le azioni script possono accettare parametri usati dallo script durante l'esecuzione.

  • Le azioni script vengono eseguite con privilegi a livello radice nei nodi del cluster.

  • Le azioni script possono essere usate tramite portale di Azure, Azure PowerShell, l'interfaccia della riga di comando di Azure o HDInsight .NET SDK.

  • Le azioni script che rimuovono o modificano i file di servizio nella macchina virtuale possono influire sull'integrità e sulla disponibilità dei servizi.

Il cluster mantiene una cronologia di tutti gli script eseguiti. La cronologia è utile quando è necessario trovare l'ID di uno script per le operazioni di innalzamento o abbassamento di livello.

Importante

Non esiste un metodo automatico per annullare le modifiche apportate da un'azione script. Annullare manualmente le modifiche o fornire uno script che le inverta.

Autorizzazioni

Per un cluster HDInsight aggiunto a un dominio, sono necessarie due autorizzazioni di Apache Ambari per l'uso di azioni script con il cluster:

  • AMBARI. RUN_CUSTOM_COMMAND. il ruolo di amministratore di Ambari ha questa autorizzazione per impostazione predefinita.
  • GRAPPOLO. RUN_CUSTOM_COMMAND. sia l'amministratore del cluster HDInsight che l'amministratore di Ambari hanno questa autorizzazione per impostazione predefinita.

Per altre informazioni sull'uso delle autorizzazioni con HDInsight aggiunto a un dominio, vedere Gestire i cluster HDInsight con Enterprise Security Package.

Controllo di accesso

Se non si è l'amministratore o il proprietario della sottoscrizione di Azure, l'account deve avere almeno Contributor accesso al gruppo di risorse che contiene il cluster HDInsight.

Un utente con almeno l'accesso Collaboratore alla sottoscrizione di Azure deve aver registrato in precedenza il provider. La registrazione del provider si verifica quando un utente con accesso Collaboratore alla sottoscrizione crea una risorsa. Per senza creare una risorsa, vedere Registrare un provider usando REST.

Ottenere altre informazioni sull'uso della gestione degli accessi:

Metodi per l'uso di azioni script

È possibile configurare un'azione script da eseguire quando il cluster viene creato per la prima volta o eseguirlo in un cluster esistente.

Azione script nel processo di creazione di cluster

Le azioni script usate durante la creazione del cluster sono leggermente diverse da quelle eseguite in un cluster esistente:

  • Lo script viene reso automaticamente persistente.
  • Un errore nello script può causare l'esito negativo del processo di creazione del cluster.

Il diagramma seguente illustra quando viene eseguita l'azione script durante il processo di creazione:

Stages during cluster creation.

Lo script viene eseguito durante la configurazione di HDInsight. Lo script viene eseguito in parallelo in tutti i nodi specificati nel cluster. Viene eseguito con privilegi a livello radice sui nodi.

È possibile eseguire operazioni come l'arresto e l'avvio dei servizi, inclusi i servizi correlati ad Apache Hadoop. Se si arrestano i servizi, assicurarsi che Ambari e altri servizi correlati a Hadoop siano in esecuzione prima del completamento dello script. Questi servizi necessari determinano l'integrità e lo stato del cluster durante la creazione.

Durante la creazione del cluster, è possibile usare più azioni script alla volta. Questi script vengono richiamati nell'ordine in cui sono stati specificati.

Nota

Se lo script è presente in qualsiasi altro account di archiviazione diverso da quello specificato come archiviazione cluster (in fase di creazione del cluster), sarà necessario un accesso pubblico.

Importante

Le azioni script devono essere completate entro 60 minuti o si timeout. Durante il provisioning del cluster, lo script viene eseguito simultaneamente con altri processi di installazione e configurazione. In caso di concorrenza per risorse come il tempo di CPU o la larghezza di banda di rete, lo script potrebbe richiedere più tempo per completare l'operazione rispetto al tempo che impiegherebbe in un ambiente di sviluppo.

Per ridurre al minimo il tempo necessario per eseguire lo script, evitare attività come il download e la compilazione di applicazioni dall'origine. Precompilare le applicazioni e archiviare i file binari in Archiviazione di Azure.

Azione script in un cluster in esecuzione

Un errore di script in un cluster già in esecuzione non causa automaticamente la modifica del cluster a uno stato di errore. Al termine di uno script, il cluster deve tornare a uno stato In esecuzione. Anche se lo stato del cluster è In esecuzione, lo script non riuscito potrebbe includere attività interrotte. Ad esempio, uno script potrebbe eliminare file richiesti dal cluster.

Le azioni script vengono eseguite con privilegi a livello radice. Assicurarsi di comprendere cosa fa uno script prima di applicarlo al cluster.

Quando si applica uno script a un cluster, lo stato del cluster passa da In esecuzione ad Accettato. Quindi passa a Configurazione di HDInsight e infine di nuovo a In esecuzione per gli script con esito positivo. Lo stato dello script viene registrato nella cronologia delle azioni script. Queste informazioni indicano se lo script ha avuto esito positivo o negativo. Ad esempio, il cmdlet di PowerShell Get-AzHDInsightScriptActionHistory mostra lo stato di uno script. Verranno restituite informazioni simili al testo seguente:

ScriptExecutionId : 635918532516474303
StartTime         : 8/14/2017 7:40:55 PM
EndTime           : 8/14/2017 7:41:05 PM
Status            : Succeeded

Importante

Se si cambia la password dell'utente del cluster (admin) dopo la creazione del cluster stesso, le azioni script eseguite su questo cluster potrebbero avere esito negativo. In presenza di azioni script persistenti destinate a nodi di lavoro, questi script potrebbero avere esito negativo se si ridimensiona il cluster.

Script di esempio di azione script

Gli script di azione script possono essere usati tramite le utilità seguenti:

  • Portale di Azure
  • Azure PowerShell
  • Interfaccia della riga di comando di Azure
  • HDInsight .NET SDK

HDInsight fornisce script di esempio per installare i componenti seguenti nei cluster HDInsight:

Nome Script
Aggiungere un account di archiviazione di Azure https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh. Vedere Aggiungere altri account di archiviazione a HDInsight.
Installare Hue https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh. Vedere Installare e usare Hue nei cluster Hadoop di HDInsight.
Precaricare le librerie Hive https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh. Vedere Aggiungere librerie Apache Hive personalizzate durante la creazione del cluster HDInsight.

Azione script durante la creazione del cluster

In questa sezione vengono illustrate le diverse modalità d'uso delle azioni script durante la creazione di un cluster HDInsight.

Usare un'azione script durante la creazione di un cluster dal portale di Azure

  1. Iniziare a creare un cluster come descritto in Creare cluster basati su Linux in HDInsight usando il portale di Azure. Nella scheda Configurazione e prezzi selezionare + Aggiungi azione script.

    Azure portal cluster script action.

  2. Usare la voce Seleziona uno script per selezionare uno script pronto. Per usare uno script personalizzato, selezionare Personalizzato. Specificare quindi Nome e URI script Bash per lo script.

    Add a script in the select script form.

    La tabella seguente illustra gli elementi nel modulo:

    Proprietà valore
    Selezionare uno script Per usare uno script personalizzato, selezionare Personalizzato. In caso contrario, selezionare uno degli script disponibili.
    Nome Specificare un nome per l'azione script.
    URI script Bash Specificare l'URI dello script.
    Responsabile/Lavoratore/ZooKeeper Specificare i nodi in cui viene eseguito lo script: Head, Worker o ZooKeeper.
    Parametri Specificare i parametri, se richiesti dallo script.

    Usare la voce Salvare questa azione script in modo permanente per assicurarsi che lo script venga applicato durante le operazioni di ridimensionamento.

  3. Selezionare Crea per salvare lo script. È quindi possibile usare + Invia nuovo per aggiungere un altro script.

    HDInsight multiple script actions.

    Al termine dell'aggiunta di script, tornare alla scheda Configurazione e prezzi .

  4. Completare i passaggi di creazione del cluster rimanenti come di consueto.

Usare un'azione script dai modelli di Azure Resource Manager

Le azioni script possono essere usate con i modelli di Azure Resource Manager. Per un esempio, vedere Create HDInsight Linux Cluster and run a script action (Creare un cluster Linux HDInsight ed eseguire un'azione script).

In questo esempio, l'azione script viene aggiunta tramite il codice seguente:

"scriptActions": [
    {
        "name": "setenvironmentvariable",
        "uri": "[parameters('scriptActionUri')]",
        "parameters": "headnode"
    }
]

Ottenere altre informazioni su come distribuire un modello:

Usare un'azione script durante la creazione di un cluster da Azure PowerShell

In questa sezione si usa il cmdlet Add-AzHDInsightScriptAction per richiamare gli script per personalizzare un cluster. Prima di iniziare, assicurarsi di installare e configurare Azure PowerShell. Per usare questi comandi di PowerShell, è necessario il modulo AZ.

Lo script seguente mostra come applicare un'azione script durante la creazione di un cluster con 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 creazione del cluster può richiedere alcuni minuti.

Usare un'azione script durante la creazione di un cluster da HDInsight .NET SDK

HDInsight .NET SDK fornisce librerie client che semplificano l'uso di HDInsight da un'applicazione .NET. Per un esempio di codice, vedere Azioni script.

Azione di script a un cluster in esecuzione

Questa sezione illustra come applicare azioni script in un cluster in esecuzione.

Applicare un'azione script a un cluster in esecuzione dal portale di Azure

  1. Accedere al portale di Azure e individuare il cluster.

  2. Nella visualizzazione predefinita, in Impostazioni, selezionare Azioni script.

  3. Nella parte superiore della pagina Azioni script selezionare + Invia nuova.

    Add a script to a running cluster.

  4. Usare la voce Seleziona uno script per selezionare uno script pronto. Per usare uno script personalizzato, selezionare Personalizzato. Specificare quindi Nome e URI script Bash per lo script.

    Add a script in the select script form.

    La tabella seguente illustra gli elementi nel modulo:

    Proprietà valore
    Selezionare uno script Per usare uno script personalizzato, selezionare Personalizzato. In caso contrario, selezionare uno degli script disponibili.
    Nome Specificare un nome per l'azione script.
    URI script Bash Specificare l'URI dello script.
    Head/Worker/Zookeeper Specificare i nodi in cui viene eseguito lo script: Head, Worker o ZooKeeper.
    Parametri Specificare i parametri, se richiesti dallo script.

    Usare la voce Salvare questa azione script in modo permanente per assicurarsi che lo script venga applicato durante le operazioni di ridimensionamento.

  5. Infine, selezionare il pulsante Crea per applicare lo script al cluster.

Applicare un'azione script a un cluster in esecuzione da Azure PowerShell

Per usare questi comandi di PowerShell, è necessario il modulo AZ. L'esempio seguente mostra come applicare un'azione script a un cluster in esecuzione:

# 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

Al termine dell'operazione, vengono visualizzate informazioni simili alle seguenti:

OperationState  : Succeeded
ErrorMessage    :
Name            : Giraph
Uri             : https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh
Parameters      :
NodeTypes       : {HeadNode, WorkerNode}

Applicare un'azione script a un cluster in esecuzione dall'interfaccia della riga di comando di Azure

Prima di iniziare, assicurarsi di installare e configurare l'interfaccia della riga di comando di Azure. Verificare di avere l'ultima versione. Per altre informazioni, vedere Installare l'interfaccia della riga di comando di Azure.

  1. Eseguire l'autenticazione alla sottoscrizione di Azure:

    az login
    
  2. Applicare un'azione script a un cluster in esecuzione:

    az hdinsight script-action execute --cluster-name CLUSTERNAME --name SCRIPTNAME --resource-group RESOURCEGROUP --roles ROLES
    

    I ruoli validi sono headnode, workernode, zookeepernode, edgenode. Se lo script deve essere applicato a diversi tipi di nodo, separare i ruoli in base a uno spazio. Ad esempio: --roles headnode workernode.

    Per salvare lo script in modo permanente, aggiungere --persist-on-success. È anche possibile salvare lo script in modo permanente in un secondo momento usando az hdinsight script-action promote.

Applicare un'azione script a un cluster in esecuzione usando l'API REST

Vedere Cluster REST API in Azure HDInsight (API REST Cluster in Azure HDInsight).

Applicare un'azione script a un cluster in esecuzione da HDInsight .NET SDK

Per un esempio dell'uso di .NET SDK per applicare script a un cluster, vedere Apply a Script Action against a running Linux-based HDInsight cluster (Applicare un'azione script su un cluster HDInsight basato su Linux in esecuzione).

Visualizzare la cronologia e alzare e abbassare di livello le azioni script

Il portale di Azure

  1. Accedere al portale di Azure e individuare il cluster.

  2. Nella visualizzazione predefinita, in Impostazioni, selezionare Azioni script.

  3. Una cronologia degli script per il cluster viene visualizzata nella sezione Azioni script. Queste informazioni includono un elenco degli script persistenti. Lo screenshot seguente mostra che è stato eseguito lo script Solr nel cluster. Lo screenshot non mostra script persistenti.

    Portal script actions submit history.

  4. Selezionare uno script nella cronologia per visualizzare la sezione Proprietà per lo script. Nella parte superiore della schermata è possibile eseguire di nuovo lo script o alzarlo di livello.

    Script actions properties promote.

  5. È anche possibile selezionare i puntini di sospensione , ..., a destra delle voci nella sezione Azioni script per eseguire azioni.

    Persisted script actions delete.

Azure PowerShell

Cmdlet Funzione
Get-AzHDInsightPersistedScriptAction Recuperare informazioni sulle azioni script persistenti. Questo cmdlet non annulla le azioni eseguite da uno script, ma rimuove solo il flag persistente.
Get-AzHDInsightScriptActionHistory Recuperare una cronologia delle azioni script applicate al cluster o i dettagli di uno script specifico.
Set-AzHDInsightPersistedScriptAction Alzare di livello un'azione ad hoc script a un'azione script persistente.
Remove-AzHDInsightPersistedScriptAction Abbassare di livello un'azione script persistente a un'azione ad hoc .

Lo script di esempio seguente mostra come usare i cmdlet per alzare di livello e poi abbassare di livello uno 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"

Interfaccia della riga di comando di Azure

Comando Descrizione
az hdinsight script-action delete Elimina un'azione script persistente specificata del cluster. Questo comando non annulla le azioni eseguite da uno script, ma rimuove solo il flag persistente.
az hdinsight script-action execute Eseguire azioni script sul cluster HDInsight specificato.
az hdinsight script-action list Elenca tutte le azioni script persistenti per il cluster specificato.
az hdinsight script-action list-execution-history Elenca la cronologia di esecuzione di tutti gli script per il cluster specificato.
az hdinsight script-action promote Promuove l'esecuzione di script ad hoc specificata in uno script persistente.
az hdinsight script-action show-execution-details Ottiene i dettagli di esecuzione dello script per l'ID di esecuzione dello script specificato.

HDInsight .NET SDK

Per un esempio relativo all'uso di .NET SDK per recuperare la cronologia degli script da un cluster e alzare o abbassare di livello gli script, vedere Apply a Script Action against a running Linux-based HDInsight cluster (Applicare un'azione script su un cluster HDInsight basato su Linux in esecuzione).

Nota

Questo esempio mostra anche come installare un'applicazione HDInsight mediante .NET SDK.

Passaggi successivi