Personalizar clusters do Azure HDInsight usando 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. Esses scripts são usados para instalar componentes adicionais e alterar definições de configuração. As ações de script podem ser usadas durante ou após a criação do cluster.

As ações de script também podem ser publicadas no Azure Marketplace como um aplicativo HDInsight. Para obter mais informações sobre aplicativos HDInsight, consulte Publicar um aplicativo HDInsight no Azure Marketplace.

Compreender as ações de script

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

  • O URI do script Bash (o local para acessar o arquivo) deve estar acessível a partir do provedor de recursos do HDInsight e do cluster.

  • Os seguintes são os possíveis locais de armazenamento:

    • Para clusters regulares (não ESP):

      • Um blob em uma conta de Armazenamento do Azure que é a conta de armazenamento principal ou adicional para o cluster HDInsight. O HDInsight recebe acesso a esses dois tipos de contas de armazenamento durante a criação do cluster.

        Importante

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

      • Data Lake Storage Gen1: A entidade de serviço que o HDInsight usa para acessar o Data Lake Storage deve ter acesso de leitura ao script. O formato URI do script Bash é adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      • O Data Lake Storage Gen2 não é recomendado para uso em ações de script. abfs:// não é suportado para o URI do script Bash. https:// Os URIs são possíveis, mas funcionam para contêineres que têm acesso público e o firewall é aberto para o Provedor de Recursos do HDInsight e, portanto, não é recomendado.

      • Um serviço público de compartilhamento de arquivos acessível por caminhos https:// . Exemplos são o Blob do Azure, o GitHub ou o OneDrive. Por exemplo, URIs, consulte Exemplos de scripts de ação de script.

    • Para clusters com ESP, há suporte para o wasb:// ou wasbs://http[s]:// ou URIs.

  • As ações de script podem ser restritas para execução em apenas determinados tipos de nó. Exemplos são nós principais ou nós de trabalho.

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

    • As ações de script persistentes devem ter um nome exclusivo. Os scripts persistentes são usados para personalizar novos nós de trabalho adicionados ao cluster por meio 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 usadas durante a criação do cluster são persistidas automaticamente. Eles não são aplicados aos nós de trabalho adicionados ao cluster após a execução do script. Em seguida, você pode promover um script ad hoc para um script persistente ou rebaixar um script persistente para um script ad hoc . Os scripts que falham não são persistentes, mesmo que você indique especificamente que eles devem ser.
  • As ações de script podem aceitar parâmetros que são usados pelo script durante a execução.

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

  • As ações de script podem ser usadas por meio do portal do Azure, do Azure PowerShell, da CLI do Azure ou do SDK do HDInsight .NET.

  • As ações de script que removem ou modificam arquivos de serviço na VM podem afetar a integridade 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 você precisa encontrar o ID de um script para operações de promoção ou rebaixamento.

Importante

Não há uma maneira automática de desfazer as alterações feitas por uma ação de script. Inverta manualmente as alterações ou forneça um script que as reverta.

Permissões

Para um cluster HDInsight associado a um domínio, há duas permissões do Apache Ambari que são necessárias quando você usa ações de script com o cluster:

  • AMBARI. RUN_CUSTOM_COMMAND. A função Administrador Ambari tem essa permissão por padrão.
  • AGLOMERAÇÃO. RUN_CUSTOM_COMMAND. Tanto o Administrador de Cluster HDInsight quanto o Administrador Ambari têm essa permissão por padrão.

Para obter mais informações sobre como trabalhar com permissões com o HDInsight associado a um domínio, consulte Gerenciar clusters HDInsight com o Pacote de Segurança Empresarial.

Controlo de acesso

Se você não for o administrador ou proprietário de sua assinatura do Azure, sua conta deverá ter pelo menos Contributor acesso ao grupo de recursos que contém o cluster HDInsight.

Alguém com pelo menos acesso de Colaborador à assinatura do Azure deve ter registrado previamente o provedor. O registro do provedor acontece quando um usuário com acesso de Colaborador à assinatura cria um recurso. Para sem criar um recurso, consulte registrar um provedor usando REST.

