Přizpůsobení clusterů Azure HDInsight pomocí akcí skriptu

Azure HDInsight poskytuje metodu konfigurace označovanou jako akce skriptu, které vyvolávají vlastní skripty pro přizpůsobení clusteru. Tyto skripty slouží k instalaci dalších komponent a změně nastavení konfigurace. Akce skriptu je možné použít během vytváření clusteru nebo po jeho vytvoření.

Akce skriptů je také možné publikovat na Azure Marketplace jako aplikaci HDInsight. Další informace o aplikacích HDInsight najdete v tématu Publikování aplikace HDInsight na Azure Marketplace.

Principy akcí skriptů

Akce skriptu je skript Bash, který běží na uzlech v clusteru HDInsight. Charakteristiky a funkce akcí skriptu jsou následující:

  • Identifikátor URI skriptu Bash (umístění pro přístup k souboru) musí být přístupný od poskytovatele prostředků HDInsight a clusteru.

  • Tady jsou možná umístění úložiště:

    • Pro běžné clustery (mimo ESP):

      • Objekt blob v účtu azure Storage, který je primárním nebo dalším účtem úložiště pro cluster HDInsight. Služba HDInsight má během vytváření clusteru udělený přístup k oběma těmto typům účtů úložiště.

        Důležité

        Neměňte klíč úložiště v tomto účtu Azure Storage, protože způsobí selhání následných akcí skriptu se skripty uloženými v tomto účtu.

      • Data Lake Storage Gen1: Instanční objekt HDInsight používá pro přístup ke službě Data Lake Storage přístup pro čtení ke skriptu. Formát identifikátoru URI skriptu Bash je adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      • Data Lake Storage Gen2 se nedoporučuje používat pro akce skriptu. abfs:// není podporován pro identifikátor URI skriptu Bash. https:// Identifikátory URI jsou možné, ale ty fungují pro kontejnery, které mají veřejný přístup, a bránu firewall otevřenou pro poskytovatele prostředků HDInsight, a proto se nedoporučuje.

      • Veřejná služba pro sdílení souborů přístupná prostřednictvím https:// cest. Příklady jsou Azure Blob, GitHub nebo OneDrive. Například identifikátory URI najdete v části Ukázkové skriptovací skripty.

    • Pro clustery s ESP wasb:// se podporují identifikátory URI nebo wasbs://http[s]:// identifikátory URI.

  • Akce skriptu je možné omezit tak, aby běžely pouze na určitých typech uzlů. Příklady jsou hlavní uzly nebo pracovní uzly.

  • Akce skriptu mohou být trvalé nebo ad hoc.

    • Trvalé akce skriptu musí mít jedinečný název. Trvalé skripty se používají k přizpůsobení nových pracovních uzlů přidaných do clusteru prostřednictvím operací škálování. Při provádění operací škálování může trvalý skript také použít změny jiného typu uzlu. Příkladem je hlavní uzel.
    • Ad hoc skripty se neuchovávají. Akce skriptu použité při vytváření clusteru se automaticky uchovávají. Po spuštění skriptu se nepoužijí na pracovní uzly přidané do clusteru. Potom můžete upřednostnit ad hoc skript na trvalý skript nebo snížit úroveň trvalého skriptu na ad hoc skript. Skripty, které selžou, se neuchovávají, i když výslovně naznačujete, že by měly být.
  • Akce skriptu mohou přijímat parametry, které skript používá během provádění.

  • Akce skriptů se spouštějí s oprávněními kořenové úrovně na uzlech clusteru.

  • Akce skriptů je možné použít prostřednictvím webu Azure Portal, Azure PowerShellu, Azure CLI nebo sady .NET SDK služby HDInsight.

  • Akce skriptu, které odeberou nebo upravují soubory služby na virtuálním počítači, můžou mít vliv na stav a dostupnost služby.

Cluster uchovává historii všech spuštěných skriptů. Historie pomáhá, když potřebujete najít ID skriptu pro operace povýšení nebo snížení úrovně.

Důležité

Neexistuje žádný automatický způsob, jak vrátit zpět změny provedené akcí skriptu. Buď ručně převrácení změn, nebo zadejte skript, který je obrátí.

Oprávnění

V případě clusteru HDInsight připojeného k doméně existují dvě oprávnění Apache Ambari, která se vyžadují při použití akcí skriptu s clusterem:

  • AMBARI. RUN_CUSTOM_COMMAND. Role Ambari Správa istrator má ve výchozím nastavení toto oprávnění.
  • CLUSTERU. RUN_CUSTOM_COMMAND. Cluster HDInsight Správa istrator i Ambari Správa istrator mají ve výchozím nastavení toto oprávnění.

