Delen via


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

Meer informatie over het gebruik van Azure PowerShell voor het configureren van een HDInsight-cluster met Azure Data Lake Storage Gen1 als extra opslag. Zie Een HDInsight-cluster maken met Data Lake Storage Gen1 als standaardopslag voor instructies voor 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, raden we u ten zeerste aan dit te doen terwijl u het cluster maakt, 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 standaardopslag of extra opslagaccount. Wanneer Data Lake Storage Gen1 wordt gebruikt als extra opslag, wordt het standaardopslagaccount voor de clusters nog steeds Azure Blob Storage (WASB) en 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 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 gebruik 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

Benodigdheden

Notitie

U wordt aangeraden de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Zie Azure PowerShell migreren van AzureRM naar Az voor meer informatie over het migreren naar de Az PowerShell-module.

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

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

  • Azure PowerShell 1.0 of hoger. Zie Hoe u Azure PowerShell installeert en configureert.

  • Windows SDK. U kunt deze hier installeren. U gebruikt dit om een beveiligingscertificaat te maken.

  • Microsoft Entra-service-principal. Stappen in deze handleiding bevatten instructies voor het aanmaken 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 dat geval moet uw Microsoft Entra-beheerder eerst een service-principal maken voordat u een HDInsight-cluster kunt maken met Data Lake Storage Gen1. De service-principal moet ook worden gemaakt met behulp van een certificaat, zoals beschreven in Een service-principal met certificaat maken.

Een Data Lake Storage Gen1-account maken

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

  1. Open vanaf uw bureaublad een nieuw Azure PowerShell-venster en voer het volgende codefragment in. Wanneer u wordt gevraagd 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 foutbericht ontvangt dat lijkt op 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 nog niet is goedgekeurd voor Data Lake Storage Gen1. Zorg ervoor dat u uw Azure-abonnement voor Data Lake Storage Gen1 inschakelt 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"
    

    U zou een uitvoer zoals deze moeten zien.

    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"
    

    U zou een uitvoer als de volgende moeten zien:

    ...
    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. Dit wordt verderop in dit artikel gebruikt om te controleren of de gegevens toegankelijk zijn vanuit een HDInsight-cluster. Als u op zoek bent naar enkele voorbeeldgegevens die u wilt uploaden, kunt u de map Ambulance Data ophalen uit de Git-opslagplaats van Azure Data Lake.

    $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 eerst worden geverifieerd met die Microsoft Entra-id. Toegang wordt verleend aan Azure-abonnementen en -services door ze 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 dat u eerder hebt gemaakt) door een service-principal voor de toepassing te maken en rollen toe te wijzen via Azure PowerShell.

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

  • Een zelfondertekend certificaat maken
  • Een toepassing maken in Microsoft Entra ID en een serviceprincipal

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, waar het certificaat wordt gemaakt.

  1. Navigeer 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 te converteren die MakeCert heeft gemaakt 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 voor het maken van een service-principal voor een Microsoft Entra-toepassing, wijst u een rol toe aan de service-principal en verifieert u 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 de PowerShell-console. Zorg ervoor dat de waarde die u opgeeft voor de eigenschap -DisplayName uniek is. De waarden voor -HomePage en -IdentiferUris zijn ook tijdelijke aanduidingen en worden 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. Verleen de service-principal toegang tot de Data Lake Storage Gen1-map en het bestand waartoe u toegang krijgt vanuit het HDInsight-cluster. Het onderstaande fragment 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 Data Lake Storage Gen1 voor een Hadoop-cluster alleen worden gebruikt als extra opslag voor het cluster. De standaardopslag is nog steeds de 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 clusterdetails.

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 hebt geüpload naar uw opslagaccount met Data Lake Storage Gen1.

In dit gedeelte maakt u verbinding met het HDInsight Linux-cluster dat u heeft aangemaakt en voert u een voorbeeldquery in Hive uit.

  1. Nadat 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;
    

    U zou een uitvoer moeten zien die er ongeveer als volgt uitziet:

    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 het archief.

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

Nadat u verbinding hebt gemaakt, gebruikt u de volgende opdracht voor het HDFS-bestandssysteem 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/

Hiermee wordt het bestand weergegeven dat u eerder naar Data Lake Storage Gen1 hebt geüpload.

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 bepaalde bestanden te uploaden naar Data Lake Storage Gen1 en vervolgens te gebruiken hdfs dfs -ls om te controleren of de bestanden zijn geüpload.

Zie ook