Gebruik Azure PowerShell om een HDInsight-cluster te maken met Azure Data Lake Storage Gen1 (als extra opslag)

Meer informatie over het gebruik van Azure PowerShell om een HDInsight-cluster te configureren met Azure Data Lake Storage Gen1, als extra opslag. Zie Een HDInsight-cluster maken met Data Lake Storage Gen1 als standaardopslag voor instructies over het maken van een HDInsight-cluster met Data Lake Storage Gen1 als standaardopslag.

Notitie

Als u Data Lake Storage Gen1 gaat gebruiken als extra opslag voor HDInsight-cluster, wordt u ten zeerste aangeraden dit te doen tijdens het maken van het cluster, zoals beschreven in dit artikel. Het toevoegen van Data Lake Storage Gen1 als extra opslag aan een bestaand HDInsight-cluster is een ingewikkeld proces en gevoelig voor fouten.

Voor ondersteunde clustertypen kan Data Lake Storage Gen1 worden gebruikt als een standaardopslagaccount of een extra opslagaccount. Wanneer Data Lake Storage Gen1 wordt gebruikt als extra opslag, is het standaardopslagaccount voor de clusters nog steeds Azure Blob Storage (WASB) en worden de clustergerelateerde bestanden (zoals logboeken, enzovoort) nog steeds naar de standaardopslag geschreven, terwijl de gegevens die u wilt verwerken, kunnen worden opgeslagen in een Data Lake Storage Gen1. Het gebruik van Data Lake Storage Gen1 als een extra opslagaccount heeft geen invloed op de prestaties of de mogelijkheid om vanuit het cluster naar de opslag te lezen/schrijven.

Data Lake Storage Gen1 gebruiken voor HDInsight-clusteropslag

Hier volgen enkele belangrijke overwegingen voor het gebruik van HDInsight met Data Lake Storage Gen1:

  • Optie voor het maken van HDInsight-clusters met toegang tot Data Lake Storage Gen1 omdat er extra opslag beschikbaar is voor HDInsight-versies 3.2, 3.4, 3.5 en 3.6.

Het configureren van HDInsight voor het werken met Data Lake Storage Gen1 met behulp van PowerShell omvat de volgende stappen:

  • Een Data Lake Storage Gen1-account maken
  • Verificatie instellen voor op rollen gebaseerde toegang tot Data Lake Storage Gen1
  • HDInsight-cluster maken met verificatie voor Data Lake Storage Gen1
  • Een testtaak uitvoeren op het cluster

Vereisten

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Voordat u met deze zelfstudie begint, moet u het volgende hebben of hebben gedaan:

  • Een Azure-abonnement. Zie Gratis proefversie van Azure ophalen.

  • Azure PowerShell 1.0 of hoger. Zie Azure PowerShell installeren en configureren.

  • Windows SDK. Deze kunt u hier downloaden. U gebruikt dit om een beveiligingscertificaat te maken.

  • Microsoft Entra service-principal. De stappen in deze zelfstudie bevatten instructies voor het maken van een service-principal in Microsoft Entra ID. U moet echter een Microsoft Entra beheerder zijn om een service-principal te kunnen maken. Als u een Microsoft Entra-beheerder bent, kunt u deze vereiste overslaan en doorgaan met de zelfstudie.

    Als u geen Microsoft Entra-beheerder bent, kunt u de vereiste stappen voor het maken van een service-principal niet uitvoeren. In een dergelijk geval moet uw Microsoft Entra-beheerder eerst een service-principal maken voordat u een HDInsight-cluster met Data Lake Storage Gen1 kunt maken. De service-principal moet ook worden gemaakt met behulp van een certificaat, zoals beschreven in Een service-principal maken met certificaat.

Een Data Lake Storage Gen1-account maken

