Anpassa Azure HDInsight-kluster med hjälp av skriptåtgärder

Azure HDInsight tillhandahåller en konfigurationsmetod som kallas skriptåtgärder som anropar anpassade skript för att anpassa klustret. Dessa skript används för att installera ytterligare komponenter och ändra konfigurationsinställningarna. Skriptåtgärder kan användas under eller efter skapandet av klustret.

Skriptåtgärder kan också publiceras på Azure Marketplace som ett HDInsight-program. Mer information om HDInsight-program finns i Publicera ett HDInsight-program på Azure Marketplace.

Förstå skriptåtgärder

En skriptåtgärd är Ett Bash-skript som körs på noderna i ett HDInsight-kluster. Egenskaper och funktioner i skriptåtgärder är följande:

  • Bash-skript-URI :n (platsen för att komma åt filen) måste vara tillgänglig från HDInsight-resursprovidern och klustret.

  • Följande är möjliga lagringsplatser:

    • För vanliga (icke-ESP)-kluster:

      • En blob i ett Azure Storage-konto som antingen är det primära eller ytterligare lagringskontot för HDInsight-klustret. HDInsight beviljas åtkomst till båda dessa typer av lagringskonton när klustret skapas.

        Viktigt!

        Rotera inte lagringsnyckeln för det här Azure Storage-kontot eftersom efterföljande skriptåtgärder med skript som lagras där misslyckas.

      • Data Lake Storage Gen1: Tjänstens huvudnamn HDInsight använder för att komma åt Data Lake Storage måste ha läsbehörighet till skriptet. Bash-skriptets URI-format är adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      • Data Lake Storage Gen2 rekommenderas inte att använda för skriptåtgärder. abfs:// stöds inte för Bash-skriptets URI. https:// URI:er är möjliga, men de fungerar för containrar som har offentlig åtkomst och brandväggen öppen för HDInsight-resursprovidern och rekommenderas därför inte.

      • En offentlig fildelningstjänst som är tillgänglig via https:// sökvägar. Exempel är Azure Blob, GitHub eller OneDrive. Exempel på URI:er finns i Exempelskript för åtgärdsskript.

    • För kluster med ESP wasb:// stöds eller wasbs:// http[s]:// URI:er.

  • Skriptåtgärderna kan begränsas till att endast köras på vissa nodtyper. Exempel är huvudnoder eller arbetsnoder.

  • Skriptåtgärderna kan bevaras eller ad hoc.

    • Beständiga skriptåtgärder måste ha ett unikt namn. Beständiga skript används för att anpassa nya arbetsnoder som läggs till i klustret genom skalningsåtgärder. Ett beständiga skript kan också tillämpa ändringar på en annan nodtyp när skalningsåtgärder utförs. Ett exempel är en huvudnod.
    • Ad hoc-skript sparas inte. Skriptåtgärder som används när klustret skapas sparas automatiskt. De tillämpas inte på arbetsnoder som läggs till i klustret när skriptet har körts. Sedan kan du höja upp ett ad hoc-skript till ett beständiga skript eller degradera ett beständiga skript till ett ad hoc-skript . Skript som misslyckas sparas inte, även om du specifikt anger att de ska vara det.
  • Skriptåtgärder kan acceptera parametrar som används av skriptet under körningen.

  • Skriptåtgärder körs med behörigheter på rotnivå på klusternoderna.

  • Skriptåtgärder kan användas via Azure-portalen, Azure PowerShell, Azure CLI eller HDInsight .NET SDK.

  • Skriptåtgärder som tar bort eller ändrar tjänstfiler på den virtuella datorn kan påverka tjänstens hälsa och tillgänglighet.

Klustret har en historik över alla skript som har körts. Historiken hjälper dig när du behöver hitta ID:t för ett skript för upp- eller degraderingsåtgärder.

Viktigt!

Det finns inget automatiskt sätt att ångra ändringar som gjorts av en skriptåtgärd. Antingen manuellt ångra ändringarna eller ange ett skript som återställer dem.

Behörigheter

För ett domänanslutet HDInsight-kluster finns det två Apache Ambari-behörigheter som krävs när du använder skriptåtgärder med klustret:

  • AMBARI. RUN_CUSTOM_COMMAND. Rollen Ambari-administratör har den här behörigheten som standard.
  • KLUSTER. RUN_CUSTOM_COMMAND. Både HDInsight-klusteradministratören och Ambari-administratören har den här behörigheten som standard.

