Compartilhar via


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 as configurações. As ações de script podem ser usadas durante ou após a criação do cluster.

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.

Entender as ações de script

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

  • O URI do script Bash (o local para acessar o arquivo) deve ser acessível do provedor de recursos hdInsight e do cluster.

  • Veja a seguir 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 ambos os 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: O principal 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.

      • Não é recomendável usar o Data Lake Storage Gen2 para ações de script. abfs:// não é compatível com o URI de script Bash. https:// Os URIs são possíveis, mas eles 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 meio de https:// caminhos. Os exemplos são Blob do Azure, GitHub ou OneDrive. Para obter exemplos de URIs, confira Exemplos de ações de script.

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

  • As ações de script podem estar restritas à execução somente em determinados tipos de nó. Por exemplo, nós de cabeçalho ou nós de trabalho.

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

    • As ações de script persistentes devem ter um nome exclusivo. 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ó de cabeçalho.
    • Os scripts ad hoc não são persistidos. As ações de script usadas durante a criação do cluster são mantidas automaticamente. Eles não são aplicados a 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 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 de 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 .NET do HDInsight.

  • 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 a ID de um script para operações de promoção ou rebaixamento.

Importante

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

Permissions

Para um cluster HDInsight vinculado 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 do Ambari tem essa permissão por padrão.
  • CLUSTER.RUN_CUSTOM_COMMAND. O Administrador do Cluster HDInsight e o Administrador do Ambari têm essa permissão por padrão.

Para obter mais informações sobre como trabalhar com permissões com HDInsight associado a um domínio, consulte Gerenciar clusters HDInsight com o Enterprise Security Package.

Controle de acesso

Se você não for o administrador ou proprietário da 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 anteriormente o provedor. O registro do provedor ocorre quando um usuário com acesso de Colaborador à assinatura cria um recurso. Pois, sem criar um recurso, consulte registrar um provedor usando REST.

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

Métodos para usar ações de script

Você tem a opção de configurar uma ação de script para executar quando o cluster é criado pela primeira vez ou executá-lo 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 persistente.
  • 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:

Estágios durante a criação do cluster.

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 saúde 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.

Observação

Se o script estiver presente em qualquer outra conta de armazenamento que não seja a 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 elas vão expirar. Durante o provisionamento do cluster, o script é executado simultaneamente com outros processos de instalação e configuração. A concorrência por recursos como tempo de CPU ou largura de banda de rede pode fazer com que o script demorou mais tempo 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 origem. Pré-compilar aplicativos e armazenar 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 seja alterado automaticamente para um estado com falha. Depois que um script for concluído, o cluster deverá retornar a um estado em execução. Mesmo que o cluster esteja em um estado em execução, o script com falha pode apresentar problemas. Por exemplo, um script pode excluir arquivos necessários para o cluster.

As ações de scripts são executadas com privilégios de root. 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 Executar para Aceito. Em seguida, a configuração muda para configuração do HDInsight e, por fim, retorna para o status Execução para scripts bem-sucedidos. O status do script é registrado no histórico de ações de script. Essas informações informam se o script foi bem-sucedido ou falhou. Por exemplo, o cmdlet do Get-AzHDInsightScriptActionHistory 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 o usuário do cluster, o administrador, a senha após a criação do cluster, as ações de script executadas nesse cluster poderão falhar. Se você tiver ações de script persistentes direcionadas a nós de trabalho, esses scripts poderão falhar quando você dimensionar o cluster.

Scripts de ação do de exemplo de script

Scripts de ação de script podem ser usados por meio dos utilitários a seguir:

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

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.

    Ação de script de cluster do portal do Azure.

  2. Use a entrada Selecionar um script para selecionar um script predefinido. Para usar um script personalizado, selecione Personalizado. Em seguida, forneça o Nome e o URI do script Bash para o seu script.

    Adicione um script no formulário de script selecionado.

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

    Propriedade Value
    Selecionar 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.
    URI do script Bash Especifique o URI do script.
    Líder/Operador/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 Persist this script action para garantir que o script seja aplicado durante operações de escalonamento.

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

    Ações múltiplas de script do HDInsight.

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

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

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

Ações de script podem ser usadas com modelos do Azure Resource Manager. Para obter um exemplo, consulte Criar Cluster Linux do 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 de cluster do Azure PowerShell

Nesta seção, você usará o cmdlet Add-AzHDInsightScriptAction para invocar scripts para personalizar um cluster. Antes de começar, instale e configure 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 ao criar 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 de um cluster com o HDInsight .NET SDK

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

Ação de script para um 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 no portal do Azure

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

  2. No modo de exibiçã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.

    Adicione um script a um cluster em execução.

  4. Use a entrada Selecionar um script para selecionar um script predefinido. Para usar um script personalizado, selecione Personalizado. Em seguida, forneça o Nome e o URI do script Bash para o seu script.

    Adicione um script no formulário de script selecionado.

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

    Propriedade Value
    Selecionar 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.
    URI do script Bash Especifique o URI do script.
    Head/Worker/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 Persist this script action para garantir que o script seja aplicado durante operações de escalonamento.

  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 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 da CLI do Azure

Antes de começar, instale e configure a CLI do Azure. Verifique se você tem a versão mais recente. Para obter mais informações, consulte Instalar a CLI do Azure.

  1. Autentique-se na assinatura 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ãoheadnode, workernode, , zookeepernode. edgenode Caso o script deva ser aplicado a vários tipos de nós, separe as funções usando um espaço. Por exemplo, --roles headnode workernode.

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

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

Consulte a API REST do cluster no Azure HDInsight.

Aplicar uma ação de script a um cluster em execução do SDK do .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.

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

O portal do Azure

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

  2. No modo de exibição padrão, em Configurações, selecione Ações de script.

  3. Um histórico de scripts para esse 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 neste cluster. A captura de tela não mostra nenhum script persistente.

    As ações de script do portal enviam o histórico.

  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.

    As propriedades das ações de script promovem.

  5. Também é possível usar as reticências, , à direita das entradas na seção de ações de script para executar ações.

    As ações de script persistentes são excluídas.

Azure PowerShell

cmdlet Função
Get-AzHDInsightPersistedScriptAction Recupere informações sobre ações de script persistentes. Esse cmdlet não desfaz as ações feitas por um script, ele remove apenas 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 ação de script ad hoc para uma ação de script persistente.
Remove-AzHDInsightPersistedScriptAction Rebaixe uma ação persistente de script para uma ação ad hoc.

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

Command Description
az hdinsight script-action delete Exclui uma ação de script persistente especificada do cluster. Esse 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 do script ad hoc especificado a um script persistente.
az hdinsight script-action show-execution-details Obtém os detalhes de execução do script para a ID de execução do script fornecida.

HDInsight .NET SDK

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.

Observação

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

Próximas etapas