Uso de Azure PowerShell para crear clústeres de HDInsight con Azure Data Lake Storage Gen1 (como almacenamiento adicional)

Aprenda a usar Azure PowerShell para configurar un clúster de HDInsight con Azure Data Lake Storage Gen1, como almacenamiento adicional. Para obtener instrucciones acerca de cómo crear un clúster de HDInsight con Data Lake Storage Gen1 como almacenamiento predeterminado, consulte Creación de un clúster de HDInsight con Data Lake Storage Gen1 mediante Azure PowerShell.

Nota

Si va a usar Data Lake Storage Gen1 como almacenamiento adicional para un clúster de HDInsight, se recomienda encarecidamente hacer esto al crear el clúster como se describe en este artículo. La adición de Data Lake Storage Gen1 como almacenamiento adicional a un clúster de HDInsight existente es un proceso complicado y en la que es fácil que se produzcan errores.

Para los tipos de clúster compatibles, Data Lake Storage Gen1 se puede usar como un almacenamiento predeterminado o una cuenta de almacenamiento adicional. Cuando se usa Data Lake Storage Gen1 como almacenamiento adicional, la cuenta de almacenamiento predeterminada para los clústeres seguirá siendo Azure Blob Storage (WASB) y los archivos relacionados con clústeres (como registros, etc.) seguirán escribiéndose en el almacenamiento predeterminado, mientras que los datos que quiere procesar pueden almacenarse en una instancia de Data Lake Storage Gen1. Utilizar Data Lake Storage Gen1 como una cuenta de almacenamiento adicional no afecta al rendimiento ni a la capacidad de lectura y escritura en el almacenamiento del clúster.

Uso de Data Lake Storage Gen1 para el almacenamiento de clústeres de HDInsight

Estas son algunos puntos importantes que se deben tener en cuenta al usar HDInsight con Data Lake Storage Gen1:

  • La opción para crear clústeres de HDInsight con acceso a Data Lake Storage Gen1 como almacenamiento está disponible para las versiones 3.2, 3.4, 3.5 y 3.6 de HDInsight.

La configuración de HDInsight para trabajar con Data Lake Storage Gen1 mediante PowerShell consta de los pasos siguientes:

  • Creación de una cuenta de Data Lake Storage Gen1
  • Configuración de la autenticación para el acceso basado en roles a Data Lake Storage Gen1
  • Creación de un clúster de HDInsight con autenticación en Data Lake Storage Gen1
  • Ejecución de un trabajo de prueba en el clúster

Requisitos previos

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Antes de empezar este tutorial, debe contar con lo siguiente:

  • Una suscripción de Azure. Consulte Obtención de una versión de evaluación gratuita.

  • Azure PowerShell 1.0 o versiones posteriores. Consulte Instalación y configuración de Azure PowerShell.

  • Windows SDK. Se puede instalar desde aquí. Úselo para crear un certificado de seguridad.

  • Microsoft Entra entidad de servicio. Los pasos de este tutorial proporcionan instrucciones sobre cómo crear una entidad de servicio en Microsoft Entra ID. Sin embargo, debe ser un administrador de Microsoft Entra para poder crear una entidad de servicio. Si es administrador de Microsoft Entra, puede omitir este requisito previo y continuar con el tutorial.

    Si no es administrador de Microsoft Entra, no podrá realizar los pasos necesarios para crear una entidad de servicio. En tal caso, el administrador de Microsoft Entra debe crear primero una entidad de servicio para poder crear un clúster de HDInsight con Data Lake Storage Gen1. Además, la entidad de servicio debe crearse con un certificado, tal y como se describe en Creación de una entidad de servicio.

Creación de una cuenta de Data Lake Storage Gen1

