Crear clústeres de HDInsight con Azure Data Lake Storage Gen1 como almacenamiento predeterminado mediante PowerShell
Obtenga información sobre cómo usar Azure PowerShell para configurar clústeres de Azure HDInsight con Azure Data Lake Storage Gen1, como almacenamiento predeterminado. Para obtener instrucciones sobre la creación de un clúster de HDInsight con Azure Data Lake Storage Gen1 como almacenamiento adicional, consulte Create an HDInsight cluster with Data Lake Storage Gen1 as additional storage (Crear un clúster de HDInsight con Data Lake Storage Gen1 como almacenamiento adicional).
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 predeterminado está disponible para la versión 3.5 y 3.6 de HDInsight.
La opción para crear clústeres de HDInsight con acceso a Data Lake Storage Gen1 como almacenamiento predeterminado no está disponible para clústeres de HDInsight Premium.
Para configurar HDInsight para que funcione con Data Lake Storage Gen1 mediante PowerShell, siga las instrucciones que aparecen en las cinco secciones siguientes.
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 comenzar este tutorial, asegúrese de que se cumplen los requisitos siguientes:
Una suscripción a Azure: Vaya a Obtener evaluación gratuita de Azure.
Azure PowerShell 1.0 o versiones posteriores: consulte How to install and configure PowerShell (Instalación y configuración de Azure PowerShell).
Kit de desarrollo de software (SDK) para Windows: para instalar el SDK de Windows, vaya a Downloads and tools for Windows 10 (Descargas y herramientas para Windows 10). El SDK se usa para crear un certificado de seguridad.
Microsoft Entra entidad de servicio: en este tutorial se describe cómo crear una entidad de servicio en Microsoft Entra ID. Sin embargo, para crear una entidad de servicio, debe ser administrador de Microsoft Entra. Si ya lo es, puede hacer caso omiso a este requisito previo y continuar con el tutorial.
Nota
Solo puede crear una entidad de servicio si es administrador de Microsoft Entra. El administrador de Microsoft Entra debe crear una entidad de servicio para poder crear un clúster de HDInsight con Data Lake Storage Gen1. La entidad de servicio se debe crear con un certificado, tal y como se describe en Creación de entidad de servicio con certificado.
Creación de una cuenta de Azure Data Lake Storage Gen1
Para crear una cuenta de Data Lake Storage Gen1, realice el siguiente procedimiento:
En el escritorio, abra una ventana de PowerShell y escriba los siguientes fragmentos de código: Cuando se le pida que inicie sesión, hágalo como uno de los propietarios o administradores de la suscripción.
# Sign 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 registra el proveedor de recursos de Data Lake Storage Gen1 y recibe un error similar a
Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid
, su suscripción podría no estar aprobada para Data Lake Storage Gen1. Para habilitar la suscripción de Azure para Data Lake Storage Gen1, siga las instrucciones que se encuentran en Introducción a Azure Data Lake Storage Gen1 con Azure Portal.Una cuenta de Data Lake Storage Gen1 está asociada a un grupo de recursos de Azure. Comience a crear un grupo de recursos.
$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
Cree una cuenta de Data Lake Storage Gen1. El nombre de cuenta que especifique solo debe contener letras minúsculas y números.
$dataLakeStorageGen1Name = "<your new 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 : {}
Para usar Data Lake Storage Gen1 como almacenamiento predeterminado, debe especificar una ruta de acceso raíz en la que se copiarán los archivos específicos del clúster durante su creación. Para crear una ruta de acceso raíz, que es /clusters/hdiadlcluster en el fragmento de código, use los cmdlets siguientes:
$myrootdir = "/" New-AzDataLakeStoreItem -Folder -AccountName $dataLakeStorageGen1Name -Path $myrootdir/clusters/hdiadlcluster
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 una entidad Microsoft Entra. Los usuarios y servicios que acceden a los recursos de suscripción mediante el Azure Portal o la API de Azure Resource Manager deben autenticarse primero con 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 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 Data Lake Storage Gen1 que creó anteriormente). La forma de hacerlo es crear una entidad de servicio para la aplicación y asignarla roles a través de PowerShell.
Para configurar la autenticación de Active Directory para Data Lake Storage Gen1, realice las tareas en las dos secciones siguientes.
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 creará el certificado.
En la ventana de PowerShell, vaya a la ubicación donde instaló Windows SDK (normalmente, C:\Archivos de programa (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 que especificó.
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 haya completado correctamente, debería ver un archivo CertFile.pfx en el directorio de certificado que especificó.
Creación de una Microsoft Entra ID y una entidad de servicio
En esta sección, creará una entidad de servicio para una aplicación de Microsoft Entra, asignará un rol a la entidad de servicio y se autenticará como entidad de servicio proporcionando un certificado. Para crear una aplicación en Microsoft Entra ID, ejecute los siguientes comandos:
Pegue los siguientes cmdlets en la ventana de consola de PowerShell. Asegúrese de que el valor especificado para la propiedad - DisplayName sea único. 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
Cree una entidad de servicio mediante el identificador de aplicación.
$servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor $objectId = $servicePrincipal.Id
Conceda a la entidad de servicio acceso a la raíz de Data Lake Storage Gen1 y a todas las carpetas de la ruta de acceso raíz que especificó anteriormente. Use los siguientes cmdlets:
Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path / -AceType User -Id $objectId -Permissions All Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /clusters -AceType User -Id $objectId -Permissions All Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /clusters/hdiadlcluster -AceType User -Id $objectId -Permissions All
Crear un clúster de HDInsight en Linux con Data Lake Storage Gen1 como almacenamiento predeterminado
En esta sección, creará un clúster de Hadoop en HDInsight basado en Linux con Data Lake Storage Gen1 como almacenamiento predeterminado. En esta versión, el clúster de HDInsight y Data Lake Storage Gen1 deben estar en la misma ubicación.
Recupere el identificador de inquilino de suscripción y almacénelo para usarlo más adelante.
$tenantID = (Get-AzContext).Tenant.TenantId
Cree el clúster de HDInsight mediante los cmdlets siguientes:
# Set these variables $location = "East US 2" $storageAccountName = $dataLakeStorageGen1Name # Data Lake Storage Gen1 account name $storageRootPath = "<Storage root path you specified earlier>" # e.g. /clusters/hdiadlcluster $clusterName = "<unique cluster name>" $clusterNodes = <ClusterSizeInNodes> # The number of nodes in the HDInsight cluster $httpCredentials = Get-Credential $sshCredentials = Get-Credential New-AzHDInsightCluster ` -ClusterType Hadoop ` -OSType Linux ` -ClusterSizeInNodes $clusterNodes ` -ResourceGroupName $resourceGroupName ` -ClusterName $clusterName ` -HttpCredential $httpCredentials ` -Location $location ` -DefaultStorageAccountType AzureDataLakeStore ` -DefaultStorageAccountName "$storageAccountName.azuredatalakestore.net" ` -DefaultStorageRootPath $storageRootPath ` -Version "3.6" ` -SshCredential $sshCredentials ` -AadTenantId $tenantId ` -ObjectId $objectId ` -CertificateFilePath $certificateFilePath ` -CertificatePassword $password
Cuando el cmdlet se haya completado correctamente, debería ver una salida 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 él para garantizar que puede acceder a Data Lake Storage Gen1. Para hacerlo, ejecute un trabajo de Hive de ejemplo para crear una tabla en la que se usen los datos de ejemplo que ya están disponibles en Data Lake Storage Gen1 en <raíz_del_clúster>/example/data/sample.log.
En esta sección, realiza una conexión de Secure Shell (SSH) en el clúster de HDInsight en Linux que creó y luego ejecute una consulta de Hive de ejemplo.
- Si usa un cliente Windows para realizar una conexión SSH en el clúster, consulte Uso de SSH con clústeres de HDInsight desde PuTTY en Windows.
- Si usa un cliente Linux para realizar una conexión SSH en el clúster, consulte Uso de SSH con HDInsight (Hadoop) desde Bash en Windows 10, Linux, Unix u OS X.
Después de haber realizado la conexión, inicie la interfaz de la línea de comandos (CLI) de Hive con el siguiente comando:
hive
Use la CLI para especificar las siguientes instrucciones para crear una tabla nueva denominada vehicles con los datos de ejemplo de Data Lake Storage Gen1:
DROP TABLE log4jLogs; CREATE EXTERNAL TABLE log4jLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE LOCATION 'adl:///example/data/'; SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
Debería ver el resultado de la consulta en la consola SSH.
Nota
La ruta de acceso a los datos de ejemplo del comando CREATE TABLE anterior es adl:///example/data/
, donde adl:///
es la raíz de clúster. Siguiendo el ejemplo de la raíz de clúster especificada en este tutorial, el comando es adl://hdiadlstore.azuredatalakestore.net/clusters/hdiadlcluster
. Puede usar la alternativa más corta o proporcionar la ruta de acceso a la raíz de clúster completa.
Obtener acceso a Data Lake Storage Gen1 mediante comandos de HDFS
Después de configurar el clúster de HDInsight para que use Data Lake Storage Gen1, puede usar los comandos de shell del sistema de archivos distribuido de Hadoop (HDFS) para acceder al almacén.
En esta sección, realiza una conexión SSH en el clúster de HDInsight en Linux que creó y luego ejecuta los comandos de HDFS.
- Si usa un cliente Windows para realizar una conexión SSH en el clúster, consulte Uso de SSH con clústeres de HDInsight desde PuTTY en Windows.
- Si usa un cliente Linux para realizar una conexión SSH en el clúster, consulte Uso de SSH con HDInsight (Hadoop) desde Bash en Windows 10, Linux, Unix u OS X.
Después de realizar la conexión, enumere los archivos de Data Lake Storage Gen1 mediante el siguiente comando de sistema de archivos de HDFS.
hdfs dfs -ls adl:///
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.