Personalizzare cluster HDInsight basati su Linux tramite Azione script

HDInsight offre un'opzione di configurazione denominata Azione script che richiama script personalizzati per la personalizzazione del cluster. Questi script vengono utilizzati per installare i componenti aggiuntivi e modificare le impostazioni di configurazione. Le azioni script possono essere utilizzate durante o dopo la creazione del cluster.

Importante

La possibilità di usare le azioni script in un cluster già in esecuzione è disponibile solo per i cluster HDInsight basati su Linux.

Linux è l'unico sistema operativo usato in HDInsight versione 3.4 o successiva. Per altre informazioni, vedere la sezione relativa al ritiro di HDInsight in Windows.

Le azioni di script possono anche essere pubblicate in Azure Marketplace come applicazione HDInsight. Alcuni esempi in questo documento mostrano come è possibile installare un'applicazione HDInsight usando i comandi di azione script di PowerShell e .NET SDK. Per altre informazioni sulle applicazioni HDInsight, vedere Pubblicare applicazioni HDInsight in Azure Marketplace.

autorizzazioni

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

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

Per altre informazioni sull'uso delle autorizzazioni con HDInsight aggiunto a un dominio, vedere Manage domain-joined HDInsight clusters (Gestire cluster HDInsight aggiunti al dominio).

Controllo di accesso

Se non si è l'amministratore o il proprietario della sottoscrizione di Azure, l'account deve disporre almeno dell'accesso Collaboratore al gruppo di risorse contenente il cluster HDInsight.

Se si crea un cluster HDInsight, è necessario che un utente con almeno l'accesso Collaboratore alla sottoscrizione di Azure abbia registrato in precedenza il provider per HDInsight. La registrazione del provider viene eseguita quando un utente con accesso Collaboratore alla sottoscrizione crea una risorsa per la prima volta nella sottoscrizione stessa. Può essere eseguita anche senza creare una risorsa registrando un provider tramite REST.

Per altre informazioni sull'uso della gestione degli accessi, vedere i documenti seguenti:

Informazioni sulle azioni script

Un'azione script è semplicemente uno script Bash a cui si forniscono parametri e un URI. Lo script viene eseguito nei nodi del cluster HDInsight. Di seguito sono riportate le caratteristiche e funzionalità delle azioni script.

  • Devono essere archiviate in un URI accessibile dal cluster HDInsight. Di seguito vengono indicate alcune tra le posizioni di archiviazione possibili:

    • Account Azure Data Lake Store accessibile dal cluster HDInsight. Per informazioni sull'uso di Azure Data Lake Store con HDInsight, vedere Creare un cluster HDInsight con Data Lake Store usando il portale.

      Quando si usa uno script archiviato in Data Lake Store, il formato dell'URI è adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      Nota

      L'entità servizio usata da HDInsight per accedere a Data Lake Store deve avere accesso in lettura allo script.

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

    • Un servizio di condivisione file pubblico, ad esempio BLOB di Azure, GitHub, OneDrive, Dropbox e così via.

      Per gli URI di esempio, vedere la sezione Script di Azione script di esempio.

      Avviso

      HDInsight supporta solo account di archiviazione di Azure per utilizzo generico. Non supporta attualmente il tipo di account di archiviazione BLOB.

  • Possono essere limitate all'esecuzione solo in alcuni tipi di nodi, ad esempio nodi head o del ruolo di lavoro.

    Nota

    Se usato con HDInsight Premium, è possibile specificare che lo script deve essere usato nel nodo perimetrale.

  • Possono essere persistenti o ad hoc.

    Gli script persistenti si applicano ai nodi del ruolo di lavoro aggiunti al cluster dopo l'esecuzione dello script. Ad esempio, durante il ridimensionamento del cluster.

    Uno script persistente potrebbe anche applicare modifiche apportate a un altro tipo di nodo, ad esempio un nodo head.

    Importante

    Le azioni script persistenti devono avere un nome univoco.

    Gli script ad hoc non sono persistenti. Non vengono infatti applicati ai nodi del ruolo di lavoro aggiunti al cluster dopo l'esecuzione dello script. È possibile alzare di livello uno script ad hoc in un secondo momento per renderlo persistente o abbassare di livello uno script persistente per renderlo ad hoc.

    Importante

    Le azioni script usate durante la creazione di un cluster vengono automaticamente rese persistenti.

    Gli script che hanno esito negativo non vengono resi persistenti, anche in presenza di indicazioni specifiche in tal senso.

  • Possono accettare parametri usati dallo script durante l'esecuzione.

  • Eseguire lo script con privilegi a livello radice nei nodi del cluster.
  • Possono essere usate con il portale di Azure, Azure PowerShell, l'interfaccia della riga di comando di Azure o HDInsight .NET SDK.

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.

