Azure HDInsight-clusters aanpassen met behulp van scriptacties

Azure HDInsight biedt een configuratiemethode met de naam scriptacties waarmee aangepaste scripts worden aangeroepen om het cluster aan te passen. Deze scripts worden gebruikt om extra onderdelen te installeren en configuratie-instellingen te wijzigen. Scriptacties kunnen worden gebruikt tijdens of na het maken van het cluster.

Scriptacties kunnen ook als HDInsight-toepassing worden gepubliceerd naar Azure Marketplace. Zie Een HDInsight-toepassing publiceren in Azure Marketplace voor meer informatie over HDInsight-toepassingen.

Scriptacties begrijpen

Een scriptactie is Bash-script dat wordt uitgevoerd op de knooppunten in een HDInsight-cluster. Kenmerken en kenmerken van scriptacties zijn als volgt:

  • De Bash-script-URI (de locatie voor toegang tot het bestand) moet toegankelijk zijn vanuit de HDInsight-resourceprovider en het cluster.

  • Hier volgen mogelijke opslaglocaties:

    • Voor reguliere (niet-ESP)-clusters:

      • Een blob in een Azure Storage-account dat het primaire of extra opslagaccount voor het HDInsight-cluster is. HDInsight krijgt tijdens het maken van clusters toegang tot beide typen opslagaccounts.

        Belangrijk

        Draai de opslagsleutel niet in dit Azure Storage-account, omdat volgende scriptacties met daar opgeslagen scripts mislukken.

      • Data Lake Storage Gen1: De service-principal die HDInsight gebruikt voor toegang tot Data Lake Storage, moet leestoegang hebben tot het script. De Bash-script-URI-indeling is adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      • Data Lake Storage Gen2 wordt niet aanbevolen om te gebruiken voor scriptacties. abfs:// wordt niet ondersteund voor de Bash-script-URI. https:// URI's zijn mogelijk, maar deze werken voor containers die openbare toegang hebben en de firewall is geopend voor de HDInsight-resourceprovider, en wordt daarom niet aanbevolen.

      • Een openbare service voor het delen van bestanden die toegankelijk is via https:// paden. Voorbeelden zijn Azure Blob, GitHub of OneDrive. Zie voorbeeldscriptactiescripts voor URI's.

    • Voor clusters met ESP worden de wasb:// of wasbs://http[s]:// URI's ondersteund.

  • De scriptacties kunnen worden beperkt tot uitvoering op alleen bepaalde knooppunttypen. Voorbeelden zijn hoofdknooppunten of werkknooppunten.

  • De scriptacties kunnen worden persistent of ad hoc.

    • Persistente scriptacties moeten een unieke naam hebben. Persistente scripts worden gebruikt om nieuwe werkknooppunten die aan het cluster worden toegevoegd, aan te passen via schaalbewerkingen. Een persistent script kan ook wijzigingen toepassen op een ander knooppunttype wanneer er schaalbewerkingen plaatsvinden. Een voorbeeld is een hoofdknooppunt.
    • Ad-hocscripts worden niet persistent. Scriptacties die worden gebruikt tijdens het maken van het cluster, worden automatisch behouden. Ze worden niet toegepast op werkknooppunten die zijn toegevoegd aan het cluster nadat het script is uitgevoerd. Vervolgens kunt u een ad-hocscript promoveren naar een persistent script of een persistent script degraderen naar een ad-hocscript. Scripts die mislukken, worden niet behouden, zelfs niet als u specifiek aangeeft dat ze moeten zijn.
  • Scriptacties kunnen parameters accepteren die tijdens de uitvoering door het script worden gebruikt.

  • Scriptacties worden uitgevoerd met bevoegdheden op hoofdniveau op de clusterknooppunten.

  • Scriptacties kunnen worden gebruikt via Azure Portal, Azure PowerShell, Azure CLI of HDInsight .NET SDK.

  • Scriptacties die servicebestanden op de VM verwijderen of wijzigen, kunnen van invloed zijn op de servicestatus en beschikbaarheid.

