Personalizar clusters do Azure HDInsight com ações de script

O Azure HDInsight fornece um método de configuração chamado ações de script que invocam scripts personalizados para personalizar o cluster. Estes scripts são utilizados para instalar componentes adicionais e alterar as definições de configuração. As ações de script podem ser utilizadas durante ou após a criação do cluster.

As ações de script também podem ser publicadas no Azure Marketplace como uma aplicação do HDInsight. Para obter mais informações sobre aplicações do HDInsight, veja Publish an HDInsight application in the Azure Marketplace (Publicar uma aplicação do HDInsight no Azure Marketplace).

Compreender as ações de script

Uma ação de script é um script bash que é executado nos nós num cluster do HDInsight. As características e as funcionalidades das ações de script são as seguintes:

  • O URI do script bash (a localização para aceder ao ficheiro) tem de estar acessível a partir do fornecedor de recursos do HDInsight e do cluster.

  • Seguem-se possíveis localizações de armazenamento:

    • Para clusters regulares (não ESP):

      • Um blob numa conta de Armazenamento do Azure que é a conta de armazenamento principal ou adicional do cluster do HDInsight. O HDInsight tem acesso a ambos os tipos de contas de armazenamento durante a criação do cluster.

        Importante

        Não rode a chave de armazenamento nesta conta de Armazenamento do Azure, pois fará com que as ações de script subsequentes com scripts aí armazenados falhem.

      • Data Lake Storage Gen1: o principal de serviço que o HDInsight utiliza para aceder Data Lake Storage tem de ter acesso de leitura ao script. O formato URI do script bash é adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      • Data Lake Storage Gen2 não é recomendado utilizar para ações de script. abfs:// não é suportado para o URI do script do Bash. https:// Os URIs são possíveis, mas estes funcionam para contentores com acesso público e a firewall aberta para o Fornecedor de Recursos do HDInsight, pelo que não é recomendada.

      • Um serviço público de partilha de ficheiros acessível através de https:// caminhos. Os exemplos são o Blob do Azure, o GitHub ou o OneDrive. Por exemplo, URIs, veja Scripts de ação de script de exemplo.

    • Para clusters com ESP, o wasb:// ou wasbs:// ou http[s]:// URIs são suportados.

  • As ações de script podem ser restringidas para serem executadas apenas em determinados tipos de nós. Os exemplos são nós principais ou nós de trabalho.

  • As ações do script podem ser persistentes ou ad hoc.

    • As ações de script persistente têm de ter um nome exclusivo. Os scripts persistentes são utilizados para personalizar novos nós de trabalho adicionados ao cluster através de operações de dimensionamento. Um script persistente também pode aplicar alterações a outro tipo de nó quando ocorrem operações de dimensionamento. Um exemplo é um nó principal.
    • Os scripts ad hoc não são persistentes. As ações de script utilizadas durante a criação do cluster são mantidas automaticamente. Não são aplicadas aos nós de trabalho adicionados ao cluster após a execução do script. Em seguida, pode promover um script ad hoc para um script persistente ou despromover um script persistente para um script ad hoc . Os scripts que falham não persistem, mesmo que indique especificamente que devem ser.
  • As ações de script podem aceitar parâmetros que são utilizados pelo script durante a execução.

  • As ações de script são executadas com privilégios ao nível da raiz nos nós do cluster.

  • As ações de script podem ser utilizadas através da portal do Azure, Azure PowerShell, da CLI do Azure ou do SDK .NET do HDInsight.

  • As ações de script que removem ou modificam ficheiros de serviço na VM podem afetar o estado de funcionamento e a disponibilidade do serviço.

O cluster mantém um histórico de todos os scripts que foram executados. O histórico ajuda quando precisa de encontrar o ID de um script para operações de promoção ou despromoção.

Importante

Não existe nenhuma forma automática de anular as alterações efetuadas por uma ação de script. Inverta manualmente as alterações ou forneça um script que as reverta.

Permissões

Para um cluster do HDInsight associado a um domínio, existem duas permissões do Apache Ambari necessárias quando utiliza ações de script com o cluster:

  • AMBARI. RUN_CUSTOM_COMMAND. A função administrador do Ambari tem esta permissão por predefinição.
  • CLUSTER. RUN_CUSTOM_COMMAND. O Administrador de Cluster do HDInsight e o Administrador do Ambari têm esta permissão por predefinição.

