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.
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.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
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 : {}
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.
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.
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.
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
Maak een service-principal met behulp van de toepassings-id.
$servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor $objectId = $servicePrincipal.Id
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.
Begin met het ophalen van de tenant-id van het abonnement. Dat hebt u later nodig.
$tenantID = (Get-AzContext).Tenant.TenantId
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
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.
- Als u een Windows-client gebruikt voor SSH in het cluster, raadpleegt u SSH gebruiken met Hadoop op basis van Linux in HDInsight vanuit Windows.
- Als u een Linux-client gebruikt voor SSH in het cluster, raadpleegt u SSH gebruiken met Hadoop op basis van Linux in HDInsight vanuit Linux
Zodra u verbinding hebt gemaakt, start u de Hive CLI met behulp van de volgende opdracht:
hive
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.
- Als u een Windows-client gebruikt voor SSH in het cluster, raadpleegt u SSH gebruiken met Hadoop op basis van Linux in HDInsight vanuit Windows.
- Als u een Linux-client gebruikt voor SSH in het cluster, raadpleegt u SSH gebruiken met Hadoop op basis van Linux in HDInsight vanuit Linux
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.