Volg deze stappen om een Data Lake Storage Gen1-account te maken.

  1. Open op het bureaublad een nieuw Azure PowerShell venster en voer het volgende codefragment in. Wanneer u wordt gevraagd om u aan te melden, moet u zich aanmelden als een van de abonnementsbeheerder/-eigenaar:

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

    Notitie

    Als u een foutmelding krijgt die vergelijkbaar is met Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid bij het registreren van de Data Lake Storage Gen1 resourceprovider, is het mogelijk dat uw abonnement niet is goedgekeurd voor Data Lake Storage Gen1. Zorg ervoor dat u uw Azure-abonnement inschakelt voor Data Lake Storage Gen1 door deze instructies te volgen.

  2. Een opslagaccount met Data Lake Storage Gen1 is gekoppeld aan een Azure-resourcegroep. Maak daarom eerst een Azure-resourcegroep.

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

    De uitvoer ziet er als volgt uit:

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Maak een opslagaccount met Data Lake Storage Gen1. De accountnaam die u opgeeft, mag alleen kleine letters en cijfers bevatten.

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

    Als het goed is, wordt ongeveer de volgende uitvoer weergegeven:

    ...
    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. Upload enkele voorbeeldgegevens naar Data Lake Storage Gen1. We gebruiken deze verderop in dit artikel om te controleren of de gegevens toegankelijk zijn vanuit een HDInsight-cluster. Als u nog geen voorbeeldgegevens hebt om te uploaden, kunt u de map Ambulance Data uit de Azure Data Lake Git-opslagplaats gebruiken.

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

Verificatie instellen voor op rollen gebaseerde toegang tot Data Lake Storage Gen1

Elk Azure-abonnement is gekoppeld aan een Microsoft Entra ID. Gebruikers en services die toegang hebben tot resources van het abonnement met behulp van de Azure Portal- of Azure Resource Manager-API, moeten zich eerst verifiëren bij die Microsoft Entra ID. Toegang wordt verleend aan Azure-abonnementen en -services door deze de juiste rol toe te wijzen aan een Azure-resource. Voor services identificeert een service-principal de service in de Microsoft Entra ID. In deze sectie ziet u hoe u een toepassingsservice, zoals HDInsight, toegang verleent tot een Azure-resource (het opslagaccount met Data Lake Storage Gen1 u eerder hebt gemaakt) door een service-principal voor de toepassing te maken en daar rollen aan toe te wijzen via Azure PowerShell.

Als u Active Directory-verificatie wilt instellen voor Data Lake Storage Gen1, moet u de volgende taken uitvoeren.

  • Een zelfondertekend certificaat maken
  • Een toepassing maken in Microsoft Entra ID en een service-principal

Een zelfondertekend certificaat maken

Zorg ervoor dat Windows SDK is geïnstalleerd voordat u doorgaat met de stappen in deze sectie. U moet ook een map hebben gemaakt, zoals C:\mycertdir, waarin het certificaat wordt gemaakt.

  1. Ga in het PowerShell-venster naar de locatie waar u windows-SDK hebt geïnstalleerd (meestal) C:\Program Files (x86)\Windows Kits\10\bin\x86 en gebruik het hulpprogramma MakeCert om een zelfondertekend certificaat en een persoonlijke sleutel te maken. Gebruik de volgende opdrachten.

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

    U wordt gevraagd het wachtwoord voor de persoonlijke sleutel in te voeren. Nadat de opdracht is uitgevoerd, ziet u een CertFile.cer en mykey.pvk in de certificaatmap die u hebt opgegeven.

  2. Gebruik het hulpprogramma Pvk2Pfx om de .pvk- en .cer-bestanden die Door MakeCert zijn gemaakt, te converteren naar een PFX-bestand. Voer de volgende opdracht uit.

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

    Wanneer u hierom wordt gevraagd, voert u het wachtwoord voor de persoonlijke sleutel in dat u eerder hebt opgegeven. De waarde die u opgeeft voor de parameter -po is het wachtwoord dat is gekoppeld aan het PFX-bestand. Nadat de opdracht is voltooid, ziet u ook een CertFile.pfx in de certificaatmap die u hebt opgegeven.

Een Microsoft Entra ID en een service-principal maken