Het cluster houdt een geschiedenis bij van alle scripts die zijn uitgevoerd. De geschiedenis helpt wanneer u de id van een script moet vinden voor promotie- of degradatiebewerkingen.

Belangrijk

Er is geen automatische manier om de wijzigingen ongedaan te maken die zijn aangebracht door een scriptactie. U kunt de wijzigingen handmatig omkeren of een script opgeven waarmee ze worden omgekeerd.

Machtigingen

Voor een HDInsight-cluster dat lid is van een domein, zijn er twee Apache Ambari-machtigingen vereist wanneer u scriptacties met het cluster gebruikt:

  • AMBARI. RUN_CUSTOM_COMMAND. De rol Ambari Beheer istrator heeft deze machtiging standaard.
  • CLUSTER. RUN_CUSTOM_COMMAND. Zowel het HDInsight-cluster Beheer istrator als de Ambari-Beheer istrator hebben standaard deze machtiging.

Zie HDInsight-clusters beheren met Enterprise Security Package voor meer informatie over het werken met machtigingen met HDInsight die lid zijn van een domein.

Toegangsbeheer

Als u niet de beheerder of eigenaar van uw Azure-abonnement bent, moet uw account ten minste Contributor toegang hebben tot de resourcegroep die het HDInsight-cluster bevat.

Iemand met ten minste inzendertoegang tot het Azure-abonnement moet de provider eerder hebben geregistreerd. Providerregistratie vindt plaats wanneer een gebruiker met inzendertoegang tot het abonnement een resource maakt. Zie Een provider registreren met REST als u geen resource hoeft te maken.

Meer informatie over het werken met toegangsbeheer:

Methoden voor het gebruik van scriptacties

U kunt een scriptactie configureren die moet worden uitgevoerd wanneer het cluster voor het eerst wordt gemaakt of op een bestaand cluster wordt uitgevoerd.

Scriptactie in het proces voor het maken van het cluster

Scriptacties die tijdens het maken van het cluster worden gebruikt, verschillen enigszins van scriptacties die worden uitgevoerd op een bestaand cluster:

  • Het script wordt automatisch behouden.
  • Een fout in het script kan ertoe leiden dat het proces voor het maken van het cluster mislukt.

In het volgende diagram ziet u wanneer de scriptactie wordt uitgevoerd tijdens het aanmaakproces:

Stages during cluster creation.

Het script wordt uitgevoerd terwijl HDInsight wordt geconfigureerd. Het script wordt parallel uitgevoerd op alle opgegeven knooppunten in het cluster. Deze wordt uitgevoerd met hoofdbevoegdheden op de knooppunten.

U kunt bewerkingen uitvoeren, zoals het stoppen en starten van services, waaronder apache Hadoop-gerelateerde services. Als u de services stopt, controleert u of Ambari en andere Hadoop-gerelateerde services worden uitgevoerd voordat het script is voltooid. Deze vereiste services bepalen de status en status van het cluster terwijl het wordt gemaakt.

Tijdens het maken van een cluster kunt u veel scriptacties tegelijk gebruiken. Deze scripts worden aangeroepen in de volgorde waarin ze zijn opgegeven.

Notitie

Als het script aanwezig is in een ander opslagaccount dan wat is opgegeven als clusteropslag (tijdens het maken van het cluster), heeft dat een openbare toegang nodig.

Belangrijk

Scriptacties moeten binnen 60 minuten worden voltooid of er is een time-out opgetreden. Tijdens het inrichten van het cluster wordt het script gelijktijdig uitgevoerd met andere installatie- en configuratieprocessen. Concurrentie voor resources zoals CPU-tijd of netwerkbandbreedte kan ertoe leiden dat het script langer duurt dan in uw ontwikkelomgeving.

Om de tijd te minimaliseren die nodig is om het script uit te voeren, vermijdt u taken zoals het downloaden en compileren van toepassingen uit de bron. Toepassingen vooraf compileren en het binaire bestand opslaan in Azure Storage.