Azione di 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 salvato automaticamente in modo permanente.
  • Un errore nello script può causare l'esito negativo del processo di creazione del cluster.

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

Personalizzazione di cluster HDInsight e fasi durante la creazione di un cluster

Lo script viene eseguito durante la configurazione di HDInsight. In questa fase, lo script viene eseguito in parallelo in tutti i nodi specificati nel cluster e con privilegi a livello radice sui nodi.

Nota

Dato che lo script viene eseguito con privilegi a livello radice nei nodi del cluster, è possibile eseguire operazioni quali l'arresto e l'avvio dei servizi, inclusi quelli correlati ad Hadoop. Se si arrestano i servizi, è necessario assicurarsi che i servizi di Ambari e altri servizi correlati ad Hadoop siano attivi prima che termini l'esecuzione dello script. Questi servizi sono necessari per determinare correttamente l'integrità e lo stato del cluster durante la creazione.

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

Importante

Le azioni di script devono essere completate entro 60 minuti; in caso contrario si verifica un timeout. Durante il provisioning dei cluster, lo script viene eseguito contemporaneamente ad 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 può 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 il file binario in Archiviazione di Azure. In questo modo lo script può scaricare rapidamente l'applicazione nel cluster.

Azione script in un cluster in esecuzione

A differenza delle azioni script usate durante la creazione di un cluster, un errore in uno script eseguito in un cluster già in esecuzione non determina automaticamente uno stato di errore del cluster. Al termine di uno script, il cluster deve restituire uno stato In esecuzione.

Importante

Questo non significa che il cluster in esecuzione sia immune a script che eseguono operazioni non valide. Ad esempio, uno script potrebbe eliminare file richiesti dal cluster.

Le azioni script vengono eseguite con privilegi a livello radice. Occorre quindi conoscere il comportamento di 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 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 dell'azione script, che può essere usata per determinare l'esito positivo o negativo dello script. Ad esempio, il cmdlet di PowerShell Get-AzureRmHDInsightScriptActionHistory può essere usato per visualizzare lo stato di uno script. Verranno restituite informazioni simili al testo seguente:

ScriptExecutionId : 635918532516474303
StartTime         : 2/23/2016 7:40:55 PM
EndTime           : 2/23/2016 7:41:05 PM
Status            : Succeeded
Nota

Se è stata cambiata la password dell'utente del cluster (admin) dopo la creazione del cluster stesso, questo potrebbe causare l'esito negativo delle azioni script eseguite su questo cluster. Nel caso in cui siano presenti azioni script persistenti che hanno come destinazione nodi del ruolo di lavoro diversi, questi script potrebbero avere esito negativo se si ridimensiona il cluster.

Script di Azione script di esempio

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

  • 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 Add additional storage to an HDInsight cluster (Aggiungere altra memoria a un cluster HDInsight).
Installare Hue. https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh. Vedere Installare e usare Hue in cluster HDInsight.
Installare Presto https://raw.githubusercontent.com/hdinsight/presto-hdinsight/master/installpresto.sh. Vedere Installare e usare Presto nei cluster HDInsight Hadoop.
Installare Solr https://hdiconfigactions.blob.core.windows.net/linuxsolrconfigactionv01/solr-installer-v01.sh. Vedere Installare e usare Solr nei cluster Hadoop di HDInsight.
Installare Giraph https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh. Vedere Installare Giraph nei cluster HDInsight Hadoop.
Precaricare le librerie Hive https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh. Vedere l'articolo relativo all' aggiunta di librerie Hive in cluster HDInsight.
Installare o aggiornare Mono https://hdiconfigactions.blob.core.windows.net/install-mono/install-mono.bash. Vedere Installare o aggiornare Mono in HDInsight.

Usare un'azione script durante la creazione di un cluster