Další informace o práci s oprávněními s HDInsight připojenými k doméně najdete v tématu Správa clusterů HDInsight s balíčkem zabezpečení podniku.

Řízení přístupu

Pokud nejste správcem nebo vlastníkem předplatného Azure, váš účet musí mít alespoň Contributor přístup ke skupině prostředků, která obsahuje cluster HDInsight.

Někdo s alespoň přístupem přispěvatele k předplatnému Azure musí mít dříve zaregistrovaného poskytovatele. Registrace zprostředkovatele nastane, když uživatel s přístupem přispěvatele k předplatnému vytvoří prostředek. Informace o bez vytvoření prostředku najdete v tématu Registrace poskytovatele pomocí rest.

Získejte další informace o práci se správou přístupu:

Metody použití akcí skriptu

Máte možnost nakonfigurovat akci skriptu, která se má spustit při prvním vytvoření clusteru nebo spuštění v existujícím clusteru.

Akce skriptu v procesu vytváření clusteru

Akce skriptů používané při vytváření clusteru se mírně liší od akcí skriptů spuštěných v existujícím clusteru:

  • Skript se automaticky zachová.
  • Selhání ve skriptu může způsobit selhání procesu vytváření clusteru.

Následující diagram znázorňuje, kdy se akce skriptu spustí během procesu vytváření:

Stages during cluster creation.

Skript se spustí, když se konfiguruje HDInsight. Skript běží paralelně na všech zadaných uzlech v clusteru. Běží s kořenovými oprávněními na uzlech.

Můžete provádět operace, jako je zastavení a spouštění služeb, včetně služeb souvisejících s Apache Hadoopem. Pokud zastavíte služby, před dokončením skriptu se ujistěte, že jsou spuštěné služby související s Ambari a dalšími službami Hadoop. Tyto požadované služby určují stav a stav clusteru při jeho vytváření.

Během vytváření clusteru můžete použít mnoho akcí skriptů najednou. Tyto skripty jsou vyvolány v pořadí, v jakém byly zadány.

Poznámka:

Pokud se skript nachází v jiném účtu úložiště, než je určené jako úložiště clusteru (v době vytvoření clusteru), který bude potřebovat veřejný přístup.

Důležité

Akce skriptu se musí dokončit do 60 minut nebo vyprší jejich časový limit. Během zřizování clusteru se skript spouští souběžně s jinými procesy instalace a konfigurace. Konkurence pro prostředky, jako je čas procesoru nebo šířka pásma sítě, může způsobit, že dokončení skriptu trvá déle, než to dělá ve vývojovém prostředí.

Abyste minimalizovali dobu potřebnou ke spuštění skriptu, vyhněte se úlohám, jako je stahování a kompilace aplikací ze zdroje. Aplikace předkompilování a uložení binárního souboru ve službě Azure Storage

Akce skriptu ve spuštěném clusteru

Selhání skriptu v již spuštěném clusteru automaticky nezpůsobí, že se cluster změní na stav selhání. Po dokončení skriptu by se cluster měl vrátit do spuštěného stavu. I když má cluster spuštěný stav, může se stát, že selhal skript. Skript může například odstranit soubory, které cluster potřebuje.

Akce skriptů se spouštějí s kořenovými oprávněními. Než skript použijete pro cluster, ujistěte se, že rozumíte tomu, co skript dělá.

Když na cluster použijete skript, stav clusteru se změní ze Spuštěno na Přijato. Potom se změní na konfiguraci HDInsight a nakonec se vrátíte zpět na Spuštěno pro úspěšné skripty. Stav skriptu se zaprotokoluje v historii akcí skriptu. Tyto informace vám říkají, jestli byl skript úspěšný nebo neúspěšný. Například rutina PowerShellu Get-AzHDInsightScriptActionHistory zobrazuje stav skriptu. Vrátí informace podobné následujícímu textu:

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

Důležité

Pokud změníte uživatele clusteru, správce, heslo po vytvoření clusteru, akce skriptu se spouštějí na tomto clusteru můžou selhat. Pokud máte nějaké trvalé akce skriptu, které cílí na pracovní uzly, tyto skripty můžou selhat při škálování clusteru.

Ukázkové skriptovací skripty

Skripty akcí skriptu je možné použít pomocí následujících nástrojů:

  • portál Azure
  • Azure PowerShell
  • Azure CLI
  • Sada HDInsight .NET SDK

HDInsight poskytuje skripty pro instalaci následujících komponent do clusterů HDInsight:

Název Skript
Přidání účtu Azure Storage https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh. Viz Přidání dalších účtů úložiště do SLUŽBY HDInsight.
Instalace rozhraní Hue https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh. Viz Instalace a použití Hue v clusterech HDInsight Hadoop.
Předběžné načtení knihoven Hive https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh. Viz Přidání vlastních knihoven Apache Hive při vytváření clusteru HDInsight.

Akce skriptu během vytváření clusteru

Tato část vysvětluje různé způsoby použití akcí skriptů při vytváření clusteru HDInsight.

Použití akce skriptu při vytváření clusteru z webu Azure Portal

  1. Začněte vytvářet cluster, jak je popsáno v tématu Vytvoření clusterů založených na Linuxu ve službě HDInsight pomocí webu Azure Portal. Na kartě Konfigurace a ceny vyberte + Přidat akci skriptu.

    Azure portal cluster script action.

  2. Pomocí položky Vybrat skript vyberte předem připravený skript. Pokud chcete použít vlastní skript, vyberte Vlastní. Pak zadejte identifikátor URI skriptu Name a Bash pro váš skript.

    Add a script in the select script form.

    Následující tabulka popisuje prvky ve formuláři:

    Vlastnost Hodnota
    Výběr skriptu Pokud chcete použít vlastní skript, vyberte Vlastní. V opačném případě vyberte jeden ze zadaných skriptů.
    Název Zadejte název akce skriptu.
    Identifikátor URI skriptu Bash Zadejte identifikátor URI skriptu.
    Vedoucí/pracovník/ZooKeeper Zadejte uzly, na kterých se skript spouští: Head, Worker nebo ZooKeeper.
    Parametry V případě potřeby skriptu zadejte parametry.

    Pomocí položky Akce Zachovat tento skript se ujistěte, že se skript použije během operací škálování.

  3. Výběrem možnosti Vytvořit uložte skript. Potom můžete pomocí + Odeslat nový přidat další skript.

    HDInsight multiple script actions.

    Po přidání skriptů se vrátíte na kartu Konfigurace a ceny .

  4. Dokončete zbývající kroky vytváření clusteru obvyklým způsobem.

Použití akce skriptu ze šablon Azure Resource Manageru

Akce skriptů je možné použít se šablonami Azure Resource Manageru. Příklad najdete v tématu Vytvoření clusteru HDInsight Linux a spuštění akce skriptu.

V tomto příkladu se akce skriptu přidá pomocí následujícího kódu:

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

Získejte další informace o tom, jak nasadit šablonu:

Použití akce skriptu během vytváření clusteru z Azure PowerShellu

V této části použijete rutinu Add-AzHDInsightScriptAction k vyvolání skriptů pro přizpůsobení clusteru. Než začnete, ujistěte se, že jste nainstalovali a nakonfigurovali Azure PowerShell. K použití těchto příkazů PowerShellu potřebujete modul AZ.

Následující skript ukazuje, jak použít akci skriptu při vytváření clusteru pomocí PowerShellu:

# 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

Vytvoření clusteru může trvat několik minut.

Použití akce skriptu při vytváření clusteru ze sady HDInsight .NET SDK

Sada HDInsight .NET SDK poskytuje klientské knihovny, které usnadňují práci se službou HDInsight z aplikace .NET. Ukázku kódu najdete v tématu Akce skriptu.

Akce skriptu pro spuštěný cluster

Tato část vysvětluje, jak použít akce skriptů ve spuštěném clusteru.

Použití akce skriptu na spuštěný cluster z webu Azure Portal

  1. Přihlaste se k webu Azure Portal a vyhledejte svůj cluster.

  2. Ve výchozím zobrazení v části Nastavení vyberte Akce skriptu.

  3. V horní části stránky Akce skriptu vyberte + Odeslat nový.

    Add a script to a running cluster.

  4. Pomocí položky Vybrat skript vyberte předem připravený skript. Pokud chcete použít vlastní skript, vyberte Vlastní. Pak zadejte identifikátor URI skriptu Name a Bash pro váš skript.

    Add a script in the select script form.

    Následující tabulka popisuje prvky ve formuláři:

    Vlastnost Hodnota
    Výběr skriptu Pokud chcete použít vlastní skript, vyberte vlastní. V opačném případě vyberte zadaný skript.
    Název Zadejte název akce skriptu.
    Identifikátor URI skriptu Bash Zadejte identifikátor URI skriptu.
    Vedoucí/pracovník/zookeeper Zadejte uzly, na kterých se skript spouští: Head, Worker nebo ZooKeeper.
    Parametry V případě potřeby skriptu zadejte parametry.

    Pomocí položky Akce Zachovat tento skript ověřte, že se skript použije během operací škálování.

  5. Nakonec vyberte tlačítko Vytvořit , aby se skript použil na cluster.

