Utiliser Azure PowerShell pour créer un cluster HDInsight avec Azure Data Lake Storage Gen1 (comme stockage complémentaire)

Découvrez comment utiliser Azure PowerShell pour configurer un cluster HDInsight avec Azure Data Lake Storage Gen1 comme stockage supplémentaire. Pour obtenir des instructions sur la création d’un cluster HDInsight avec Data Lake Storage Gen1 comme stockage par défaut, voir Créer un cluster HDInsight avec Data Lake Storage Gen1 comme stockage par défaut.

Notes

Si vous vous apprêtez à utiliser Data Lake Storage Gen1 en tant que stockage supplémentaire pour le cluster HDInsight, nous vous recommandons vivement de procéder ainsi lorsque vous créez le cluster comme décrit dans cet article. L’ajout de Data Lake Storage Gen1 en tant que stockage supplémentaire à un cluster HDInsight existant est un processus complexe sujet aux erreurs.

Pour les types de clusters pris en charge, Data Lake Storage Gen1 est utilisé comme compte de stockage par défaut ou supplémentaire. Lorsque Data Lake Storage Gen1 est utilisé comme espace de stockage supplémentaire, le compte de stockage par défaut pour les clusters est toujours le Stockage Blob Azure (WASB), et les fichiers associés au cluster (par exemple, les journaux d’activité, etc.) sont écrits dans le stockage par défaut, tandis que les données que vous souhaitez traiter peuvent être stockées dans Data Lake Storage Gen1. L’utilisation de Data Lake Storage Gen1 en tant que compte de stockage supplémentaire n’affecte pas les performances ni la capacité de lecture/écriture sur le stockage à partir du cluster.

Utilisation de Data Lake Storage Gen1 pour le stockage de cluster HDInsight

Voici quelques considérations importantes pour l’utilisation de HDInsight avec Data Lake Storage Gen1 :

  • L’option permettant de créer des clusters HDInsight avec accès au Data Lake Storage Gen1 comme stockage supplémentaire est disponible si vous utilisez HDInsight versions 3.2, 3.4, 3.5 et 3.6.

Pour configurer HDInsight afin qu’il fonctionne avec Data Lake Storage Gen1 à l’aide de PowerShell, la procédure est la suivante :

  • Créer un compte Data Lake Storage Gen1
  • Configurer l’authentification pour définir un accès à Data Lake Storage Gen1 en fonction du rôle
  • Créer un cluster HDInsight avec authentification à Data Lake Storage Gen1
  • Lancer une tâche de test sur le cluster

Prérequis

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Avant de commencer ce didacticiel, vous devez disposer des éléments suivants :

  • Un abonnement Azure. Consultez la page Obtention d’un essai gratuit d’Azure.

  • Azure PowerShell 1.0 ou version ultérieure. Consultez Installation et configuration d’Azure PowerShell.

  • Kit de développement logiciel (SDK) Windows. Vous pouvez l’installer à partir d’ici. Il vous permet de créer un certificat de sécurité.

  • Microsoft Entra principal de service. Les étapes de ce didacticiel fournissent des instructions sur la création d’un principal de service dans Microsoft Entra ID. Toutefois, vous devez être administrateur Microsoft Entra pour pouvoir créer un principal de service. Si vous êtes administrateur Microsoft Entra, vous pouvez ignorer ce prérequis et suivre le didacticiel.

    Si vous n’êtes pas administrateur Microsoft Entra, vous ne pourrez pas effectuer les étapes requises pour créer un principal de service. Dans ce cas, votre administrateur Microsoft Entra doit d’abord créer un principal de service avant de pouvoir créer un cluster HDInsight avec Data Lake Storage Gen1. En outre, le principal du service doit être créé à l’aide d’un certificat, comme décrit dans Create a service principal with certificate (Créer un principal du service avec certificat).

Créer un compte Data Lake Storage Gen1