In questa sezione vengono forniti esempi sulle diverse modalità di utilizzo 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. Avviare la creazione di un cluster come descritto in Creare cluster Hadoop in HDInsight. Fermarsi quando si raggiunge il pannello Riepilogo del cluster.

  2. Nel pannello Riepilogo del cluster, selezionare il collegamento Modifica per Impostazioni avanzate.

    Collegamento impostazioni avanzate

  3. Nel pannello Impostazioni avanzate selezionare Azioni script. Nel pannello Azioni script selezionare + Invia nuova

    Inviare una nuova azione script

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

    Aggiungere uno script nel modulo di selezione script

    Nella tabella seguente vengono illustrati gli elementi nel modulo:

    Proprietà Valore
    Selezionare uno script Selezionare uno script pronto oppure Personalizzato per usarne uno creato dall'utente.
    Nome Specificare un nome per l'azione script.
    URI script Bash Specificare l'URI dello script da richiamare per personalizzare il cluster.
    Head/Worker/Zookeeper Specificare i nodi head, ruolo di lavoro o Zookeeper in cui viene eseguito lo script di personalizzazione.
    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 ai nodi del ruolo di lavoro quando si ridimensiona il cluster.

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

    Azioni script multiple

    Una volta aggiunti gli script, usare il pulsante Seleziona e quindi il pulsante Avanti per tornare al pannello Riepilogo cluster.

  6. Nel pannello Riepilogo cluster selezionare Crea per creare il cluster.

Usare Azione di script dai modelli di Gestione risorse di Azure

Negli esempi in questa sezione viene illustrato come usare le azioni script con i modelli di Azure Resource Manager durante la creazione di un cluster HDInsight.

Prima di iniziare