Para obter mais informações sobre como trabalhar com permissões com o HDInsight associado a um domínio, veja Manage HDInsight clusters with Enterprise Security Package (Gerir clusters do HDInsight com o Pacote de Segurança Enterprise).

Controlo de acesso

Se não for o administrador ou proprietário da sua subscrição do Azure, a sua conta tem de ter, pelo menos Contributor , acesso ao grupo de recursos que contém o cluster do HDInsight.

Alguém com, pelo menos, o acesso de Contribuidor à subscrição do Azure tem de ter registado o fornecedor anteriormente. O registo do fornecedor ocorre quando um utilizador com acesso de Contribuidor à subscrição cria um recurso. Para sem criar um recurso, veja Registar um fornecedor com REST.

Obtenha mais informações sobre como trabalhar com a gestão de acesso:

Métodos para utilizar ações de script

Tem a opção de configurar uma ação de script para ser executada quando o cluster é criado pela primeira vez ou executá-lo num cluster existente.

Ação de script no processo de criação do cluster

As ações de script utilizadas durante a criação do cluster são ligeiramente diferentes das ações de script executadas num cluster existente:

  • O script é mantido automaticamente.
  • Uma falha no script pode fazer com que o processo de criação do cluster falhe.

O diagrama seguinte ilustra quando a ação do script é executada durante o processo de criação:

Fases durante a criação do cluster

O script é executado enquanto o HDInsight está a ser configurado. O script é executado em paralelo em todos os nós especificados no cluster. É executado com privilégios de raiz nos nós.

Pode realizar operações como parar e iniciar serviços, incluindo serviços relacionados com o Apache Hadoop. Se parar os serviços, certifique-se de que o Ambari e outros serviços relacionados com o Hadoop estão em execução antes de o script ser concluído. Estes serviços necessários determinam o estado de funcionamento e o estado do cluster enquanto está a ser criado.

Durante a criação do cluster, pode utilizar muitas ações de script ao mesmo tempo. Estes scripts são invocados pela ordem em que foram especificados.

Nota

Se o script estiver presente noutra conta de armazenamento que não seja a especificada como armazenamento de clusters (no momento da criação do cluster), será necessário um acesso público.

Importante

As ações de script têm de ser concluídas dentro de 60 minutos ou excedem o tempo limite. Durante o aprovisionamento do cluster, o script é executado em simultâneo com outros processos de configuração e configuração. A concorrência para recursos como o tempo da CPU ou a largura de banda de rede pode fazer com que o script demorou mais tempo a ser concluído do que no seu ambiente de desenvolvimento.

Para minimizar o tempo que demora a executar o script, evite tarefas como transferir e compilar aplicações a partir da origem. Pré-compilar aplicações e armazenar o binário no Armazenamento do Azure.

Ação de script num cluster em execução

Uma falha de script num cluster já em execução não faz com que o cluster mude automaticamente para um estado de falha. Após a conclusão de um script, o cluster deverá regressar a um estado de execução. Mesmo que o cluster tenha um estado de execução, o script com falha pode ter quebrado itens. Por exemplo, um script pode eliminar ficheiros necessários para o cluster.

As ações de scripts são executadas com privilégios de raiz. Certifique-se de que compreende o que um script faz antes de o aplicar ao cluster.

Quando aplica um script a um cluster, o estado do cluster muda de Em Execução para Aceite. Em seguida, muda para a configuração do HDInsight e, por fim, volta a Executar para obter scripts com êxito. O estado do script é registado no histórico de ações do script. Estas informações dizem-lhe se o script foi bem-sucedido ou falhou. Por exemplo, o cmdlet do Get-AzHDInsightScriptActionHistory PowerShell mostra o estado de um script. Devolve informações semelhantes ao seguinte texto:

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

Importante

Se alterar o utilizador do cluster, o administrador, a palavra-passe após a criação do cluster, as ações de script executadas neste cluster poderão falhar. Se tiver alguma ação de script persistente que tenha como destino nós de trabalho, estes scripts poderão falhar quando dimensionar o cluster.

Scripts de ação de script de exemplo

Os scripts de ação de script podem ser utilizados através dos seguintes utilitários:

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

O HDInsight fornece scripts para instalar os seguintes componentes em clusters do HDInsight:

Name Script
Adicionar uma conta de Armazenamento do Azure https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh. Veja Adicionar contas de armazenamento adicionais ao HDInsight.
Instalar Hue https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh. Veja Instalar e utilizar o Hue em clusters do HdInsight Hadoop.
Pré-carregar bibliotecas do Hive https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh. Veja Adicionar bibliotecas personalizadas do Apache Hive ao criar o cluster do HDInsight.

