Personalización de los clústeres de Azure HDInsight mediante acciones de script en Azure

Azure HDInsight proporciona un método de configuración llamado acciones de script, que invoca scripts personalizados para personalizar el clúster. Estos scripts se usan para instalar componentes adicionales y para cambiar los valores de configuración. Las acciones de script pueden usarse durante la creación del clúster o después.

Las acciones de script también pueden publicarse en Azure Marketplace como una aplicación de HDInsight. Para más información sobre aplicaciones de HDInsight, consulte Publicación de una aplicación de HDInsight en Azure Marketplace.

Descripción de las acciones de script

Una acción de script es un script de Bash que se ejecuta en los nodos de un clúster de HDInsight. Estas son algunas características de las acciones de script:

  • El URI de script de Bash (la ubicación para acceder al archivo) debe ser accesible desde el proveedor de recursos de HDInsight y el clúster.

  • A continuación, se proponen varias ubicaciones de almacenamiento posibles:

    • Para los clústeres normales (no ESP):

      • Un blob de una cuenta de Azure Storage que sea la cuenta de almacenamiento principal o adicional del clúster de HDInsight. Durante la creación del clúster se concede acceso a HDInsight a estos dos tipos de cuentas de almacenamiento.

        Importante

        No cambie la clave de almacenamiento de esta cuenta de Azure Storage, ya que causará errores en las acciones de script subsecuentes de los scripts allí almacenados.

      • Data Lake Storage Gen1: La entidad de servicio que HDInsight usa para acceder a Data Lake Storage debe tener acceso de lectura al script. El formato de URI del script de Bash es adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      • No se recomienda el uso de Data Lake Storage Gen2 para las acciones de script. abfs:// no se admite para el URI de script de Bash. https:// Los URI son posibles, pero funcionan para los contenedores que tienen acceso público y el Firewall abierto para el proveedor de recursos de HDInsight, por lo que no se recomienda.

      • Existe un servicio de uso compartido de archivos al que se accede mediante rutas de acceso https://. Algunos ejemplos son Azure Blob, GitHub o OneDrive. Para obtener URI de ejemplo, consulte Ejemplo de scripts de acción de script.

    • En el caso de los clústeres con ESP, se admiten los URI wasb:// o wasbs:// o http[s]://.

  • Las acciones de script se pueden restringir para que se ejecuten solo en determinados tipos de nodos. Algunos ejemplos son los nodos principales o nodos de trabajo.

  • Las acciones de script pueden ser persistentes o ad hoc.

    • Las acciones de scripts persistentes deben tener un nombre único. Los scripts persistentes se usan para personalizar nuevos nodos de trabajo agregados al clúster mediante operaciones de escalado. Un script persistente también puede aplicar cambios a otro tipo de nodo cuando se producen operaciones de escalado. Un ejemplo es un nodo principal.
    • Los scripts ad hoc no son persistentes. Las acciones de script usadas durante la creación de un clúster se guardan automáticamente. No se aplican a los nodos de trabajo agregados al clúster después de la ejecución del script. Posteriormente, un script ad hoc se puede promover a persistente y uno persistente puede disminuirse a ad hoc. Los scripts que dan error no se guardan como persistentes, aunque indique específicamente que así sea.
  • Las acciones del script de comandos pueden aceptar parámetros que usa el script durante la ejecución.

  • Las acciones de script se ejecutan con privilegios de nivel de raíz en los nodos del clúster.

  • Las acciones de script se pueden usar mediante Azure Portal, Azure PowerShell, la CLI de Azure o el SDK de .NET para HDInsight.

  • Las acciones de script que quitan o modifican archivos de servicio en la VM pueden afectar al estado y la disponibilidad del servicio.

El clúster conserva un historial de todos los scripts que se han ejecutado. El historial resulta útil cuando se necesita buscar el identificador de un script para las operaciones de promoción o disminución de nivel.

Importante

No hay ninguna forma automática de deshacer los cambios realizados por una acción de script. Los cambios se revierten de forma manual o se proporciona un script que lo hace.

Permisos

Para un clúster de HDInsight unido a un dominio, necesita dos permisos de Apache Ambari para usar acciones de script con el clúster:

  • AMBARI.RUN_CUSTOM_COMMAND. el rol de administrador de Ambari tiene este permiso de forma predeterminada.
  • CLUSTER.RUN_CUSTOM_COMMAND. el administrador de clústeres de HDInsight y el administrador de Ambari tienen este permiso de forma predeterminada.