Scriptactie op een actief cluster

Een scriptfout in een cluster dat al wordt uitgevoerd, zorgt er niet automatisch voor dat het cluster wordt gewijzigd in een mislukte status. Nadat een script is voltooid, moet het cluster terugkeren naar een actieve status. Zelfs als het cluster een actieve status heeft, is het mislukte script mogelijk beschadigd. Een script kan bijvoorbeeld bestanden verwijderen die nodig zijn voor het cluster.

Scripts worden uitgevoerd met hoofdbevoegdheden. Zorg ervoor dat u begrijpt wat een script doet voordat u dit toepast op uw cluster.

Wanneer u een script toepast op een cluster, wordt de status van het cluster gewijzigd van Wordt uitgevoerd in Geaccepteerd. Vervolgens wordt de HDInsight-configuratie gewijzigd en ten slotte weer uitgevoerd voor geslaagde scripts. De scriptstatus wordt vastgelegd in de scriptactiegeschiedenis. Deze informatie geeft aan of het script is geslaagd of mislukt. De PowerShell-cmdlet geeft bijvoorbeeld Get-AzHDInsightScriptActionHistory de status van een script weer. Deze retourneert informatie die vergelijkbaar is met de volgende tekst:

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

Belangrijk

Als u de clustergebruiker, beheerder, wachtwoord nadat het cluster is gemaakt, wijzigt, kunnen scriptacties die worden uitgevoerd op dit cluster mislukken. Als u permanente scriptacties hebt die gericht zijn op werkknooppunten, kunnen deze scripts mislukken wanneer u het cluster schaalt.

Voorbeeldscriptactiescriptscripts

Scripts voor scriptacties kunnen worden gebruikt via de volgende hulpprogramma's:

  • Azure Portal
  • Azure PowerShell
  • Azure CLI
  • HDInsight .NET-SDK

HDInsight biedt scripts voor het installeren van de volgende onderdelen op HDInsight-clusters:

Naam Script
Een Azure Storage-account toevoegen https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh. Zie Aanvullende opslagaccounts toevoegen aan HDInsight.
Hue installeren https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh. Zie Hue installeren en gebruiken in HDInsight Hadoop-clusters.
Hive-bibliotheken vooraf laden https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh. Zie Aangepaste Apache Hive-bibliotheken toevoegen bij het maken van uw HDInsight-cluster.

Scriptactie tijdens het maken van het cluster

In deze sectie wordt uitgelegd hoe u scriptacties kunt gebruiken wanneer u een HDInsight-cluster maakt.

Een scriptactie gebruiken tijdens het maken van een cluster vanuit Azure Portal

  1. Begin met het maken van een cluster zoals beschreven in Op Linux gebaseerde clusters maken in HDInsight met behulp van Azure Portal. Selecteer op het tabblad Configuratie + prijzen de optie + Scriptactie toevoegen.

    Azure portal cluster script action.

  2. Gebruik de invoer Een script selecteren om een vooraf gemaakt script te selecteren. Als u een aangepast script wilt gebruiken, selecteert u Aangepast. Geef vervolgens de naam en Bash-script-URI op voor uw script.

    Add a script in the select script form.

    In de volgende tabel worden de elementen in het formulier beschreven:

    Eigenschappen Weergegeven als
    Een script selecteren Als u uw eigen script wilt gebruiken, selecteert u Aangepast. Selecteer anders een van de opgegeven scripts.
    Naam Geef een naam op voor de scriptactie.
    Bash-script-URI Geef de URI van het script op.
    Head/Worker/ZooKeeper Geef de knooppunten op waarop het script wordt uitgevoerd: Head, Worker of ZooKeeper.
    Parameters Geef de parameters op, indien vereist door het script.

    Gebruik de vermelding Deze scriptactie behouden om ervoor te zorgen dat het script wordt toegepast tijdens schaalbewerkingen.

  3. Selecteer Maken om het script op te slaan. Vervolgens kunt u + Verzenden nieuw gebruiken om een ander script toe te voegen.

    HDInsight multiple script actions.

    Wanneer u klaar bent met het toevoegen van scripts, keert u terug naar het tabblad Configuratie en prijzen .

  4. Voltooi de resterende stappen voor het maken van het cluster zoals gebruikelijk.