Siga estos pasos para crear una cuenta de Data Lake Storage Gen1.

  1. En el escritorio, abra una nueva ventana de Azure PowerShell y escriba el siguiente fragmento. Cuando se le solicite iniciar sesión, asegúrese de iniciarla como uno de los administradores o propietario de la suscripción:

    # Log in to your Azure account
    Connect-AzAccount
    
    # List all the subscriptions associated to your account
    Get-AzSubscription
    
    # Select a subscription
    Set-AzContext -SubscriptionId <subscription ID>
    
    # Register for Data Lake Storage Gen1
    Register-AzResourceProvider -ProviderNamespace "Microsoft.DataLakeStore"
    

    Nota

    Si recibe un error similar a Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid al registrar el proveedor de recursos de Data Lake Storage Gen1, es posible que su suscripción no esté aprobada para Data Lake Storage Gen1. Asegúrese de habilitar su suscripción de Azure en la versión preliminar pública de Data Lake Storage Gen1 siguiendo estas instrucciones.

  2. Una cuenta de almacenamiento con Data Lake Storage Gen1 está asociada a un grupo de recursos de Azure. Comience creando un grupo de recursos de Azure.

    $resourceGroupName = "<your new resource group name>"
    New-AzResourceGroup -Name $resourceGroupName -Location "East US 2"
    

    La salida debe ser parecida a la siguiente:

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Cree una cuenta de almacenamiento con Data Lake Storage Gen1. El nombre de cuenta que especifique debe contener solo letras minúsculas y números.

    $dataLakeStorageGen1Name = "<your new storage account with Data Lake Storage Gen1 name>"
    New-AzDataLakeStoreAccount -ResourceGroupName $resourceGroupName -Name $dataLakeStorageGen1Name -Location "East US 2"
    

    Debe ver algo parecido a lo siguiente:

    ...
    ProvisioningState           : Succeeded
    State                       : Active
    CreationTime                : 5/5/2017 10:53:56 PM
    EncryptionState             : Enabled
    ...
    LastModifiedTime            : 5/5/2017 10:53:56 PM
    Endpoint                    : hdiadlstore.azuredatalakestore.net
    DefaultGroup                :
    Id                          : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp/providers/Microsoft.DataLakeStore/accounts/hdiadlstore
    Name                        : hdiadlstore
    Type                        : Microsoft.DataLakeStore/accounts
    Location                    : East US 2
    Tags                        : {}
    
  4. Carga de algunos datos de ejemplo en Data Lake Storage Gen1. Los usaremos más adelante en este artículo para comprobar que se puede acceder a los datos desde un clúster de HDInsight. Si busca datos de ejemplo para cargar, puede obtener la carpeta Ambulance Data en el repositorio Git de Azure Data Lake.

    $myrootdir = "/"
    Import-AzDataLakeStoreItem -AccountName $dataLakeStorageGen1Name -Path "C:\<path to data>\vehicle1_09142014.csv" -Destination $myrootdir\vehicle1_09142014.csv
    

Configuración de la autenticación para el acceso basado en roles a Data Lake Storage Gen1

Cada suscripción de Azure está asociada a un Microsoft Entra ID. Los usuarios y servicios que acceden a los recursos de la suscripción mediante la API de Azure Portal o Azure Resource Manager deben autenticarse primero con esa Microsoft Entra ID. Para conceder acceso a servicios y suscripciones de Azure, se les asigna el rol adecuado en un recurso de Azure. En el caso de los servicios, una entidad de servicio identifica el servicio en el Microsoft Entra ID. En esta sección, se muestra cómo conceder a un servicio de aplicación, como HDInsight, acceso a un recurso de Azure (la cuenta de almacenamiento con Data Lake Storage Gen1 creada antes) mediante la creación de una entidad de servicio para la aplicación y la asignación de roles a ella a través de Azure PowerShell.

Para configurar la autenticación de Active Directory para Data Lake Storage Gen1, debe realizar las siguientes tareas.

  • Creación de un certificado autofirmado
  • Creación de una aplicación en Microsoft Entra ID y una entidad de servicio

Creación de un certificado autofirmado