Mer information om hur du arbetar med behörigheter med domänanslutna HDInsight finns i Hantera HDInsight-kluster med Enterprise Security Package.

Åtkomstkontroll

Om du inte är administratör eller ägare av din Azure-prenumeration måste ditt konto ha minst Contributor åtkomst till resursgruppen som innehåller HDInsight-klustret.

Någon med minst deltagaråtkomst till Azure-prenumerationen måste tidigare ha registrerat providern. Providerregistrering sker när en användare med deltagaråtkomst till prenumerationen skapar en resurs. Om du inte skapar en resurs kan du läsa registrera en provider med hjälp av REST.

Få mer information om hur du arbetar med åtkomsthantering:

Metoder för att använda skriptåtgärder

Du kan välja att konfigurera en skriptåtgärd som ska köras när klustret först skapas eller köra den i ett befintligt kluster.

Skriptåtgärd i processen för att skapa kluster

Skriptåtgärder som används när kluster skapas skiljer sig något från skriptåtgärder som körs i ett befintligt kluster:

  • Skriptet sparas automatiskt.
  • Ett fel i skriptet kan leda till att processen för att skapa klustret misslyckas.

Följande diagram illustrerar när skriptåtgärden körs under skapandeprocessen:

Stages during cluster creation.

Skriptet körs medan HDInsight konfigureras. Skriptet körs parallellt på alla angivna noder i klustret. Den körs med rotbehörigheter på noderna.

Du kan utföra åtgärder som att stoppa och starta tjänster, inklusive Apache Hadoop-relaterade tjänster. Om du stoppar tjänster kontrollerar du att Ambari och andra Hadoop-relaterade tjänster körs innan skriptet är klart. De här nödvändiga tjänsterna avgör hälsotillståndet och tillståndet för klustret när det skapas.

När klustret skapas kan du använda många skriptåtgärder samtidigt. Dessa skript anropas i den ordning de angavs.

Kommentar

Om skriptet finns i något annat lagringskonto än vad som anges som klusterlagring (vid klusterskapandetiden) behöver det en offentlig åtkomst.

Viktigt!

Skriptåtgärder måste slutföras inom 60 minuter, annars överskrids tidsgränsen. Under klusteretablering körs skriptet samtidigt med andra konfigurationsprocesser. Konkurrens om resurser som CPU-tid eller nätverksbandbredd kan göra att skriptet tar längre tid att slutföra än i utvecklingsmiljön.

Undvik uppgifter som att ladda ned och kompilera program från källan för att minimera den tid det tar att köra skriptet. Förkompilera program och lagra binärfilen i Azure Storage.

Skriptåtgärd i ett kluster som körs

Ett skriptfel i ett kluster som redan körs leder inte automatiskt till att klustret ändras till ett misslyckat tillstånd. När ett skript har slutförts bör klustret återgå till ett körningstillstånd. Även om klustret har ett körningstillstånd kan det misslyckade skriptet ha brutit saker. Ett skript kan till exempel ta bort filer som behövs av klustret.

Skriptåtgärder körs med rotbehörigheter. Se till att du förstår vad ett skript gör innan du tillämpar det på klustret.

När du tillämpar ett skript på ett kluster ändras klustertillståndet från Körs till Godkänd. Sedan ändras den till HDInsight-konfigurationen och slutligen tillbaka till Körs för lyckade skript. Skriptstatusen loggas i skriptets åtgärdshistorik. Den här informationen anger om skriptet lyckades eller misslyckades. PowerShell-cmdleten Get-AzHDInsightScriptActionHistory visar till exempel status för ett skript. Den returnerar information som liknar följande text:

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

Viktigt!

Om du ändrar klusteranvändare, administratör, lösenord när klustret har skapats kan skriptåtgärder som körs mot det här klustret misslyckas. Om du har några bestående skriptåtgärder som riktar sig till arbetsnoder kan dessa skript misslyckas när du skalar klustret.

Exempelskript för skriptåtgärd

Skriptåtgärdsskript kan användas via följande verktyg:

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

HDInsight tillhandahåller skript för att installera följande komponenter i HDInsight-kluster:

Name Skript
Lägga till ett Azure Storage-konto https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh. Se Lägga till ytterligare lagringskonton i HDInsight.
Installera Hue https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh. Se Installera och använda Hue i HDInsight Hadoop-kluster.
Läs in Hive-bibliotek i förväg https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh. Se Lägga till anpassade Apache Hive-bibliotek när du skapar ditt HDInsight-kluster.

Skriptåtgärd när klustret skapas

I det här avsnittet beskrivs olika sätt att använda skriptåtgärder när du skapar ett HDInsight-kluster.

Använda en skriptåtgärd när klustret skapas från Azure-portalen

  1. Börja skapa ett kluster enligt beskrivningen i Skapa Linux-baserade kluster i HDInsight med hjälp av Azure-portalen. På fliken Konfiguration + prissättning väljer du + Lägg till skriptåtgärd.

    Azure portal cluster script action.

  2. Använd posten Välj ett skript för att välja ett fördefinierat skript. Om du vill använda ett anpassat skript väljer du Anpassad. Ange sedan URI för namn och Bash-skript för skriptet.

    Add a script in the select script form.

    I följande tabell beskrivs elementen i formuläret:

    Property Värde
    Välj ett skript Om du vill använda ett eget skript väljer du Anpassad. Annars väljer du ett av de angivna skripten.
    Name Ange ett namn för skriptåtgärden.
    Bash-skript-URI Ange URI:n för skriptet.
    Head/Worker/ZooKeeper Ange de noder som skriptet körs på: Head, Worker eller ZooKeeper.
    Parametrar Ange parametrarna om det krävs av skriptet.

    Använd åtgärdsposten Spara det här skriptet för att se till att skriptet tillämpas under skalningsåtgärderna.

  3. Välj Skapa för att spara skriptet. Sedan kan du använda + Skicka nytt för att lägga till ett annat skript.

    HDInsight multiple script actions.

    När du är klar med att lägga till skript går du tillbaka till fliken Konfiguration + prissättning .

  4. Slutför de återstående stegen för att skapa kluster som vanligt.

Använda en skriptåtgärd från Azure Resource Manager-mallar

Skriptåtgärder kan användas med Azure Resource Manager-mallar. Ett exempel finns i Skapa HDInsight Linux-kluster och kör en skriptåtgärd.

I det här exemplet läggs skriptåtgärden till med hjälp av följande kod:

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

Få mer information om hur du distribuerar en mall:

Använda en skriptåtgärd när klustret skapas från Azure PowerShell

I det här avsnittet använder du cmdleten Add-AzHDInsightScriptAction för att anropa skript för att anpassa ett kluster. Innan du börjar måste du installera och konfigurera Azure PowerShell. Om du vill använda dessa PowerShell-kommandon behöver du AZ-modulen.

Följande skript visar hur du tillämpar en skriptåtgärd när du skapar ett kluster med hjälp av 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

Det kan ta flera minuter innan klustret skapas.

Använda en skriptåtgärd när klustret skapas från HDInsight .NET SDK

HDInsight .NET SDK tillhandahåller klientbibliotek som gör det enklare att arbeta med HDInsight från ett .NET-program. Ett kodexempel finns i Skriptåtgärder.

Skriptåtgärd till ett kluster som körs

I det här avsnittet beskrivs hur du tillämpar skriptåtgärder på ett kluster som körs.

Tillämpa en skriptåtgärd på ett kluster som körs från Azure-portalen

  1. Logga in på Azure-portalen och leta reda på klustret.

  2. Välj Skriptåtgärder under Inställningar i standardvyn.

  3. Längst upp på sidan Skriptåtgärder väljer du + Skicka nytt.

    Add a script to a running cluster.

  4. Använd posten Välj ett skript för att välja ett fördefinierat skript. Om du vill använda ett anpassat skript väljer du Anpassad. Ange sedan URI för namn och Bash-skript för skriptet.

    Add a script in the select script form.

    I följande tabell beskrivs elementen i formuläret:

    Property Värde
    Välj ett skript Om du vill använda ett eget skript väljer du anpassat. Annars väljer du ett angivet skript.
    Name Ange ett namn för skriptåtgärden.
    Bash-skript-URI Ange URI:n för skriptet.
    Head/Worker/Zookeeper Ange de noder som skriptet körs på: Head, Worker eller ZooKeeper.
    Parametrar Ange parametrarna om det krävs av skriptet.

    Använd åtgärdsposten Spara det här skriptet för att kontrollera att skriptet tillämpas under skalningsåtgärderna.

  5. Välj slutligen knappen Skapa för att tillämpa skriptet på klustret.