Creare cluster usando l'azione script

  1. Copiare il modello seguente in un percorso di questo computer. Questo modello installa Giraph nei nodi head e nei nodi del ruolo di lavoro del cluster. È anche possibile verificare se il modello JSON è valido. Incollare il contenuto del modello in JSONLint, uno strumento di convalida JSON disponibile online.

         {
         "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
         "contentVersion": "1.0.0.0",
         "parameters": {
             "clusterLocation": {
                 "type": "string",
                 "defaultValue": "West US",
                 "allowedValues": [ "West US" ]
             },
             "clusterName": {
                 "type": "string"
             },
             "clusterUserName": {
                 "type": "string",
                 "defaultValue": "admin"
             },
             "clusterUserPassword": {
                 "type": "securestring"
             },
             "sshUserName": {
                 "type": "string",
                 "defaultValue": "username"
             },
             "sshPassword": {
                 "type": "securestring"
             },
             "clusterStorageAccountName": {
                 "type": "string"
             },
             "clusterStorageAccountResourceGroup": {
                 "type": "string"
             },
             "clusterStorageType": {
                 "type": "string",
                 "defaultValue": "Standard_LRS",
                 "allowedValues": [
                     "Standard_LRS",
                     "Standard_GRS",
                     "Standard_ZRS"
                 ]
             },
             "clusterStorageAccountContainer": {
                 "type": "string"
             },
             "clusterHeadNodeCount": {
                 "type": "int",
                 "defaultValue": 1
             },
             "clusterWorkerNodeCount": {
                 "type": "int",
                 "defaultValue": 2
             }
         },
         "variables": {
         },
         "resources": [
             {
                 "name": "[parameters('clusterStorageAccountName')]",
                 "type": "Microsoft.Storage/storageAccounts",
                 "location": "[parameters('clusterLocation')]",
                 "apiVersion": "2015-05-01-preview",
                 "dependsOn": [ ],
                 "tags": { },
                 "properties": {
                     "accountType": "[parameters('clusterStorageType')]"
                 }
             },
             {
                 "name": "[parameters('clusterName')]",
                 "type": "Microsoft.HDInsight/clusters",
                 "location": "[parameters('clusterLocation')]",
                 "apiVersion": "2015-03-01-preview",
                 "dependsOn": [
                     "[concat('Microsoft.Storage/storageAccounts/', parameters('clusterStorageAccountName'))]"
                 ],
                 "tags": { },
                 "properties": {
                     "clusterVersion": "3.2",
                     "osType": "Linux",
                     "clusterDefinition": {
                         "kind": "hadoop",
                         "configurations": {
                             "gateway": {
                                 "restAuthCredential.isEnabled": true,
                                 "restAuthCredential.username": "[parameters('clusterUserName')]",
                                 "restAuthCredential.password": "[parameters('clusterUserPassword')]"
                             }
                         }
                     },
                     "storageProfile": {
                         "storageaccounts": [
                             {
                                 "name": "[concat(parameters('clusterStorageAccountName'),'.blob.core.windows.net')]",
                                 "isDefault": true,
                                 "container": "[parameters('clusterStorageAccountContainer')]",
                                 "key": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('clusterStorageAccountName')), '2015-05-01-preview').key1]"
                             }
                         ]
                     },
                     "computeProfile": {
                         "roles": [
                             {
                                 "name": "headnode",
                                 "targetInstanceCount": "[parameters('clusterHeadNodeCount')]",
                                 "hardwareProfile": {
                                     "vmSize": "Large"
                                 },
                                 "osProfile": {
                                     "linuxOperatingSystemProfile": {
                                         "username": "[parameters('sshUserName')]",
                                         "password": "[parameters('sshPassword')]"
                                     }
                                 },
                                 "scriptActions": [
                                     {
                                         "name": "installGiraph",
                                         "uri": "https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh",
                                         "parameters": ""
                                     }
                                 ]
                             },
                             {
                                 "name": "workernode",
                                 "targetInstanceCount": "[parameters('clusterWorkerNodeCount')]",
                                 "hardwareProfile": {
                                     "vmSize": "Large"
                                 },
                                 "osProfile": {
                                     "linuxOperatingSystemProfile": {
                                         "username": "[parameters('sshUserName')]",
                                         "password": "[parameters('sshPassword')]"
                                     }
                                 },
                                 "scriptActions": [
                                     {
                                         "name": "installR",
                                         "uri": "https://hdiconfigactions.blob.core.windows.net/linuxrconfigactionv01/r-installer-v01.sh",
                                         "parameters": ""
                                     }
                                 ]
                             }
                         ]
                     }
                 }
             }
         ],
         "outputs": {
             "cluster":{
                 "type" : "object",
                 "value" : "[reference(resourceId('Microsoft.HDInsight/clusters',parameters('clusterName')))]"
             }
         }
     }
    
  2. Avviare Azure PowerShell e accedere al proprio account Azure. Una volta specificate le credenziali, il comando restituisce le informazioni relative all'account.

     Add-AzureRmAccount
    
     Id                             Type       ...
     --                             ----
     someone@example.com            User       ...
    
  3. Se si hanno più sottoscrizioni, specificare l'ID sottoscrizione da usare per la distribuzione.

     Select-AzureRmSubscription -SubscriptionID <YourSubscriptionId>
    
    Nota

    È possibile usare Get-AzureRmSubscription per ottenere un elenco di tutte le sottoscrizioni associate all'account, con il relativo ID di sottoscrizione.

  4. Se non è già disponibile un gruppo di risorse, crearne uno. Specificare il nome del gruppo di risorse e il percorso per la soluzione. Viene restituito un riepilogo del nuovo gruppo di risorse.

     New-AzureRmResourceGroup -Name myresourcegroup -Location "West US"
    
     ResourceGroupName : myresourcegroup
     Location          : westus
     ProvisioningState : Succeeded
     Tags              :
     Permissions       :
                         Actions  NotActions
                         =======  ==========
                         *
     ResourceId        : /subscriptions/######/resourceGroups/ExampleResourceGroup
    
  5. Per creare una distribuzione per il gruppo di risorse, eseguire il comando New-AzureResourceGroupDeployment e specificare i parametri necessari. I parametri includeranno un nome per la distribuzione, il nome del gruppo di risorse e il percorso o l'URL del modello creato. Passare anche gli eventuali altri parametri richiesti dal modello. In questo caso, l'azione di script per installare R nel cluster non richiede parametri.

     New-AzureRmResourceGroupDeployment -Name mydeployment -ResourceGroupName myresourcegroup -TemplateFile <PathOrLinkToTemplate>
    

    Viene richiesto di fornire valori per i parametri definiti nel modello.

  6. Quando il gruppo di risorse è stato distribuito, verrà visualizzato un riepilogo della distribuzione.

       DeploymentName    : mydeployment
       ResourceGroupName : myresourcegroup
       ProvisioningState : Succeeded
       Timestamp         : 8/17/2015 7:00:27 PM
       Mode              : Incremental
       ...
    
  7. Se la distribuzione non riesce, è possibile usare i cmdlet seguenti per ottenere informazioni relative agli errori.

     Get-AzureRmResourceGroupDeployment -ResourceGroupName myresourcegroup -ProvisioningState Failed
    

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

In questa sezione si userà il cmdlet Add-AzureRmHDInsightScriptAction per richiamare script usando l'azione di script per personalizzare un cluster. Prima di procedere, assicurarsi di aver installato e configurato Azure PowerShell. Per informazioni sulla configurazione di una workstation per l'esecuzione di cmdlet PowerShell per HDInsight, vedere Come installare e configurare Azure PowerShell.

Lo script seguente mostra come applicare un'azione script durante la creazione di un cluster con PowerShell:

# Login to your Azure subscription
# Is there an active Azure subscription?
$sub = Get-AzureRmSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
    Add-AzureRmAccount
}