Een scriptactie gebruiken vanuit Azure Resource Manager-sjablonen

Scriptacties kunnen worden gebruikt met Azure Resource Manager-sjablonen. Zie Een voorbeeld: HDInsight Linux-cluster maken en een scriptactie uitvoeren.

In dit voorbeeld wordt de scriptactie toegevoegd met behulp van de volgende code:

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

Meer informatie over het implementeren van een sjabloon:

Een scriptactie gebruiken tijdens het maken van een cluster vanuit Azure PowerShell

In deze sectie gebruikt u de cmdlet Add-AzHDInsightScriptAction om scripts aan te roepen om een cluster aan te passen. Voordat u begint, moet u Azure PowerShell installeren en configureren. Als u deze PowerShell-opdrachten wilt gebruiken, hebt u de AZ-module nodig.

Het volgende script laat zien hoe u een scriptactie toepast wanneer u een cluster maakt met behulp van 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

Het kan enkele minuten duren voordat het cluster wordt gemaakt.

Een scriptactie gebruiken tijdens het maken van een cluster vanuit de HDInsight .NET SDK

De HDInsight .NET SDK biedt clientbibliotheken waarmee u eenvoudiger met HDInsight kunt werken vanuit een .NET-toepassing. Zie Scriptacties voor een codevoorbeeld.

Scriptactie naar een actief cluster

In deze sectie wordt uitgelegd hoe u scriptacties toepast op een actief cluster.

Een scriptactie toepassen op een actief cluster vanuit Azure Portal

  1. Meld u aan bij Azure Portal en zoek uw cluster.

  2. Selecteer scriptacties in de standaardweergave onder Instellingen.

  3. Selecteer boven aan de pagina Scriptacties de optie + Nieuwe verzenden.

    Add a script to a running cluster.

  4. Gebruik de invoer Een script selecteren om een vooraf gemaakt script te selecteren. Als u een aangepast script wilt gebruiken, selecteert u Aangepast. Geef vervolgens de naam en Bash-script-URI op voor uw script.

    Add a script in the select script form.

    In de volgende tabel worden de elementen in het formulier beschreven:

    Eigenschappen Weergegeven als
    Een script selecteren Als u uw eigen script wilt gebruiken, selecteert u aangepast. Selecteer anders een opgegeven script.
    Naam Geef een naam op voor de scriptactie.
    Bash-script-URI Geef de URI van het script op.
    Hoofd/werkrol/Zookeeper Geef de knooppunten op waarop het script wordt uitgevoerd: Head, Worker of ZooKeeper.
    Parameters Geef de parameters op, indien vereist door het script.

    Gebruik de vermelding Deze scriptactie behouden om ervoor te zorgen dat het script wordt toegepast tijdens schaalbewerkingen.

  5. Selecteer ten slotte de knop Maken om het script toe te passen op het cluster.

Een scriptactie toepassen op een actief cluster vanuit Azure PowerShell

Als u deze PowerShell-opdrachten wilt gebruiken, hebt u de AZ-module nodig. In het volgende voorbeeld ziet u hoe u een scriptactie toepast op een actief cluster:

# 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

Nadat de bewerking is voltooid, ontvangt u informatie die vergelijkbaar is met de volgende tekst:

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

Een scriptactie toepassen op een actief cluster vanuit de Azure CLI