Pour créer un compte Data Lake Storage Gen1, procédez comme suit.

  1. Sur votre bureau, ouvrez une nouvelle fenêtre Azure PowerShell et entrez l'extrait de code suivant. Lorsque vous êtes invité à vous connecter, vérifiez que vous vous connectez en tant qu’administrateur/propriétaire de l’abonnement :

    # 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"
    

    Notes

    Si vous recevez une erreur similaire à Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid pendant l’inscription du fournisseur de ressources Data Lake Storage Gen1, il est possible que votre abonnement n’ait pas été approuvé pour Data Lake Storage Gen1. Veillez à activer votre abonnement Azure pour la version préliminaire publique de Data Lake Storage Gen1 en suivant ces instructions.

  2. Un compte de stockage Data Lake Storage Gen1 est associé à un groupe de ressources Azure. Commencez par créer un groupe de ressources Azure.

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

    Vous devriez obtenir un résultat similaire à ceci :

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Créez un compte de stockage avec Data Lake Storage Gen1. Le nom de compte que vous spécifiez doit contenir uniquement des lettres minuscules et des chiffres.

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

    Un résultat similaire à ce qui suit s’affiche normalement :

    ...
    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. Téléchargez des exemples de données sur Data Lake Storage Gen1. Nous les utiliserons plus loin dans cet article pour vérifier que les données sont accessibles à partir d'un cluster HDInsight. Si vous recherchez des exemples de données à charger, vous pouvez récupérer le dossier Données Ambulance dans le Référentiel Git Azure Data Lake.

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

Configurer l’authentification pour définir un accès à Data Lake Storage Gen1 en fonction du rôle

Chaque abonnement Azure est associé à un Microsoft Entra ID. Les utilisateurs et les services qui accèdent aux ressources de l’abonnement à l’aide de l’API Portail Azure ou Azure Resource Manager doivent d’abord s’authentifier auprès de cette Microsoft Entra ID. L’accès est accordé aux abonnements et services Azure en leur affectant le rôle approprié sur une ressource Azure. Pour les services, un principal de service identifie le service dans le Microsoft Entra ID. Cette section montre comment accorder l’accès à une ressource Azure (le compte de stockage Data Lake Storage Gen1 créé précédemment) à un service d’application, comme HDInsight, en créant un principal de service pour l’application et en lui attribuant des rôles avec Azure PowerShell.

Pour configurer l’authentification Active Directory pour Data Lake Storage Gen1, vous devez effectuer les tâches suivantes.

  • Créer un certificat auto-signé
  • Créer une application dans Microsoft Entra ID et un principal de service

Créer un certificat auto-signé

Assurez-vous que le SDK Windows est installé avant de suivre la procédure décrite dans cette section. Vous devez également avoir créé un répertoire, comme C:\mycertdir, où sera créé le certificat.

  1. Dans la fenêtre PowerShell, accédez à l’emplacement où vous avez installé le Windows SDK (en général, C:\Program Files (x86)\Windows Kits\10\bin\x86) et servez-vous de l’utilitaire MakeCert pour créer un certificat auto-signé et une clé privée. Utilisez les commandes suivantes.

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

    Vous devrez entrer le mot de passe de la clé privée. Une fois la commande exécutée avec succès, CertFile.cer et mykey.pvk apparaissent dans le répertoire du certificat que vous avez spécifié.

  2. Servez-vous de l’utilitaire Pvk2Pfx pour convertir en un fichier .pfx les fichiers .pvk et .cer créés par MakeCert. Exécutez la commande suivante :

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

    Lorsque vous y êtes invité, entrez le mot de passe de la clé privée spécifié au préalable. La valeur que vous donnez au paramètre -po est le mot de passe associé au fichier .pfx. Une fois la commande exécutée avec succès, CertFile.pfx est visible dans le répertoire du certificat que vous avez spécifié.

Créer un Microsoft Entra ID et un principal de service