# If you have multiple subscriptions, set the one to use
# $subscriptionID = "<subscription ID to use>"
# Select-AzureRmSubscription -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-AzureRmResourceGroup -Name $resourceGroupName -Location $location

$defaultStorageAccountName = Read-Host -Prompt "Enter the name of the storage account"

# Create an Azure storae account and container
New-AzureRmStorageAccount `
    -ResourceGroupName $resourceGroupName `
    -Name $defaultStorageAccountName `
    -Type Standard_LRS `
    -Location $location
$defaultStorageAccountKey = (Get-AzureRmStorageAccountKey `
                                -ResourceGroupName $resourceGroupName `
                                -Name $defaultStorageAccountName)[0].Value
$defaultStorageContext = New-AzureStorageContext `
                                -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-AzureStorageContainer `
    -Name $clusterName -Context $defaultStorageContext

# Create an HDInsight configuration object
$config = New-AzureRmHDInsightClusterConfig
# Add the script action
$scriptActionUri="https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh"
# Add for the head nodes
$config = Add-AzureRmHDInsightScriptAction `
    -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-AzureRmHDInsightScriptAction `
    -Config $config `
    -Name "Install Giraph" `
    -NodeType WorkerNode `
    -Uri $scriptActionUri

# Create the cluster using the configuration object
New-AzureRmHDInsightCluster `
    -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 Creare cluster basati su Linux in HDInsight tramite .NET SDK.

Applicare un'azione script a un cluster in esecuzione

Questa sezione offre informazioni su come applicare azioni script a un cluster in esecuzione.

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

  1. Nel portale di Azureselezionare il cluster HDInsight.

  2. Nel pannello del cluster HDInsight selezionare il riquadro Azioni script.

    Riquadro Azioni script

    Nota

    È anche possibile selezionare Tutte le impostazioni e quindi Azioni script dal pannello Impostazioni.

  3. Nella parte superiore del pannello Azioni script selezionare Invia nuova.

    Aggiungere uno script a un cluster in esecuzione

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

    Aggiungere uno script nel modulo di selezione script

    Nella tabella seguente vengono illustrati gli elementi nel modulo:

    Proprietà Valore
    Selezionare uno script Selezionare uno script pronto oppure Personalizzato per usarne uno creato dall'utente.
    Nome Specificare un nome per l'azione script.
    URI script Bash Specificare l'URI dello script da richiamare per personalizzare il cluster.
    Head/Worker/Zookeeper Specificare i nodi head, ruolo di lavoro o Zookeeper in cui viene eseguito lo script di personalizzazione.
    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 ai nodi del ruolo di lavoro quando si ridimensiona il cluster.

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

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

Prima di procedere, assicurarsi di aver installato e configurato Azure PowerShell. Per informazioni sulla configurazione di una workstation per l'esecuzione di cmdlet PowerShell per HDInsight, vedere Come installare e configurare Azure PowerShell.

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-AzureRmHDInsightScriptAction -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 procedere, assicurarsi di aver installato e configurato l'interfaccia della riga di comando di Azure. Per altre informazioni, vedere Installare l'interfaccia della riga di comando di Azure.

[! IMPORTANTE] Il supporto dell'interfaccia della riga di comando di Azure per la gestione delle risorse HDInsight tramite Azure Service Manager è deprecato ed è stato rimosso il 1° gennaio 2017. La procedura descritta in questo documento usa i nuovi comandi dell'interfaccia della riga di comando di Azure, compatibili con Azure Resource Manager.

Per installare la versione più recente, seguire la procedura descritta in Installare l'interfaccia della riga di comando di Azure . Se sono presenti script che devono essere modificati per l'uso dei nuovi comandi compatibili con Azure Resource Manager, vedere l'articolo relativo alla migrazione a strumenti di sviluppo basati su Azure Resource Manager per i cluster HDInsight per altre informazioni.

  1. Aprire una sessione di shell, il terminale, il prompt dei comandi o altra riga di comando del sistema e usare il comando seguente per passare alla modalità Azure Resource Manager.

     azure config mode arm
    
  2. Usare il comando seguente per eseguire l'autenticazione nella sottoscrizione di Azure.

     azure login
    
  3. Usare il comando seguente per applicare un'azione script a un cluster in esecuzione

     azure hdinsight script-action create <clustername> -g <resourcegroupname> -n <scriptname> -u <scriptURI> -t <nodetypes>
    

    Se non vengono specificati alcuni parametri per il comando, verrà richiesto di specificarli. Se lo script specificato con -u accetta parametri, è possibile specificarli usando il parametro -p.

    I tipi di nodo validi sono headnode, workernode, e zookeeper. Se lo script deve essere applicato a più tipi di nodo, specificare i tipi separati da ';'. Ad esempio: -n headnode;workernode.

    Per salvare lo script in modo permanente, aggiungere --persistOnSuccess. È anche possibile salvare lo script in modo permanente in un secondo momento usando azure hdinsight script-action persisted set.

    Al termine del processo, viene visualizzato un output simile al testo seguente:

     info:    Executing command hdinsight script-action create
     + Executing Script Action on HDInsight cluster
     data:    Operation Info
     data:    ---------------
     data:    Operation status:
     data:    Operation ID:  b707b10e-e633-45c0-baa9-8aed3d348c13
     info:    hdinsight script-action create command OK
    

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