In deze sectie voert u de stappen uit om een service-principal te maken voor een Microsoft Entra-toepassing, een rol toe te wijzen aan de service-principal en te verifiëren als de service-principal door een certificaat op te geven. Voer de volgende opdrachten uit om een toepassing te maken in Microsoft Entra ID.

  1. Plak de volgende cmdlets in het PowerShell-consolevenster. Zorg ervoor dat de waarde die u opgeeft voor de eigenschap -DisplayName uniek is. Bovendien zijn de waarden voor -HomePage en -IdentiferUris tijdelijke aanduidingen en niet geverifieerd.

    $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. Maak een service-principal met behulp van de toepassings-id.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
     $objectId = $servicePrincipal.Id
    
  3. Ververleent de service-principal toegang tot de map Data Lake Storage Gen1 en het bestand dat u opent vanuit het HDInsight-cluster. Het onderstaande codefragment biedt toegang tot de hoofdmap van het opslagaccount met Data Lake Storage Gen1 (waar u het voorbeeldgegevensbestand hebt gekopieerd) en het bestand zelf.

    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
    

Een HDInsight Linux-cluster maken met Data Lake Storage Gen1 als extra opslag

In deze sectie maken we een HDInsight Hadoop Linux-cluster met Data Lake Storage Gen1 als extra opslag. Voor deze release moeten het HDInsight-cluster en het opslagaccount met Data Lake Storage Gen1 zich op dezelfde locatie bevinden.

  1. Begin met het ophalen van de tenant-id van het abonnement. Dat hebt u later nodig.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. Voor deze release kan voor een Hadoop-cluster Data Lake Storage Gen1 alleen worden gebruikt als extra opslag voor het cluster. De standaardopslag is nog steeds Azure Blob Storage (WASB). Daarom maken we eerst het opslagaccount en de opslagcontainers die vereist zijn voor het 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. Maak het HDInsight-cluster. Gebruik de volgende 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
    

    Nadat de cmdlet is voltooid, ziet u een uitvoer met de clustergegevens.

Testtaken uitvoeren op het HDInsight-cluster om de Data Lake Storage Gen1 te gebruiken

Nadat u een HDInsight-cluster hebt geconfigureerd, kunt u testtaken uitvoeren op het cluster om te testen of het HDInsight-cluster toegang heeft tot Data Lake Storage Gen1. Hiervoor voeren we een Hive-voorbeeldtaak uit waarmee een tabel wordt gemaakt met behulp van de voorbeeldgegevens die u eerder met Data Lake Storage Gen1 hebt geüpload naar uw opslagaccount.

In deze sectie voert u SSH uit in het HDInsight Linux-cluster dat u hebt gemaakt en voert u een Hive-voorbeeldquery uit.

  1. Zodra u verbinding hebt gemaakt, start u de Hive CLI met behulp van de volgende opdracht:

    hive
    
  2. Voer met behulp van de CLI de volgende instructies in om een nieuwe tabel met de naam voertuigen te maken met behulp van de voorbeeldgegevens in Data Lake Storage Gen1:

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

    Als het goed is, wordt ongeveer de volgende uitvoer weergegeven:

    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
    

Toegang tot Data Lake Storage Gen1 met HDFS-opdrachten

Zodra u het HDInsight-cluster hebt geconfigureerd voor het gebruik van Data Lake Storage Gen1, kunt u de HDFS-shellopdrachten gebruiken om toegang te krijgen tot de store.

In deze sectie voert u SSH uit in het HDInsight Linux-cluster dat u hebt gemaakt en voert u de HDFS-opdrachten uit.

Zodra u verbinding hebt, gebruikt u de volgende HDFS-bestandssysteemopdracht om de bestanden in het opslagaccount weer te geven met Data Lake Storage Gen1.

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

Hier moet het bestand worden vermeld dat u eerder hebt geüpload naar 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

U kunt ook de hdfs dfs -put opdracht gebruiken om een aantal bestanden te uploaden naar Data Lake Storage Gen1 en vervolgens gebruiken hdfs dfs -ls om te controleren of de bestanden zijn geüpload.

Zie ook