Asegúrese de que tiene Windows SDK instalado antes de continuar con los pasos de esta sección. También debe crear un directorio, como C:\mycertdir, donde se creará el certificado.

  1. En la ventana de PowerShell, vaya a la ubicación donde ha instalado Windows SDK (normalmente, C:\Program Files (x86)\Windows Kits\10\bin\x86) y use la utilidad MakeCert para crear un certificado autofirmado y una clave privada. Use los comandos siguientes.

    $certificateFileDir = "<my certificate directory>"
    cd $certificateFileDir
    
    makecert -sv mykey.pvk -n "cn=HDI-ADL-SP" CertFile.cer -r -len 2048
    

    Se le pedirá que escriba la contraseña de la clave privada. Después de que el comando se ejecute correctamente, debería ver los archivos CertFile.cer y mykey.pvk en el directorio de certificado especificado.

  2. Use la utilidad Pvk2Pfx para convertir los archivos .pvk y .cer que MakeCert ha creado en un archivo .pfx. Ejecute el siguiente comando:

    pvk2pfx -pvk mykey.pvk -spc CertFile.cer -pfx CertFile.pfx -po <password>
    

    Cuando se le pida, escriba la contraseña de la clave privada que especificó antes. El valor especificado para el parámetro -po es la contraseña asociada al archivo .pfx. Cuando el comando se complete correctamente, debería ver un archivo CertFile.pfx en el directorio de certificado especificado.

Creación de una Microsoft Entra ID y una entidad de servicio

En esta sección, realizará los pasos para crear una entidad de servicio para una aplicación de Microsoft Entra, asignar un rol a la entidad de servicio y autenticarse como entidad de servicio proporcionando un certificado. Ejecute los siguientes comandos para crear una aplicación en Microsoft Entra ID.

  1. Pegue los siguientes cmdlets en la ventana de consola de PowerShell. Asegúrese de que el valor especificado para la propiedad - DisplayName sea único. Además, los valores de -HomePage e -IdentiferUris son valores de marcador de posición y no se comprueban.

    $certificateFilePath = "$certificateFileDir\CertFile.pfx"
    
    $password = Read-Host -Prompt "Enter the password" # This is the password you specified for the .pfx file
    
    $certificatePFX = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certificateFilePath, $password)
    
    $rawCertificateData = $certificatePFX.GetRawCertData()
    
    $credential = [System.Convert]::ToBase64String($rawCertificateData)
    
    $application = New-AzADApplication `
        -DisplayName "HDIADL" `
        -HomePage "https://contoso.com" `
        -IdentifierUris "https://contoso.com" `
        -CertValue $credential  `
        -StartDate $certificatePFX.NotBefore  `
        -EndDate $certificatePFX.NotAfter
    
    $applicationId = $application.ApplicationId
    
  2. Cree una entidad de servicio con el identificador de aplicación.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
     $objectId = $servicePrincipal.Id
    
  3. Conceda acceso de entidad de servicio al archivo o la carpeta de Data Lake Storage Gen1 a la que accederá desde el clúster de HDInsight. El fragmento de código siguiente proporciona acceso a la raíz de la cuenta de almacenamiento con Data Lake Storage Gen1 (donde copió el archivo de datos de ejemplo) y al propio archivo.

    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path / -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /vehicle1_09142014.csv -AceType User -Id $objectId -Permissions All
    

Creación de un clúster de HDInsight en Linux con Data Lake Storage Gen1 como almacenamiento adicional

En esta sección, se creará un clúster de Hadoop en HDInsight basado en Linux con Data Lake Storage Gen1 como almacenamiento adicional. En esta versión, el clúster de HDInsight y la cuenta de almacenamiento con Data Lake Storage Gen1 deben estar en la misma ubicación.

  1. Comience recuperando el identificador del inquilino de la suscripción. Lo necesitará más adelante.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. En esta versión, para un clúster de Hadoop, Data Lake Storage Gen1 solo sirve como almacenamiento adicional para el clúster. El almacenamiento predeterminado seguirá siendo Azure Blob Storage (WASB). En primer lugar, crearemos la cuenta de almacenamiento y los contenedores de almacenamiento necesarios para el clúster.

    # Create an Azure storage account
    $location = "East US 2"
    $storageAccountName = "<StorageAccountName>"   # Provide a Storage account name
    
    New-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -Location $location -Type Standard_GRS
    
    # Create an Azure Blob Storage container
    $containerName = "<ContainerName>"              # Provide a container name
    $storageAccountKey = (Get-AzStorageAccountKey -Name $storageAccountName -ResourceGroupName $resourceGroupName)[0].Value
    $destContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
    New-AzStorageContainer -Name $containerName -Context $destContext
    
  3. Cree el clúster de HDInsight. Use los siguientes cmdlets.

    # Set these variables
    $clusterName = $containerName                   # As a best practice, have the same name for the cluster and container
    $clusterNodes = <ClusterSizeInNodes>            # The number of nodes in the HDInsight cluster
    $httpCredentials = Get-Credential
    $sshCredentials = Get-Credential
    
    New-AzHDInsightCluster -ClusterName $clusterName -ResourceGroupName $resourceGroupName -HttpCredential $httpCredentials -Location $location -DefaultStorageAccountName "$storageAccountName.blob.core.windows.net" -DefaultStorageAccountKey $storageAccountKey -DefaultStorageContainer $containerName  -ClusterSizeInNodes $clusterNodes -ClusterType Hadoop -Version "3.4" -OSType Linux -SshCredential $sshCredentials -ObjectID $objectId -AadTenantId $tenantID -CertificateFilePath $certificateFilePath -CertificatePassword $password
    

    Una vez que el cmdlet se complete correctamente, debería ver un resultado con la información del clúster.