Vedere l'articolo su come eseguire azioni script in un cluster in esecuzione.

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

Per un esempio relativo all'uso di .NET SDK per applicare script a un cluster, vedere https://github.com/Azure-Samples/hdinsight-dotnet-script-action.

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

Uso del portale di Azure

  1. Nel portale di Azureselezionare il cluster HDInsight.

  2. Nel pannello del cluster HDInsight selezionare il riquadro Azioni script.

    Riquadro Azioni script

    Nota

    È anche possibile selezionare Tutte le impostazioni e quindi Azioni script dal pannello Impostazioni.

  3. Una cronologia degli script per il cluster viene visualizzata nel pannello Azioni script. Queste informazioni includono un elenco degli script persistenti. Nella schermata seguente si noterà che lo script Solr è stato eseguito nel cluster, la schermata tuttavia non mostra script persistenti.

    Pannello Azioni script

  4. Selezionando uno script dalla cronologia viene visualizzato il relativo pannello delle proprietà. Nella parte superiore del pannello è possibile eseguire nuovamente o alzare di livello lo script.

    Pannello delle proprietà delle azioni script

  5. È anche possibile usare i puntini ... a destra delle voci nel pannello Azioni script per eseguire operazioni.

    Uso di ... nelle azioni script

Uso di Azure PowerShell

Usare Per
Get-AzureRmHDInsightPersistedScriptAction Recuperare informazioni sulle azioni script persistenti
Get-AzureRmHDInsightScriptActionHistory Recuperare una cronologia delle azioni script applicate al cluster o i dettagli di uno script specifico
Set-AzureRmHDInsightPersistedScriptAction Alzare di livello un'azione script ad hoc per renderla un'azione script persistente
Remove-AzureRmHDInsightPersistedScriptAction Abbassare di livello un'azione script persistente per renderla un'azione script ad hoc
Importante

Usando Remove-AzureRmHDInsightPersistedScriptAction non vengono annullate le azioni eseguite da uno script. Questo cmdlet rimuove solo il flag persistente.

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-AzureRmHDInsightScriptActionHistory -ClusterName mycluster

# From the list, we want to get information on a specific script
Get-AzureRmHDInsightScriptActionHistory -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-AzureRmHDInsightPersistedScriptAction -ClusterName mycluster `
    -ScriptExecutionId 635920937765978529

# Demote the script back to ad hoc
# Note that demotion uses the unique script name instead of
# execution ID.
Remove-AzureRmHDInsightPersistedScriptAction -ClusterName mycluster `
    -Name "Install Giraph"

Uso dell'interfaccia della riga di comando di Azure

Usare Per
azure hdinsight script-action persisted list <clustername> Recuperare un elenco di azioni script con salvataggio permanente
azure hdinsight script-action persisted show <clustername> <scriptname> Recuperare informazioni su una specifica azione script con salvataggio permanente
azure hdinsight script-action history list <clustername> Recuperare una cronologia delle azioni script applicate al cluster
azure hdinsight script-action history show <clustername> <scriptname> Recuperare informazioni su un'azione script specifica
azure hdinsight script action persisted set <clustername> <scriptexecutionid> Alzare di livello un'azione script ad hoc per renderla un'azione script persistente
azure hdinsight script-action persisted delete <clustername> <scriptname> Abbassare di livello un'azione script persistente per renderla un'azione script ad hoc
Importante

Usando azure hdinsight script-action persisted delete non vengono annullate le azioni eseguite da uno script. Questo cmdlet rimuove solo il flag persistente.

Uso di 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 https://github.com/Azure-Samples/hdinsight-dotnet-script-action.

Nota

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