Ação de script durante a criação do cluster

Esta secção explica as diferentes formas de utilizar ações de script quando cria um cluster do HDInsight.

Utilizar uma ação de script durante a criação do cluster a partir do portal do Azure

  1. Comece a criar um cluster conforme descrito em Criar clusters baseados em Linux no HDInsight com o portal do Azure. No separador Configuração + preços , selecione + Adicionar ação de script.

    portal do Azure ação de script de cluster

  2. Utilize a entrada Selecionar um script para selecionar um script pré-criado. Para utilizar um script personalizado, selecione Personalizado. Em seguida, forneça o URI do script Name e Bash para o script.

    Adicionar um script no formulário de script selecionado

    A tabela seguinte descreve os elementos no formulário:

    Propriedade Valor
    Selecionar um script Para utilizar o seu próprio script, selecione Personalizado. Caso contrário, selecione um dos scripts fornecidos.
    Name Especifique um nome para a ação de script.
    Bash script URI Especifique o URI do script.
    Cabeça/Trabalhador/ZooKeeper Especifique os nós nos quais o script é executado: Head, Worker ou ZooKeeper.
    Parâmetros Especifique os parâmetros, se necessário pelo script.

    Utilize a entrada de ação Persistir este script para se certificar de que o script é aplicado durante as operações de dimensionamento.

  3. Selecione Criar para guardar o script. Em seguida, pode utilizar + Submeter novo para adicionar outro script.

    Ações de vários scripts do HDInsight

    Quando terminar de adicionar scripts, regresse ao separador Configuração + preços .

  4. Conclua os restantes passos de criação do cluster, como habitualmente.

Utilizar uma ação de script dos modelos do Azure Resource Manager

As ações de script podem ser utilizadas com modelos de Resource Manager do Azure. Por exemplo, veja Criar Cluster do HDInsight Linux e executar uma ação de script.

Neste exemplo, a ação de script é adicionada com o seguinte código:

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

Obtenha mais informações sobre como implementar um modelo:

Utilizar uma ação de script durante a criação do cluster a partir do Azure PowerShell

Nesta secção, vai utilizar o cmdlet Add-AzHDInsightScriptAction para invocar scripts para personalizar um cluster. Antes de começar, certifique-se de que instala e configura Azure PowerShell. Para utilizar estes comandos do PowerShell, precisa do Módulo AZ.

O script seguinte mostra como aplicar uma ação de script quando cria um cluster com o 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

Pode demorar vários minutos até que o cluster seja criado.

Utilizar uma ação de script durante a criação do cluster a partir do SDK .NET do HDInsight

O SDK .NET do HDInsight fornece bibliotecas de cliente que facilitam o trabalho com o HDInsight a partir de uma aplicação .NET. Para obter um exemplo de código, veja Ações de Script.

Ação de script para um cluster em execução

Esta secção explica como aplicar ações de script num cluster em execução.

Aplicar uma ação de script a um cluster em execução a partir do portal do Azure

  1. Inicie sessão no portal do Azure e localize o cluster.

  2. Na vista predefinida, em Definições, selecione Ações de script.

  3. Na parte superior da página Ações de script , selecione + Submeter novo.

    Adicionar um script a um cluster em execução

  4. Utilize a entrada Selecionar um script para selecionar um script pré-criado. Para utilizar um script personalizado, selecione Personalizado. Em seguida, forneça o URI do script Name e Bash para o script.

    Adicionar um script no formulário de script selecionado

    A tabela seguinte descreve os elementos no formulário:

    Propriedade Valor
    Selecionar um script Para utilizar o seu próprio script, selecione personalizado. Caso contrário, selecione um script fornecido.
    Name Especifique um nome para a ação de script.
    Bash script URI Especifique o URI do script.
    Chefe/Trabalhador/Zookeeper Especifique os nós nos quais o script é executado: Head, Worker ou ZooKeeper.
    Parâmetros Especifique os parâmetros, se necessário pelo script.

    Utilize a entrada de ação Persistir este script para garantir que o script é aplicado durante as operações de dimensionamento.

  5. Por fim, selecione o botão Criar para aplicar o script ao cluster.

Aplicar uma ação de script a um cluster em execução a partir de Azure PowerShell