Ejecución de trabajos de prueba en el clúster de HDInsight para usar Data Lake Storage Gen1

Después de configurar un clúster de HDInsight, puede ejecutar trabajos de prueba en el clúster para probar que el clúster de HDInsight pueda acceder a Data Lake Storage Gen1. Para hacerlo, ejecutaremos un trabajo de Hive de ejemplo que crea una tabla con los datos de ejemplo que cargó antes en la cuenta de almacenamiento con Data Lake Storage Gen1.

En esta sección, aprenderá a usar SSH en el clúster de Linux en HDInsight que creó y ejecutará una consulta de Hive de ejemplo.

  1. Una vez conectado, inicie la CLI de Hive con el siguiente comando:

    hive
    
  2. Mediante la CLI, especifique las siguientes instrucciones para crear una tabla nueva denominada vehicles con los datos de ejemplo de Data Lake Storage Gen1:

    DROP TABLE vehicles;
    CREATE EXTERNAL TABLE vehicles (str string) LOCATION 'adl://<mydatalakestoragegen1>.azuredatalakestore.net:443/';
    SELECT * FROM vehicles LIMIT 10;
    

    Debería ver una salida similar a la siguiente:

    1,1,2014-09-14 00:00:03,46.81006,-92.08174,51,S,1
    1,2,2014-09-14 00:00:06,46.81006,-92.08174,13,NE,1
    1,3,2014-09-14 00:00:09,46.81006,-92.08174,48,NE,1
    1,4,2014-09-14 00:00:12,46.81006,-92.08174,30,W,1
    1,5,2014-09-14 00:00:15,46.81006,-92.08174,47,S,1
    1,6,2014-09-14 00:00:18,46.81006,-92.08174,9,S,1
    1,7,2014-09-14 00:00:21,46.81006,-92.08174,53,N,1
    1,8,2014-09-14 00:00:24,46.81006,-92.08174,63,SW,1
    1,9,2014-09-14 00:00:27,46.81006,-92.08174,4,NE,1
    1,10,2014-09-14 00:00:30,46.81006,-92.08174,31,N,1
    

Acceso a Data Lake Storage Gen1 mediante comandos de HDFS

Una vez que configure el clúster de HDInsight para que use Data Lake Storage Gen1, puede usar los comandos de shell de HDFS para acceder al almacén.

En esta sección, aprenderá a usar SSH en el clúster de Linux en HDInsight que creó y ejecutará los comandos de HDFS.

Una vez conectado, use el siguiente comando del sistema de archivos HDFS para enumerar los archivos de la cuenta de almacenamiento con Data Lake Storage Gen1.

hdfs dfs -ls adl://<storage account with Data Lake Storage Gen1 name>.azuredatalakestore.net:443/

Se debería incluir el archivo que cargó antes en Data Lake Storage Gen1.

15/09/17 21:41:15 INFO web.CaboWebHdfsFileSystem: Replacing original urlConnectionFactory with org.apache.hadoop.hdfs.web.URLConnectionFactory@21a728d6
Found 1 items
-rwxrwxrwx   0 NotSupportYet NotSupportYet     671388 2015-09-16 22:16 adl://mydatalakestoragegen1.azuredatalakestore.net:443/mynewfolder

También puede usar el comando hdfs dfs -put para cargar algunos archivos en Data Lake Storage Gen1 y después usar hdfs dfs -ls para comprobar si los archivos se cargaron correctamente.

Consulte también