Dans cette section, vous allez effectuer les étapes permettant de créer un principal de service pour une application Microsoft Entra, d’attribuer un rôle au principal de service et de vous authentifier en tant que principal de service en fournissant un certificat. Exécutez les commandes suivantes pour créer une application dans Microsoft Entra ID.

  1. Collez les applets de commande suivantes dans la fenêtre de la console PowerShell. Vérifiez que la valeur que vous donnez à la propriété -DisplayName est unique. En outre, les valeurs pour -HomePage et -IdentiferUris sont des valeurs d’espace réservé et ne sont pas vérifiées.

    $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. Créez un principal du service avec l'ID d'application.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
     $objectId = $servicePrincipal.Id
    
  3. Accordez au principal du service l’accès au dossier et au fichier Data Lake Storage Gen1 auxquels vous accéderez à partir du cluster HDInsight. L’extrait de code ci-dessous fournit l’accès à la racine du compte de stockage Data Lake Storage Gen1 (où vous avez copié l’exemple de fichier de données) et le fichier lui-même.

    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
    

Créer un cluster Linux HDInsight avec Data Lake Storage Gen1 comme stockage par supplémentaire

Dans cette section, nous créons un cluster HDInsight Hadoop Linux avec Data Lake Storage Gen1 comme stockage supplémentaire. Pour cette version, le cluster HDInsight et le compte de stockage avec Data Lake Storage Gen1 doivent se trouver au même emplacement.

  1. Commencez par récupérer l’ID du client de l’abonnement. Vous en aurez besoin ultérieurement.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. Pour cette version, pour un cluster Hadoop, Data Lake Storage Gen1 ne peut être utilisé que comme stockage supplémentaire pour le cluster. Le stockage par défaut sera toujours le Stockage Blob Azure (WASB). Par conséquent, nous allons tout d'abord créer le compte de stockage et les conteneurs de stockage requis par le cluster.

    # 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. Créez le cluster HDInsight. Utilisez les applets de commande suivantes.

    # 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
    

    Après exécution de l'applet de commande, le résultat énumère les détails du cluster.

Exécuter des tâches de test sur le cluster HDInsight pour utiliser Data Lake Storage Gen1

Après avoir configuré un cluster HDInsight, vous pouvez exécuter des travaux test sur le cluster pour vérifier que le cluster HDInsight peut accéder à Data Lake Storage Gen1. Pour ce faire, nous allons exécuter un exemple de tâche Hive qui crée une table avec les exemples de données que vous avez chargés précédemment dans votre compte de stockage avec Data Lake Storage Gen1.

Dans cette section, vous allez utiliser SSH dans le cluster HDInsight Linux que vous avez créé et exécuter l’exemple de requête Hive.

  1. Une fois connecté, démarrez l'interface de ligne de commande Hive à l'aide de la commande suivante :

    hive
    
  2. À l’aide de l’interface de ligne de commande, entrez les instructions suivantes pour créer une table nommée vehicles en utilisant les exemples de données dans Data Lake Storage Gen1 :

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

    Le résultat doit ressembler à ce qui suit :

    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
    

Accéder à Data Lake Storage Gen1 avec les commandes HDFS

Une fois que vous avez configuré le cluster HDInsight pour qu’il utilise Data Lake Storage Gen1, vous pouvez utiliser les commandes de l’interpréteur de commandes HDFS pour accéder au magasin.

Dans cette section, vous allez utiliser SSH dans le cluster HDInsight Linux que vous avez créé et exécuter les commandes HDFS.

Une fois connecté, utilisez la commande suivante du système de fichiers HDFS pour lister les fichiers du compte de stockage avec Data Lake Storage Gen1.

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

Le fichier que vous avez téléchargé dans Data Lake Storage Gen1 doit y figurer.

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

Vous pouvez également utiliser la commande hdfs dfs -put pour charger des fichiers dans Data Lake Storage Gen1, puis utiliser hdfs dfs -ls pour vérifier si les fichiers ont été chargés avec succès.

Voir aussi