Obtenha mais informações sobre como trabalhar com gerenciamento de acesso:

Métodos para usar ações de script

Você tem a opção de configurar uma ação de script para ser executada quando o cluster é criado pela primeira vez ou executá-la em um cluster existente.

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

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

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

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

Stages during cluster creation.

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

Você pode fazer operações como parar e iniciar serviços, incluindo serviços relacionados ao Apache Hadoop. Se você parar os serviços, verifique se o Ambari e outros serviços relacionados ao Hadoop estão em execução antes que o script seja concluído. Esses serviços necessários determinam a integridade e o estado do cluster enquanto ele está sendo criado.

Durante a criação do cluster, você pode usar muitas ações de script ao mesmo tempo. Esses scripts são invocados na ordem em que foram especificados.

Nota

Se o script estiver presente em qualquer outra conta de armazenamento diferente da especificada como armazenamento de cluster (no momento da criação do cluster), isso precisará de um acesso público.

Importante

As ações de script devem ser concluídas dentro de 60 minutos, ou atingem o tempo limite. Durante o provisionamento de cluster, o script é executado simultaneamente com outros processos de instalação e configuração. A competição por recursos como tempo de CPU ou largura de banda de rede pode fazer com que o script demore mais para ser concluído do que em seu ambiente de desenvolvimento.

Para minimizar o tempo necessário para executar o script, evite tarefas como baixar e compilar aplicativos da fonte. Pré-compile aplicativos e armazene o binário no Armazenamento do Azure.

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

Uma falha de script em um 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 deve retornar a um estado de execução. Mesmo que o cluster tenha um estado em execução, o script com falha pode ter quebrado as coisas. Por exemplo, um script pode excluir arquivos necessários para o cluster.

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

Quando você aplica um script a um cluster, o estado do cluster muda de Em execução para Aceito. Em seguida, ele muda para a configuração do HDInsight e, finalmente, volta para Executando para scripts bem-sucedidos. O status do script é registrado no histórico de ações do script. Essas informações informam se o script foi bem-sucedido ou falhou. Por exemplo, o Get-AzHDInsightScriptActionHistory cmdlet do PowerShell mostra o status de um script. Ele retorna 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 você alterar a senha de usuário, administrador e administrador do cluster após a criação do cluster, as ações de script executadas nesse cluster poderão falhar. Se você tiver alguma ação de script persistente direcionada a nós de trabalho, esses scripts poderão falhar quando você dimensionar o cluster.

Exemplos de scripts de ação de script

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

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

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

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

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

Esta seção explica as diferentes maneiras de usar ações de script ao criar um cluster HDInsight.

Usar uma ação de script durante a criação do cluster no portal do Azure

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

    Azure portal cluster script action.

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

    Add a script in the select script form.

    A tabela a seguir descreve os elementos no formulário:

    Property valor
    Selecione um script Para usar seu próprio script, selecione Personalizado. Caso contrário, selecione um dos scripts fornecidos.
    Nome 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 exigido pelo script.

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

  3. Selecione Criar para salvar o script. Em seguida, você pode usar + Enviar novo para adicionar outro script.

    HDInsight multiple script actions.

    Quando terminar de adicionar scripts, você retornará à guia Configuração + preço .

  4. Conclua as etapas restantes de criação do cluster como de costume.

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

As ações de script podem ser usadas com modelos do Azure Resource Manager. Para obter um exemplo, consulte Criar cluster Linux HDInsight e executar uma ação de script.

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

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

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

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

Nesta seção, você usa o cmdlet Add-AzHDInsightScriptAction para invocar scripts para personalizar um cluster. Antes de começar, certifique-se de instalar e configurar o Azure PowerShell. Para usar esses comandos do PowerShell, você precisa do módulo AZ.

O script a seguir mostra como aplicar uma ação de script quando você cria um cluster usando 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 levar vários minutos até que o cluster seja criado.

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