Para utilizar estes comandos do PowerShell, precisa do Módulo AZ. O exemplo seguinte mostra como aplicar uma ação de script a um cluster em execução:

# 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

Após a conclusão da operação, receberá informações semelhantes ao seguinte texto:

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

Aplicar uma ação de script a um cluster em execução a partir da CLI do Azure

Antes de começar, certifique-se de que instala e configura a CLI do Azure. Certifique-se de que tem a versão mais recente. Para obter mais informações, veja Instalar a CLI do Azure.

  1. Autenticar na sua subscrição do Azure:

    az login
    
  2. Aplicar uma ação de script a um cluster em execução:

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

    As funções válidas são headnode, workernode, zookeepernode, edgenode. Se o script deve ser aplicado a vários tipos de nós, separe as funções por um espaço. Por exemplo, --roles headnode workernode.

    Para manter o script, adicione --persist-on-success. Também pode manter o script mais tarde com az hdinsight script-action promote.

Aplicar uma ação de script a um cluster em execução com a API REST

Veja API REST do Cluster no Azure HDInsight.

Aplicar uma ação de script a um cluster em execução a partir do SDK .NET do HDInsight

Para obter um exemplo de como utilizar o SDK .NET para aplicar scripts a um cluster, veja Aplicar uma Ação de Script num cluster do HDInsight baseado em Linux em execução.

Ver o histórico e promover e despromover ações de script

O portal do Azure

  1. Inicie sessão no portal do Azure e localize o cluster.

  2. Na vista predefinida, em Definições, selecione Ações de script.

  3. É apresentado um histórico de scripts para este cluster na secção de ações de script. Estas informações incluem uma lista de scripts persistentes. A seguinte captura de ecrã mostra que o script Solr foi executado neste cluster. A captura de ecrã não mostra scripts persistentes.

    Histórico de submissões de ações de scripts do portal

  4. Selecione um script do histórico para apresentar a secção Propriedades deste script. Na parte superior do ecrã, pode voltar a executar o script ou promovê-lo.

    Promover propriedades de ações de script

  5. Também pode selecionar as reticências, ..., à direita das entradas na secção de ações do script para realizar ações.

    Eliminação de ações de script persistente

Azure PowerShell

cmdlet Função
Get-AzHDInsightPersistedScriptAction Obtenha informações sobre as ações de script persistente. Este cmdlet não anula as ações realizadas por um script, apenas remove o sinalizador persistente.
Get-AzHDInsightScriptActionHistory Obtenha um histórico de ações de script aplicadas ao cluster ou detalhes de um script específico.
Set-AzHDInsightPersistedScriptAction Promover uma ação de ad hoc script para uma ação de script persistente.
Remove-AzHDInsightPersistedScriptAction Despromover uma ação de script persistente para uma ad hoc ação.

O script de exemplo seguinte demonstra como utilizar os cmdlets para promover e, em seguida, despromover um script.

# Get a history of scripts
Get-AzHDInsightScriptActionHistory -ClusterName mycluster

# From the list, we want to get information on a specific script
Get-AzHDInsightScriptActionHistory -ClusterName mycluster `
    -ScriptExecutionId 635920937765978529

# Promote this to a persisted script
# Note: the script must have a unique name to be promoted
# if the name is not unique, you receive an error
Set-AzHDInsightPersistedScriptAction -ClusterName mycluster `
    -ScriptExecutionId 635920937765978529

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

CLI do Azure

Comando Descrição
az hdinsight script-action delete Elimina uma ação de script persistente especificada do cluster. Este comando não anula as ações efetuadas por um script, apenas remove o sinalizador persistente.
az hdinsight script-action execute Execute ações de script no cluster do HDInsight especificado.
az hdinsight script-action list Lista todas as ações de script persistentes para o cluster especificado.
az hdinsight script-action list-execution-history Lista o histórico de execução de todos os scripts para o cluster especificado.
az hdinsight script-action promote Promove a execução do script ad hoc especificado para um script persistente.
az hdinsight script-action show-execution-details Obtém os detalhes de execução do script para o ID de execução do script especificado.

HDInsight .NET SDK

Para obter um exemplo da utilização do SDK .NET para obter o histórico de scripts de um cluster, promover ou despromover scripts, veja Aplicar uma Ação de Script num cluster do HDInsight baseado em Linux em execução.

Nota

Este exemplo também demonstra como instalar uma aplicação do HDInsight com o SDK .NET.

Passos seguintes