Supporto per software open source usato nei cluster HDInsight

Il servizio Microsoft Azure HDInsight usa un ecosistema di tecnologie open source ispirate ad Hadoop. Microsoft Azure offre un livello di supporto generale per le tecnologie open source. Per altre informazioni, vedere la sezione Ambito del supporto nel sito Web delle domande frequenti sul supporto tecnico di Azure. Il servizio HDInsight fornisce un livello di supporto aggiuntivo per alcuni componenti, come illustrato di seguito.

Nel servizio HDInsight sono disponibili due tipi di componenti open source:

  • Componenti predefiniti - Questi componenti sono preinstallati nei cluster HDInsight e forniscono la funzionalità di base del cluster. Questa categoria include ad esempio il gestore risorse YARN, il linguaggio di query Hive (HiveQL) e la libreria Mahout. L'elenco completo dei componenti del cluster è disponibile in Novità delle versioni cluster di Hadoop incluse in HDInsight.
  • Componenti personalizzati - Un utente del cluster può installare o usare nel carico di lavoro qualsiasi componente disponibile nella community o creato da lui stesso.
Avviso

I componenti forniti con il cluster HDInsight sono completamente supportati. Il supporto tecnico Microsoft aiuta a isolare e risolvere i problemi legati a tali componenti.

I componenti personalizzati ricevono supporto commercialmente ragionevole per semplificare la risoluzione dei problemi. È possibile che si ottenga la risoluzione dei problemi o che venga richiesto di usare i canali disponibili per le tecnologie open source, in cui è possibile ottenere supporto approfondito per la tecnologia specifica. È ad esempio possibile ricorrere a molti siti di community, come il forum MSDN per HDInsight o http://stackoverflow.com. Anche per i progetti Apache sono disponibili siti specifici in http://apache.org, ad esempio Hadoop.

Il servizio HDInsight permette di usare i componenti personalizzati in molti modi. Indipendentemente dal modo in cui un componente viene usato o installato nel cluster, verrà applicato lo stesso livello di supporto. L'elenco seguente illustra i modi più comuni per usare i componenti personalizzati nei cluster HDInsight:

  1. Invio di processi - È possibile inviare al cluster processi Hadoop o di altro tipo che eseguono o usano componenti personalizzati.

  2. Personalizzazione del cluster - Durante la creazione di un cluster, è possibile specificare impostazioni aggiuntive e componenti personalizzati, che verranno installati nei nodi del cluster.

  3. Esempi - Microsoft e altri utenti possono fornire esempi relativi all'uso dei componenti personalizzati più diffusi nei cluster HDInsight. Questi esempi vengono forniti senza supporto.

Risoluzione dei problemi

È possibile usare l'interfaccia utente Web Ambari per visualizzare le informazioni registrate dalle azioni script. Se lo script ha esito negativo durante la creazione del cluster, i log sono disponibili anche nell'account di archiviazione predefinito associato al cluster. Questa sezione fornisce informazioni su come recuperare i registri usando entrambe le opzioni.

Utilizzo dell'interfaccia utente Web Ambari

  1. Nel browser passare a https://CLUSTERNAME.azurehdinsight.net. Sostituire CLUSTERNAME con il nome del cluster HDInsight.

    Quando richiesto, immettere il nome dell'account amministratore (admin) e la password per il cluster. Potrebbe essere necessario immettere di nuovo le credenziali di amministratore in un Web Form.

  2. Nella barra nella parte superiore della pagina fare clic sulla voce ops. Verrà visualizzato un elenco delle operazioni correnti e precedenti eseguite nel cluster tramite Ambari.

    Barra nell'interfaccia utente di Ambari con selezionato ops

  3. Trovare le voci con run_customscriptaction nella colonna Operations. Queste voci vengono create quando si eseguono le azioni script.

    Schermata delle operazioni

    Selezionare la voce run\customscriptaction ed eseguire il drill-down dei collegamenti per visualizzare l'output di STDOUT e STDERR. Questo output viene generato all'esecuzione dello script e può contenere informazioni utili.

Accesso ai registri dall'account di archiviazione predefinito

