Använd Azure PowerShell för att skapa ett HDInsight-kluster med Azure Data Lake Storage Gen1 (som ytterligare lagring)

Lär dig hur du använder Azure PowerShell för att konfigurera ett HDInsight-kluster med Azure Data Lake Storage Gen1 som ytterligare lagring. Anvisningar om hur du skapar ett HDInsight-kluster med Data Lake Storage Gen1 som standardlagring finns i Skapa ett HDInsight-kluster med Data Lake Storage Gen1 som standardlagring.

Anteckning

Om du ska använda Data Lake Storage Gen1 som ytterligare lagring för HDInsight-kluster rekommenderar vi starkt att du gör detta när du skapar klustret enligt beskrivningen i den här artikeln. Att lägga till Data Lake Storage Gen1 som ytterligare lagring i ett befintligt HDInsight-kluster är en komplicerad process som är känslig för fel.

För klustertyper som stöds kan Data Lake Storage Gen1 användas som standardlagring eller ytterligare lagringskonto. När Data Lake Storage Gen1 används som ytterligare lagring är standardlagringskontot för klustren fortfarande Azure Blob Storage (WASB) och klusterrelaterade filer (till exempel loggar osv.) skrivs fortfarande till standardlagringen, medan de data som du vill bearbeta kan lagras i en Data Lake Storage Gen1. Användning av Data Lake Storage Gen1 som ytterligare ett lagringskonto påverkar inte prestanda eller möjligheten att läsa/skriva till lagringen från klustret.

Använda Data Lake Storage Gen1 för HDInsight-klusterlagring

Här följer några viktiga saker att tänka på när du använder HDInsight med Data Lake Storage Gen1:

  • Alternativ för att skapa HDInsight-kluster med åtkomst till Data Lake Storage Gen1 eftersom ytterligare lagringsutrymme är tillgängligt för HDInsight-versionerna 3.2, 3.4, 3.5 och 3.6.

Att konfigurera HDInsight så att det fungerar med Data Lake Storage Gen1 med Hjälp av PowerShell omfattar följande steg:

  • Skapa ett Data Lake Storage Gen1-konto
  • Konfigurera autentisering för rollbaserad åtkomst till Data Lake Storage Gen1
  • Skapa HDInsight-kluster med autentisering för att Data Lake Storage Gen1
  • Köra ett testjobb i klustret

Förutsättningar

Anteckning

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Innan du påbörjar de här självstudierna måste du ha:

  • En Azure-prenumeration. Se Hämta en kostnadsfri utvärderingsversion av Azure.

  • Installera Azure PowerShell 1.0 eller senare. Se Så här installerar och konfigurerar du Azure PowerShell.

  • Windows SDK. Du kan installera det härifrån. Du använder detta för att skapa ett säkerhetscertifikat.

  • Microsoft Entra tjänstens huvudnamn. Stegen i den här självstudien innehåller instruktioner om hur du skapar ett huvudnamn för tjänsten i Microsoft Entra ID. Du måste dock vara en Microsoft Entra administratör för att kunna skapa ett huvudnamn för tjänsten. Om du är Microsoft Entra administratör kan du hoppa över det här kravet och fortsätta med självstudien.

    Om du inte är Microsoft Entra administratör kan du inte utföra de steg som krävs för att skapa ett huvudnamn för tjänsten. I sådana fall måste din Microsoft Entra-administratör först skapa ett huvudnamn för tjänsten innan du kan skapa ett HDInsight-kluster med Data Lake Storage Gen1. Tjänstens huvudnamn måste också skapas med hjälp av ett certifikat, enligt beskrivningen i Skapa ett huvudnamn för tjänsten med certifikat.

Skapa ett Data Lake Storage Gen1-konto

Följ de här stegen för att skapa ett Data Lake Storage Gen1-konto.

  1. Öppna ett nytt Azure PowerShell fönster på skrivbordet och ange följande kodfragment. När du uppmanas att logga in kontrollerar du att du loggar in som prenumerationsadministratör/-ägare:

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

    Anteckning

    Om du får ett fel som liknar Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid när du registrerar Data Lake Storage Gen1 resursprovidern är det möjligt att din prenumeration inte har godkänts för Data Lake Storage Gen1. Se till att du aktiverar din Azure-prenumeration för Data Lake Storage Gen1 genom att följa de här anvisningarna.

  2. Ett lagringskonto med Data Lake Storage Gen1 är associerat med en Azure-resursgrupp. Börja med att skapa en Azure-resursgrupp.

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

    Utdata bör ser ut så här:

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Skapa ett lagringskonto med Data Lake Storage Gen1. Det kontonamn som du anger får bara innehålla gemener och siffror.

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

    Du bör se utdata som liknar följande:

    ...
    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. Ladda upp exempeldata till Data Lake Storage Gen1. Vi använder detta senare i den här artikeln för att kontrollera att data är tillgängliga från ett HDInsight-kluster. Om du behöver exempeldata att ladda upp, kan du hämta mappen Ambulansdata från Azure Data Lake Git-lagringsplatsen.

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

Konfigurera autentisering för rollbaserad åtkomst till Data Lake Storage Gen1

Varje Azure-prenumeration är associerad med en Microsoft Entra ID. Användare och tjänster som har åtkomst till resurser i prenumerationen med hjälp av api:et Azure Portal eller Azure Resource Manager måste först autentisera med den Microsoft Entra ID. Åtkomst beviljas till Azure-prenumerationer och -tjänster genom att tilldela dem lämplig roll för en Azure-resurs. För tjänster identifierar tjänstens huvudnamn tjänsten i Microsoft Entra ID. Det här avsnittet illustrerar hur du beviljar en programtjänst, till exempel HDInsight, åtkomst till en Azure-resurs (lagringskontot med Data Lake Storage Gen1 du skapade tidigare) genom att skapa ett huvudnamn för tjänsten för programmet och tilldela roller till den via Azure PowerShell.