Voordat u begint, moet u ervoor zorgen dat u de Azure CLI installeert en configureert. Zorg ervoor dat u de nieuwste versie hebt. Zie De Azure CLI installeren voor meer informatie.

  1. Verifiëren bij uw Azure-abonnement:

    az login
    
  2. Een scriptactie toepassen op een actief cluster:

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

    Geldige rollen zijn headnode, workernode, zookeepernode, . edgenode Als het script moet worden toegepast op verschillende knooppunttypen, scheidt u de rollen door een spatie. Bijvoorbeeld: --roles headnode workernode.

    Als u het script wilt behouden, voegt u het toe --persist-on-success. U kunt het script ook later persistent maken met behulp van az hdinsight script-action promote.

Een scriptactie toepassen op een actief cluster met behulp van REST API

Zie Cluster REST API in Azure HDInsight.

Een scriptactie toepassen op een actief cluster vanuit de HDInsight .NET SDK

Zie Een scriptactie toepassen op een op Linux gebaseerd HDInsight-cluster voor een voorbeeld van het gebruik van de .NET SDK om scripts toe te passen op een cluster.

Geschiedenis weergeven en scriptacties promoveren en verlagen

Azure Portal

  1. Meld u aan bij Azure Portal en zoek uw cluster.

  2. Selecteer scriptacties in de standaardweergave onder Instellingen.

  3. Een geschiedenis van scripts voor dit cluster wordt weergegeven in de sectie scriptacties. Deze informatie bevat een lijst met persistente scripts. In de volgende schermopname ziet u dat het Solr-script is uitgevoerd op dit cluster. In de schermopname worden geen persistente scripts weergegeven.

    Portal script actions submit history.

  4. Selecteer een script in de geschiedenis om de sectie Eigenschappen voor dit script weer te geven. Vanaf de bovenkant van het scherm kunt u het script opnieuw uitvoeren of het niveau ervan verhogen.

    Script actions properties promote.

  5. U kunt ook het beletselteken ..., rechts van de vermeldingen in de sectie scriptacties selecteren om acties uit te voeren.

    Persisted script actions delete.

Azure PowerShell

Cmdlet Functie
Get-AzHDInsightPersistedScriptAction Informatie ophalen over persistente scriptacties. Met deze cmdlet worden de acties die door een script worden uitgevoerd niet ongedaan gemaakt, maar wordt alleen de persistente vlag verwijderd.
Get-AzHDInsightScriptActionHistory Haal een geschiedenis op van scriptacties die zijn toegepast op het cluster of details voor een specifiek script.
Set-AzHDInsightPersistedScriptAction ad hoc Een scriptactie promoveren naar een persistente scriptactie.
Remove-AzHDInsightPersistedScriptAction Degradeer een persistente scriptactie naar een ad hoc actie.

Het volgende voorbeeldscript laat zien hoe u de cmdlets gebruikt om een script te promoveren en vervolgens te degraderen.

# 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

Opdracht Beschrijving
az hdinsight script-action delete Hiermee verwijdert u een opgegeven persistente scriptactie van het cluster. Met deze opdracht worden de acties die door een script worden uitgevoerd, niet ongedaan maken, maar wordt alleen de persistente vlag verwijderd.
az hdinsight script-action execute Scriptacties uitvoeren op het opgegeven HDInsight-cluster.
az hdinsight script-action list Een lijst met alle persistente scriptacties voor het opgegeven cluster.
az hdinsight script-action list-execution-history Een lijst met de uitvoeringsgeschiedenis van alle scripts voor het opgegeven cluster.
az hdinsight script-action promote Bevordert de opgegeven ad-hoc scriptuitvoering naar een persistent script.
az hdinsight script-action show-execution-details Hiermee haalt u de details van de scriptuitvoering op voor de opgegeven scriptuitvoerings-id.

HDInsight .NET-SDK

Zie Een scriptactie toepassen op een op Linux gebaseerd HDInsight-cluster voor een voorbeeld van het gebruik van de .NET SDK om de scriptgeschiedenis van een cluster op te halen, scripts te promoveren of degraderen.

Notitie

In dit voorbeeld ziet u ook hoe u een HDInsight-toepassing installeert met behulp van de .NET SDK.

Volgende stappen