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.
Ö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.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
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 : {}
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.
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.
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.
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
Skapa ett huvudnamn för tjänsten med hjälp av program-ID:t.
$servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor $objectId = $servicePrincipal.Id
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.
Börja med att hämta prenumerationens klientorganisations-ID. Du behöver det senare.
$tenantID = (Get-AzContext).Tenant.TenantId
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
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.
- Om du använder en Windows-klient för att ansluta till klustret kan du läsa Använda SSH med Linux-baserad Hadoop på HDInsight från Windows.
- Om du använder en Linux-klient för att ansluta till klustret läser du Använda SSH med Linux-baserade Hadoop på HDInsight från Linux
När du är ansluten startar du Hive CLI med följande kommando:
hive
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.
- Om du använder en Windows-klient för att ansluta till klustret kan du läsa Använda SSH med Linux-baserad Hadoop på HDInsight från Windows.
- Om du använder en Linux-klient för att ansluta till klustret läser du Använda SSH med Linux-baserade Hadoop på HDInsight från Linux
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.