Tillämpa en skriptåtgärd på ett kluster som körs från Azure PowerShell

Om du vill använda dessa PowerShell-kommandon behöver du AZ-modulen. I följande exempel visas hur du tillämpar en skriptåtgärd på ett kluster som körs:

# 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

När åtgärden är klar får du information som liknar följande text:

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

Tillämpa en skriptåtgärd på ett kluster som körs från Azure CLI

Innan du börjar måste du installera och konfigurera Azure CLI. Kontrollera att du har den senaste versionen. Mer information finns i Installera Azure CLI.

  1. Autentisera till din Azure-prenumeration:

    az login
    
  2. Tillämpa en skriptåtgärd på ett kluster som körs:

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

    Giltiga roller är headnode, workernode, zookeepernode, edgenode. Om skriptet ska tillämpas på flera nodtyper separerar du rollerna med ett blanksteg. Exempel: --roles headnode workernode

    Om du vill spara skriptet lägger du till --persist-on-success. Du kan också spara skriptet senare med hjälp az hdinsight script-action promoteav .

Tillämpa en skriptåtgärd på ett kluster som körs med hjälp av REST API

Se KLUSTER-REST API i Azure HDInsight.

Tillämpa en skriptåtgärd på ett kluster som körs från HDInsight .NET SDK

Ett exempel på hur du använder .NET SDK för att tillämpa skript på ett kluster finns i Tillämpa en skriptåtgärd mot ett Linux-baserat HDInsight-kluster.

Visa historik och flytta upp och degradera skriptåtgärder

Azure-portalen

  1. Logga in på Azure-portalen och leta reda på klustret.

  2. Välj Skriptåtgärder under Inställningar i standardvyn.

  3. En historik över skript för det här klustret visas i avsnittet skriptåtgärder. Den här informationen innehåller en lista över bevarade skript. Följande skärmbild visar att Solr-skriptet har körts i det här klustret. Skärmbilden visar inga bevarade skript.

    Portal script actions submit history.

  4. Välj ett skript från historiken för att visa avsnittet Egenskaper för det här skriptet. Överst på skärmen kan du köra skriptet igen eller höja upp det.

    Script actions properties promote.

  5. Du kan också välja ellipsen ... till höger om poster i avsnittet skriptåtgärder för att utföra åtgärder.

    Persisted script actions delete.

Azure PowerShell

Cmdlet Funktion
Get-AzHDInsightPersistedScriptAction Hämta information om beständiga skriptåtgärder. Den här cmdleten ångrar inte de åtgärder som utförs av ett skript. Den tar bara bort den bevarade flaggan.
Get-AzHDInsightScriptActionHistory Hämta en historik över skriptåtgärder som tillämpas på klustret eller information för ett visst skript.
Set-AzHDInsightPersistedScriptAction Flytta upp en ad hoc skriptåtgärd till en beständiga skriptåtgärd.
Remove-AzHDInsightPersistedScriptAction Degradera en beständiga skriptåtgärd till en ad hoc åtgärd.

Följande exempelskript visar hur du använder cmdletarna för att höja upp och sedan degradera ett skript.

# 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

Kommando beskrivning
az hdinsight script-action delete Tar bort en angiven kvarhållen skriptåtgärd i klustret. Det här kommandot ångrar inte de åtgärder som utförs av ett skript, utan tar bara bort den bevarade flaggan.
az hdinsight script-action execute Kör skriptåtgärder på det angivna HDInsight-klustret.
az hdinsight script-action list Visar en lista över alla beständiga skriptåtgärder för det angivna klustret.
az hdinsight script-action list-execution-history Visar en lista över alla skripts körningshistorik för det angivna klustret.
az hdinsight script-action promote Höjer upp den angivna ad hoc-skriptkörningen till ett beständiga skript.
az hdinsight script-action show-execution-details Hämtar skriptkörningsinformationen för det angivna skriptkörnings-ID:t.

HDInsight .NET SDK

Ett exempel på hur du använder .NET SDK för att hämta skripthistorik från ett kluster, höja upp eller degradera skript finns i Tillämpa en skriptåtgärd mot ett Linux-baserat HDInsight-kluster.

Kommentar

Det här exemplet visar också hur du installerar ett HDInsight-program med hjälp av .NET SDK.

Nästa steg