Se la creazione del cluster non riesce a causa di un errore nell'azione script, i registri sono accessibili dall'account di archiviazione predefinito.

  • I registri di archiviazione sono disponibili in \STORAGE_ACCOUNT_NAME\DEFAULT_CONTAINER_NAME\custom-scriptaction-logs\CLUSTER_NAME\DATE.

    Schermata delle operazioni

    In questa directory i registri sono organizzati per nodi head, nodi del ruolo di lavoro e nodi zookeeper. Di seguito sono riportati alcuni esempi:

    • Nodo head - <uniqueidentifier>AmbariDb-hn0-<generated_value>.cloudapp.net

    • Nodo del ruolo di lavoro - <uniqueidentifier>AmbariDb-wn0-<generated_value>.cloudapp.net

    • Nodo Zookeeper - <uniqueidentifier>AmbariDb-zk0-<generated_value>.cloudapp.net

  • Tutti i file stdout e stderr dell'host corrispondente vengono caricati nell'account di archiviazione. Per ogni azione script esiste un file output-*.txt e un file errors-*.txt. Il file output-*.txt contiene informazioni relative all'URI dello script che è stato eseguito nell'host. Ad esempio

      'Start downloading script locally: ', u'https://hdiconfigactions.blob.core.windows.net/linuxrconfigactionv01/r-installer-v01.sh'
    
  • È possibile creare più volte un cluster dell'azione di script con lo stesso nome. In questo caso, è possibile distinguere i registri corrispondenti in base al nome della cartella della data. Ad esempio, la struttura di cartelle per un cluster (mycluster) creato in diverse date sarà simile alle seguenti voci di registro:

    \STORAGE_ACCOUNT_NAME\DEFAULT_CONTAINER_NAME\custom-scriptaction-logs\mycluster\2015-10-04 \STORAGE_ACCOUNT_NAME\DEFAULT_CONTAINER_NAME\custom-scriptaction-logs\mycluster\2015-10-05

  • Se in uno stesso giorno si creano più cluster dell'azione di script con lo stesso nome, è possibile usare il prefisso univoco per identificare i file di registro corrispondenti.

  • Se si crea un cluster alla fine del giorno, è possibile che i file di registro si estendano su due giorni. In questi casi, per lo stesso cluster vengono visualizzate due diverse cartelle della data.

  • Il caricamento dei file di registro nel contenitore predefinito può richiedere fino a 5 minuti, soprattutto per i cluster di grandi dimensioni. Se si desidera accedere ai file di registro, quindi, è opportuno non eliminare immediatamente il cluster in caso di esito negativo di un'azione di script.

Watchdog Ambari

Avviso

Non modificare la password del watchdog Ambari (hdinsightwatchdog) nel cluster HDInsight basato su Linux. La modifica della password per questo account rende impossibile eseguire nuove azioni script nel cluster HDInsight.

Impossibile importare il nome BlobService

Sintomi: l'azione di script non riesce e viene visualizzato un errore simile all'esempio seguente quando si visualizza l'operazione in Ambari:

Traceback (most recent call list):
  File "/var/lib/ambari-agent/cache/custom_actions/scripts/run_customscriptaction.py", line 21, in <module>
    from azure.storage.blob import BlobService
ImportError: cannot import name BlobService

Causa: questo errore si verifica se si aggiorna il client di archiviazione di Azure Python incluso con il cluster HDInsight. HDInsight prevede l'uso della versione 0.20.0 del client di archiviazione di Azure.

Risoluzione: per risolvere questo problema, connettersi manualmente a ciascun nodo del cluster usando ssh e usare il comando seguente per reinstallare la versione corretta del client di archiviazione:

sudo pip install azure-storage==0.20.0

Per informazioni sulla connessione al cluster tramite SSH, vedere Usare SSH con HDInsight.

La cronologia non mostra gli script usati durante la creazione di un cluster

Se il cluster è stato creato prima del 15 marzo 2016, potrebbe non essere visualizzata una voce nella cronologia delle azioni script. Se si ridimensiona il cluster dopo il 15 marzo 2016, gli script usati durante la creazione del cluster verranno visualizzati nella cronologia man mano che vengono applicati a nuovi nodi nel cluster nell'ambito dell'operazione di ridimensionamento.

Sussistono due eccezioni:

  • Se il cluster è stato creato prima del 1 settembre 2015. Le azioni script sono state introdotte in questa data. Per i cluster creati prima di tale data non possono quindi essere state usate le azioni script.

  • Se sono state usate più azioni script durante la creazione del cluster ed è stato usato lo stesso nome per più script oppure lo stesso nome e lo stesso URI ma parametri diversi per più script. In questi casi si riceve un errore simile al seguente:

    Non è possibile eseguire nuove azioni script nel cluster a causa di nomi di script in conflitto negli script esistenti. I nomi di script forniti durante la creazione del cluster devono essere tutti univoci. Gli script esistenti verranno comunque eseguiti in caso di ridimensionamento.

Passaggi successivi