Om du vill konfigurera Active Directory-autentisering för Data Lake Storage Gen1 måste du utföra följande uppgifter.

  • Skapa ett självsignerat certifikat
  • Skapa ett program i Microsoft Entra ID och tjänstens huvudnamn

Skapa ett självsignerat certifikat

Kontrollera att du har Windows SDK installerat innan du fortsätter med stegen i det här avsnittet. Du måste också ha skapat en katalog, till exempel C:\mycertdir, där certifikatet ska skapas.

  1. I PowerShell-fönstret navigerar du till den plats där du installerade Windows SDK (vanligtvis C:\Program Files (x86)\Windows Kits\10\bin\x86 och använder verktyget MakeCert för att skapa ett självsignerat certifikat och en privat nyckel. Använd följande kommandon.

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

    Du uppmanas att ange lösenordet för den privata nyckeln. När kommandot har körts bör du se en CertFile.cer och mykey.pvk i certifikatkatalogen som du angav.

  2. Använd Pvk2Pfx-verktyget för att konvertera .pvk- och .cer-filer som MakeCert skapade till en .pfx-fil. Kör följande kommando.

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

    När du uppmanas anger du lösenordet för den privata nyckeln som du angav tidigare. Värdet som du anger för parametern -po är lösenordet som är associerat med .pfx-filen. När kommandot har slutförts bör du även se en CertFile.pfx i certifikatkatalogen som du har angett.

Skapa en Microsoft Entra ID och ett huvudnamn för tjänsten

I det här avsnittet utför du stegen för att skapa ett tjänsthuvudnamn för ett Microsoft Entra program, tilldela en roll till tjänstens huvudnamn och autentisera som tjänstens huvudnamn genom att tillhandahålla ett certifikat. Kör följande kommandon för att skapa ett program i Microsoft Entra ID.

  1. Klistra in följande cmdletar i PowerShell-konsolfönstret. Kontrollera att värdet som du anger för egenskapen -DisplayName är unikt. Dessutom är värdena för -HomePage och -IdentiferUris platshållarvärden och verifieras inte.

    $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. Skapa ett huvudnamn för tjänsten med hjälp av program-ID:t.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
     $objectId = $servicePrincipal.Id
    
  3. Ge tjänstens huvudnamn åtkomst till mappen Data Lake Storage Gen1 och filen som du kommer åt från HDInsight-klustret. Kodfragmentet nedan ger åtkomst till lagringskontots rot med Data Lake Storage Gen1 (där du kopierade exempeldatafilen) och själva filen.

    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
    

Skapa ett HDInsight Linux-kluster med Data Lake Storage Gen1 som ytterligare lagringsutrymme

I det här avsnittet skapar vi ett HDInsight Hadoop Linux-kluster med Data Lake Storage Gen1 som ytterligare lagringsutrymme. För den här versionen måste HDInsight-klustret och lagringskontot med Data Lake Storage Gen1 finnas på samma plats.

  1. Börja med att hämta prenumerationens klientorganisations-ID. Du behöver det senare.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. För den här versionen, för ett Hadoop-kluster, kan Data Lake Storage Gen1 endast användas som ytterligare lagring för klustret. Standardlagringen är fortfarande Azure Blob Storage (WASB). Därför skapar vi först det lagringskonto och de lagringscontainrar som krävs för klustret.

    # 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. Skapa HDInsight-klustret. Använd följande cmdletar.

    # 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
    

    När cmdleten har slutförts bör du se utdata som visar klusterinformationen.

Kör testjobb i HDInsight-klustret för att använda Data Lake Storage Gen1

När du har konfigurerat ett HDInsight-kluster kan du köra testjobb i klustret för att testa att HDInsight-klustret kan komma åt Data Lake Storage Gen1. För att göra det kör vi ett Hive-exempeljobb som skapar en tabell med hjälp av exempeldata som du laddade upp tidigare till ditt lagringskonto med Data Lake Storage Gen1.

I det här avsnittet ska du använda SSH i HDInsight Linux-klustret som du skapade och köra en Hive-exempelfråga.

  1. När du är ansluten startar du Hive CLI med följande kommando:

    hive
    
  2. Använd CLI och ange följande instruktioner för att skapa en ny tabell med namnet vehicles med hjälp av exempeldata i Data Lake Storage Gen1:

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

    Du bör se utdata som liknar följande:

    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
    

Komma åt Data Lake Storage Gen1 med HJÄLP av HDFS-kommandon

När du har konfigurerat HDInsight-klustret för att använda Data Lake Storage Gen1 kan du använda HDFS-gränssnittskommandona för att komma åt arkivet.

I det här avsnittet ska du använda SSH i HDInsight Linux-klustret som du skapade och köra HDFS-kommandona.

När du är ansluten använder du följande HDFS-filsystemkommando för att visa en lista över filerna i lagringskontot med Data Lake Storage Gen1.

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

Detta bör visa en lista över filen som du laddade upp tidigare till 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

Du kan också använda hdfs dfs -put kommandot för att ladda upp några filer till Data Lake Storage Gen1 och sedan använda hdfs dfs -ls för att kontrollera om filerna har laddats upp.

Se även