Para más información sobre cómo trabajar con permisos con clústeres de HDInsight unidos a un dominio, consulte Administración de clústeres de HDInsight con Enterprise Security Package.

Control de acceso

Si no es el administrador o propietario de la suscripción de Azure, la cuenta debe tener al menos acceso de Contributor al grupo de recursos que contiene el clúster de HDInsight.

Un usuario con al menos acceso de colaborador a la suscripción de Azure debe haber registrado previamente el proveedor. El registro del proveedor se produce cuando un usuario con acceso de colaborador a la suscripción crea un recurso. Para información sobre cómo se realiza este procedimiento sin crear un recurso, consulte cómo registrar un proveedor mediante REST.

Obtenga más información sobre cómo trabajar con la administración de acceso:

Métodos para usar las acciones de los scripts

Tiene la opción de configurar una acción de script para que se ejecute cuando se cree el clúster por primera vez o cuando se ejecute en un clúster existente.

Acción de script en el proceso de creación de clústeres

Las acciones de script usadas durante la creación de un clúster son algo diferentes de las ejecutadas en un clúster existente:

  • El script se guarda automáticamente como persistente.
  • Un error del script puede impedir que el proceso de creación del clúster se efectúe correctamente.

En el siguiente diagrama se ilustra el momento en que la acción de script se ejecuta durante el proceso de creación:

Stages during cluster creation

El script se ejecuta mientras se configura HDInsight. El script se ejecuta de forma paralela en todos los nodos especificados del clúster. Se ejecuta con privilegios raíz en los nodos.

Puede realizar operaciones, como detener e iniciar servicios, incluidos los servicios relacionados con Apache Hadoop. Si detiene servicios, asegúrese de que los servicios de Ambari y otros relacionados con Hadoop estén en ejecución antes de que finalice el script. Estos servicios necesarios determinan el estado del clúster mientras se crea.

Durante la creación del clúster, puede usar diversas acciones de script a la vez. Estos scripts se invocan en el orden en el que se hayan especificado.

Importante

Las acciones de script deben finalizar en 60 minutos o agotarán el tiempo de espera. Durante el aprovisionamiento del clúster, el script se ejecuta a la vez con otros procesos de instalación y configuración. La competición por los recursos, como el ancho de banda de red o el tiempo de CPU, puede ocasionar que el script tarde más en terminar que en el entorno de desarrollo.

Para minimizar el tiempo necesario para ejecutar el script, evite tareas tales como descargar y compilar aplicaciones desde el origen. Compile las aplicaciones previamente y almacene el archivo binario en Azure Storage.

Acción de script en un clúster en ejecución

Un error del script en un clúster ya en ejecución no hace que el clúster cambie automáticamente a un estado de error. Cuando un script finaliza, el clúster debe volver a un estado en ejecución. Aunque el clúster tenga el estado en ejecución, el script erróneo puede haber roto algo. Por ejemplo, un script podría eliminar archivos necesarios para el clúster.

Las acciones de script se ejecutan con privilegios raíz. Asegúrese de que comprende lo que hace un script antes de aplicarlo a un clúster.

Al aplicar un script a un clúster, se cambia el estado del clúster de En ejecución a Aceptado. A continuación, cambia a Configuración de HDInsight y, por último, regresa a En ejecución en el caso de los scripts correctos. El estado del script se registra en el historial de acciones de script. Esta información le indica si el script se ha completado correctamente o no. Por ejemplo, el cmdlet Get-AzHDInsightScriptActionHistory de PowerShell muestra el estado de un script. Devuelve información similar al texto siguiente:

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

Importante

Si cambia la contraseña de usuario (admin) del clúster tras la creación de este, se puede producir un error en las acciones de script ejecutadas en este clúster. Si tiene alguna acción de script persistente cuyo destino sea algún nodo de trabajo, se puede producir un error en este script al escalar el clúster.

Ejemplo de scripts de acción de script

Los scripts de acciones de script se pueden usar con las utilidades siguientes:

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

HDInsight proporciona scripts para instalar los siguientes componentes en clústeres de HDInsight:

Nombre Script
Adición de una cuenta de Azure Storage https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh. Consulte Adición de más cuentas de almacenamiento a HDInsight.
Instalación de Hue https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh. Consulte Instalación y uso de Hue en clústeres de Hadoop para HDInsight.
Carga previa de las bibliotecas de Hive https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh. Consulte Incorporación de bibliotecas personalizadas de Apache Hive al crear el clúster de HDInsight.

Acción de script durante la creación de un clúster

En esta sección se explican las distintas maneras de usar acciones de script al crear un clúster de HDInsight.

Uso de una acción de script durante la creación de un clúster desde Azure Portal

  1. Empiece por crear un clúster según se describe en Creación de clústeres basados en Linux en HDInsight con Azure Portal. En la pestaña Configuración y precios, seleccione + Agregar acción de script.

    Azure portal cluster script action

  2. Use la entrada Seleccione un script para seleccionar un script prefabricado. Para utilizar un script personalizado, seleccione Personalizado. A continuación, proporcione el nombre y el URI de script de Bash del script.

    Add a script in the select script form

    En la siguiente tabla se describen los elementos del formulario:

    Propiedad Value
    Seleccione un script Para utilizar su propio script, seleccione Custom (Personalizado). En caso contrario, seleccione uno de los que se proporcionan.
    Nombre Especifique un nombre para la acción de script.
    URI de script de Bash Especifique el URI del script.
    Head, Worker o ZooKeeper Especifique los nodos en los que se ejecuta el script: Head, Worker o ZooKeeper.
    Parámetros Especifique los parámetros, si lo requiere el script.

    Use la entrada Continuar con esta acción de script para asegurarse de que el script se aplica durante las operaciones de escalado.

  3. Seleccione Crear para guardar el script. Luego puede usar + Enviar nuevo para agregar otro script.

    HDInsight multiple script actions

    Cuando haya terminado de agregar scripts, volverá a la pestaña Configuración y precios.

  4. Complete los pasos de creación del clúster restantes como de costumbre.

Uso de una acción de script desde las plantillas de Azure Resource Manager

Las acciones de script pueden usarse con plantillas de Azure Resource Manager. Para ver un ejemplo, consulte Creación de un clúster de HDInsight Linux y ejecución de una acción de script.

En este ejemplo, la acción de script se agrega utilizando el código siguiente:

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

Obtenga más información sobre cómo implementar una plantilla:

Uso de una acción de script durante la creación de un clúster desde Azure PowerShell

En esta sección, se usa el cmdlet Add-AzHDInsightScriptAction para invocar scripts con el fin de personalizar un clúster. Antes de empezar, asegúrese de instalar y configurar Azure PowerShell. Para usar estos comandos de PowerShell, necesitará el módulo AZ.

El script siguiente muestra cómo aplicar una acción de script al crear un clúster con 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

El clúster puede tardar varios minutos en crearse.

Uso de una acción de script durante la creación de un clúster desde el SDK de .NET para HDInsight

El .NET SDK de HDInsight proporciona bibliotecas de cliente que facilitan el trabajo con HDInsight desde una aplicación .NET. Para obtener un ejemplo de código, vea Acciones de script.

Acción de script a un clúster en ejecución

En esta sección se explica cómo aplicar acciones de script en un clúster en ejecución.

Aplicación de una acción de script a un clúster en ejecución desde Azure Portal

  1. Inicie sesión en Azure Portal y localice su clúster.

  2. En la vista predeterminada, en Configuración, seleccione Acciones de script.

  3. En la parte superior de la página Acciones de script, seleccione + Enviar nuevo.

    Add a script to a running cluster

  4. Use la entrada Seleccione un script para seleccionar un script prefabricado. Para utilizar un script personalizado, seleccione Personalizado. A continuación, proporcione el nombre y el URI de script de Bash del script.

    Add a script in the select script form

    En la siguiente tabla se describen los elementos del formulario:

    Propiedad Value
    Seleccione un script Para utilizar su propio script, seleccione Custom (Personalizado). En caso contrario, seleccione uno de los que se proporcionan.
    Nombre Especifique un nombre para la acción de script.
    URI de script de Bash Especifique el URI del script.
    Head, Worker o ZooKeeper Especifique los nodos en los que se ejecuta el script: Head, Worker o ZooKeeper.
    Parámetros Especifique los parámetros, si lo requiere el script.

    Use la entrada Continuar con esta acción de script para asegurarse de que el script se aplica durante las operaciones de escalado.

  5. Por último, seleccione el botón Crear para aplicar el script al clúster.