Použití akce skriptu na spuštěný cluster z Azure PowerShellu

K použití těchto příkazů PowerShellu potřebujete modul AZ. Následující příklad ukazuje, jak použít akci skriptu na spuštěný 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

Po dokončení operace se zobrazí podobné informace jako v následujícím textu:

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

Použití akce skriptu na spuštěný cluster z Azure CLI

Než začnete, ujistěte se, že jste nainstalovali a nakonfigurovali Azure CLI. Ujistěte se, že máte nejnovější verzi. Další informace najdete v tématu Instalace Azure CLI.

  1. Ověřte se ve svém předplatném Azure:

    az login
    
  2. Použití akce skriptu na spuštěný cluster:

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

    Platné role jsou headnode, workernode, zookeepernode, edgenode. Pokud se má skript použít u několika typů uzlů, oddělte role mezerou. Například --roles headnode workernode.

    Chcete-li zachovat skript, přidejte --persist-on-success. Skript můžete také později zachovat pomocí .az hdinsight script-action promote

Použití akce skriptu na spuštěný cluster pomocí rozhraní REST API

Viz rozhraní REST API clusteru ve službě Azure HDInsight.

Použití akce skriptu na spuštěný cluster ze sady HDInsight .NET SDK

Příklad použití sady .NET SDK k použití skriptů v clusteru najdete v tématu Použití akce skriptu pro spuštěný cluster HDInsight se systémem Linux.

Zobrazení historie a zvýšení úrovně akcí skriptů a snížení úrovně

Azure Portal

  1. Přihlaste se k webu Azure Portal a vyhledejte svůj cluster.

  2. Ve výchozím zobrazení v části Nastavení vyberte Akce skriptu.

  3. V části Akce skriptu se zobrazí historie skriptů pro tento cluster. Tyto informace zahrnují seznam trvalých skriptů. Následující snímek obrazovky ukazuje, že se v tomto clusteru spustil skript Solr. Snímek obrazovky nezobrazuje žádné trvalé skripty.

    Portal script actions submit history.

  4. Vyberte skript z historie a zobrazte oddíl Vlastnosti pro tento skript. V horní části obrazovky můžete skript spustit znovu nebo ho zvýšit jeho úroveň.

    Script actions properties promote.

  5. Můžete také vybrat tři tečky, ..., napravo od položek v oddílu akcí skriptu provádět akce.

    Persisted script actions delete.

Azure PowerShell

Rutina Function
Get-AzHDInsightPersistedScriptAction Načtěte informace o trvalých akcích skriptu. Tato rutina neodstraní akce provedené skriptem, odebere pouze trvalý příznak.
Get-AzHDInsightScriptActionHistory Načtěte historii akcí skriptů použitých v clusteru nebo podrobnosti pro konkrétní skript.
Set-AzHDInsightPersistedScriptAction ad hoc Zvýšení úrovně akce skriptu na trvalou akci skriptu
Remove-AzHDInsightPersistedScriptAction Snížení úrovně trvalé akce skriptu na ad hoc akci

Následující ukázkový skript ukazuje použití rutin k povýšení a snížení úrovně skriptu.

# 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

Příkaz Popis
az hdinsight script-action delete Odstraní zadanou trvalou akci skriptu clusteru. Tento příkaz neodstraní akce provedené skriptem, odebere pouze trvalý příznak.
az hdinsight script-action execute Provádění akcí skriptu v zadaném clusteru HDInsight
az hdinsight script-action list Zobrazí seznam všech trvalých akcí skriptu pro zadaný cluster.
az hdinsight script-action list-execution-history Zobrazí seznam historie spuštění všech skriptů pro zadaný cluster.
az hdinsight script-action promote Podporuje provádění zadaných ad hoc skriptů na trvalý skript.
az hdinsight script-action show-execution-details Získá podrobnosti o spuštění skriptu pro dané ID spuštění skriptu.

Sada HDInsight .NET SDK

Příklad použití sady .NET SDK k načtení historie skriptů z clusteru, zvýšení úrovně nebo snížení úrovně skriptů najdete v tématu Použití akce skriptu pro spuštěný cluster HDInsight se systémem Linux.

Poznámka:

Tento příklad také ukazuje, jak nainstalovat aplikaci HDInsight pomocí sady .NET SDK.

Další kroky