O SDK do HDInsight .NET fornece bibliotecas de cliente que facilitam o trabalho com o HDInsight a partir de um aplicativo .NET. Para obter um exemplo de código, consulte Ações de script.

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

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

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

  1. Entre no portal do Azure e localize seu cluster.

  2. Na visualização padrão, em Configurações, selecione Ações de script.

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

    Add a script to a running cluster.

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

    Add a script in the select script form.

    A tabela a seguir descreve os elementos no formulário:

    Property valor
    Selecione um script Para usar seu próprio script, selecione personalizado. Caso contrário, selecione um script fornecido.
    Nome Especifique um nome para a ação de script.
    Bash script URI Especifique o URI do script.
    Chefe/Trabalhador/Zootecnista Especifique os nós nos quais o script é executado: Head, Worker ou ZooKeeper.
    Parâmetros Especifique os parâmetros, se exigido pelo script.

    Use a entrada de ação Persistir este script para garantir que o script seja 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 do Azure PowerShell

Para usar esses comandos do PowerShell, você precisa do módulo AZ. O exemplo a seguir 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, você 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 instalar e configurar a CLI do Azure. Certifique-se de ter a versão mais recente. Para obter mais informações, consulte Instalar a CLI do Azure.

  1. Autentique-se na sua subscrição do Azure:

    az login
    
  2. Aplique 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ó, separe as funções por um espaço. Por exemplo, --roles headnode workernode.

    Para persistir o script, adicione --persist-on-success. Você também pode persistir o script posteriormente usando az hdinsight script-action promote.

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

Consulte API REST de 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 usar o SDK do .NET para aplicar scripts a um cluster, consulte Aplicar uma ação de script em um cluster HDInsight baseado em Linux em execução.

Exibir histórico e promover e rebaixar ações de script

O portal do Azure

  1. Entre no portal do Azure e localize seu cluster.

  2. Na visualização padrão, em Configurações, selecione Ações de script.

  3. Um histórico de scripts para este cluster é exibido na seção de ações de script. Essas informações incluem uma lista de scripts persistentes. A captura de tela a seguir mostra que o script Solr foi executado nesse cluster. A captura de tela não mostra nenhum script persistente.

    Portal script actions submit history.

  4. Selecione um script no histórico para exibir a seção Propriedades desse script. Na parte superior da tela, você pode executar novamente o script ou promovê-lo.

    Script actions properties promote.

  5. Você também pode selecionar as reticências, ..., à direita das entradas na seção de ações de script para executar ações.

    Persisted script actions delete.

Azure PowerShell

cmdlet Function
Get-AzHDInsightPersistedScriptAction Recupere informações sobre ações de script persistentes. Este cmdlet não desfaz as ações feitas por um script, apenas remove o sinalizador persistente.
Get-AzHDInsightScriptActionHistory Recupere um histórico de ações de script aplicadas ao cluster ou detalhes de um script específico.
Set-AzHDInsightPersistedScriptAction Promova uma ad hoc ação de script para uma ação de script persistente.
Remove-AzHDInsightPersistedScriptAction Rebaixar uma ação de script persistente para uma ad hoc ação.

O script de exemplo a seguir demonstra o uso dos cmdlets para promover e, em seguida, rebaixar 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 Description
az hdinsight script-action delete Exclui uma ação de script persistente especificada do cluster. Este comando não desfaz as ações feitas por um script, apenas remove o sinalizador persistente.
az hdinsight script-action execute Execute ações de script no cluster 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 de script ad hoc especificada para um script persistente.
az hdinsight script-action show-execution-details Obtém o detalhe de execução do script para a ID de execução do script fornecida.

SDK de .NET do HDInsight

Para obter um exemplo de como usar o SDK do .NET para recuperar o histórico de scripts de um cluster, promover ou rebaixar scripts, consulte Aplicar uma ação de script em um cluster HDInsight baseado em Linux em execução.

Nota

Este exemplo também demonstra como instalar um aplicativo HDInsight usando o SDK do .NET.

Próximos passos