Aplicación de una acción de script a un clúster en ejecución desde Azure PowerShell

Para usar estos comandos de PowerShell, necesitará el módulo AZ. El ejemplo siguiente muestra cómo aplicar una acción de script a un clúster en ejecución:

# 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

Una vez terminada la operación, recibirá información similar al siguiente texto:

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

Aplicación de una acción de script a un clúster en ejecución desde la CLI de Azure

Antes de empezar, asegúrese de instalar y configurar la CLI de Azure. Asegúrese de disponer de la versión más reciente. Para más información, consulte Instalación de la CLI de Azure.

  1. Autentíquese en la suscripción de Azure:

    az login
    
  2. Aplique una acción de script a un clúster en ejecución:

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

    Los roles válidos son headnode, workernode, zookeepernode y edgenode. Si el script se debe aplicar a varios tipos de nodo, especifique los roles con espacios. Por ejemplo, --roles headnode workernode.

    Para guardar el script como persistente, agregue --persist-on-success. También puede guardar el script como persistente más adelante mediante az hdinsight script-action promote.

Aplicación de una acción de script a un clúster en ejecución mediante la API de REST

Consulte API de REST del clúster en Azure HDInsight.

Aplicación de una acción de script a un clúster en ejecución desde el SDK de .NET para HDInsight

Si desea ver un ejemplo de uso del SDK de .NET para aplicar scripts a un clúster, consulte cómo aplicar una acción de script en un clúster de HDInsight basado en Linux en ejecución.

Visualización del historial, promoción y disminución de acciones de script

El Portal de Azure

  1. Inicie sesión en Azure Portal y localice su clúster.

  2. En la vista predeterminada, en Configuración, seleccione Acciones de script.

  3. En la sección Acciones de script aparece un historial de scripts de este clúster. Esta información incluye una lista de scripts persistentes. La siguiente captura de pantalla muestra que el script Solr se ha ejecutado en este clúster. La captura de pantalla no muestra ningún script persistente.

    Portal script actions submit history

  4. Seleccione un script del historial para mostrar la sección Propiedades de ese script. Desde la parte superior de la pantalla, puede volver a ejecutar el script o subirlo de nivel.

    Script actions properties promote

  5. También puede usar los puntos suspensivos ( ... ) a la derecha de las entradas de la sección Acciones de script para realizar acciones.

    Persisted script actions delete

Azure PowerShell

cmdlet Función
Get-AzHDInsightPersistedScriptAction Recuperar información sobre acciones de script persistentes. Este cmdlet no deshace las acciones realizadas por un script, solo quita la marca persistente.
Get-AzHDInsightScriptActionHistory Recuperar un historial de acciones de script aplicadas al clúster o detalles de un script específico.
Set-AzHDInsightPersistedScriptAction Promover una acción de script ad hoc a una acción de script persistente.
Remove-AzHDInsightPersistedScriptAction Disminuir de nivel una acción de script persistente a una acción ad hoc.

El siguiente script de ejemplo muestra cómo utilizar los cmdlets para promover y luego disminuir de nivel un 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"

Azure CLI

Get-Help Descripción
az hdinsight script-action delete Elimina una acción de script persistente específica en un clúster determinado. Este comando no deshace las acciones realizadas por un script, solo quita la marca persistente.
az hdinsight script-action execute Ejecución de acciones de script en el clúster de HDInsight especificado.
az hdinsight script-action list Muestra una lista de todas las acciones de script persistentes para el clúster especificado.
az hdinsight script-action list-execution-history Muestra una lista del historial de ejecución de todos los scripts para el clúster especificado.
az hdinsight script-action promote Promueve la ejecución de script ad hoc especificada a un script persistente.
az hdinsight script-action show-execution-details Obtiene los detalles de ejecución del script para el identificador de ejecución de script dado.

SDK .NET de HDInsight

Si desea ver un ejemplo de uso del SDK de .NET para recuperar el historial de scripts de un clúster, o bien promover scripts o disminuir el nivel de estos, consulte cómo aplicar una acción de script en un clúster de HDInsight basado en Linux en ejecución.

Nota

En este ejemplo también se muestra cómo instalar una aplicación de HDInsight mediante el SDK. de NET.

Pasos siguientes