Data Lake Storage Gen1 gebruiken met Azure HDInsight-clusters

Notitie

Implementeer nieuwe HDInsight-clusters met behulp van Azure Data Lake Storage Gen2 voor verbeterde prestaties en nieuwe functies.

Als u gegevens wilt analyseren in een HDInsight-cluster, kunt u de gegevens opslaan in Azure Blob storage, Azure Data Lake Storage Gen1 of Azure Data Lake Storage Gen2. Met alle opslagopties kunt u HDInsight-clusters die worden gebruikt voor berekeningen veilig verwijderen zonder dat gebruikersgegevens verloren gaan.

In dit artikel leert u hoe Data Lake Storage Gen1 werkt met HDInsight-clusters. Zie Azure Blob Storage gebruiken met Azure HDInsight-clusters voor meer informatie over hoe Azure Blob Storage werkt met HDInsight-clusters. Zie Apache Hadoop-clusters maken in HDInsight voor meer informatie over het maken van een HDInsight-cluster.

Notitie

Data Lake Storage Gen1 wordt altijd geopend via een beveiligd kanaal, dus er is geen adls naam voor het bestandssysteemschema. U gebruikt altijd adl.

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.

Beschikbaarheid voor HDInsight-clusters

Apache Hadoop ondersteunt een idee van het standaardbestandssysteem. Het standaardbestandssysteem impliceert een standaardschema en instantie. De toepassing kan ook worden gebruikt om relatieve paden om te zetten. Geef tijdens het maken van het HDInsight-cluster een blobcontainer in Azure Storage op als het standaardbestandssysteem. Of met HDInsight 3.5 en nieuwere versies kunt u Azure Blob Storage of Azure Data Lake Storage Gen1 selecteren als het standaardbestandensysteem met een paar uitzonderingen. Het cluster en het opslagaccount moeten worden gehost in dezelfde regio.

HDInsight-clusters kunnen Data Lake Storage Gen1 op twee manieren gebruiken:

  • als standaardopslag
  • Als extra opslag, met Azure Blob Storage als standaardopslag.

Op dit moment ondersteunen slechts enkele HDInsight-clustertypen/-versies het gebruik van Data Lake Storage Gen1 als standaardopslag en extra opslagaccounts:

HDInsight-clustertype Data Lake Storage Gen1 als standaardopslag Data Lake Storage Gen1 als extra opslag Opmerkingen
HDInsight versie 4.0 Nee Nr. ADLS Gen1 wordt niet ondersteund met HDInsight 4.0
HDInsight-versie 3.6 Ja Ja Behalve HBase
HDInsight-versie 3.5 Ja Ja Behalve HBase
HDInsight-versie 3.4 Nr. Ja
HDInsight-versie 3.3 Nee Nr.
HDInsight-versie 3.2 Nr. Ja

Waarschuwing

HDInsight HBase wordt niet ondersteund met Azure 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 Azure Blob Storage te lezen of schrijven.

Data Lake Storage Gen1 gebruiken als standaardopslag

Wanneer HDInsight wordt geïmplementeerd met Data Lake Storage Gen1 als standaardopslag, worden de clustergerelateerde bestanden opgeslagen in adl://mydatalakestore/<cluster_root_path>/, waarbij <cluster_root_path> de naam is van een map die u in Data Lake Storage maakt. Door een hoofdpad voor elk cluster op te geven, kunt u hetzelfde Data Lake Storage-account voor meer dan één cluster gebruiken. U kunt dus instellingen hebben waarbij:

  • Cluster 1 kan het pad gebruiken adl://mydatalakestore/cluster1storage
  • Cluster 2 kan het pad gebruiken adl://mydatalakestore/cluster2storage

U ziet dat beide clusters hetzelfde Data Lake Storage Gen1-account mydatalakestore gebruiken. Elk cluster heeft toegang tot een eigen hoofdbestandssysteem in Data Lake Storage. De implementatie-ervaring van Azure Portal vraagt u om een mapnaam, zoals /clusters/<clusternaam> , te gebruiken voor het hoofdpad.

Als u Data Lake Storage Gen1 als standaardopslag wilt gebruiken, moet u de service-principal toegang verlenen tot de volgende paden:

  • De hoofdmap van het Data Lake Storage Gen1-account. Bijvoorbeeld: adl://mydatalakestore/.
  • De map voor alle mappen van het cluster. Bijvoorbeeld: adl://mydatalakestore/clusters.
  • De map voor het cluster. Bijvoorbeeld: adl://mydatalakestore/clusters/cluster1storage.

Zie Data Lake Storage-toegang configureren voor meer informatie over het maken van een service-principal en het verlenen van toegang.

Een certificaat uit Azure Keyvault extraheren voor gebruik bij het maken van een cluster

Als het certificaat voor uw service-principal is opgeslagen in Azure Key Vault, moet u het certificaat converteren naar de juiste indeling. De volgende codefragmenten laten zien hoe u de conversie uitvoert.

Download eerst het certificaat uit Key Vault en pak het SecretValueTextuit.

$certPassword = Read-Host "Enter Certificate Password"
$cert = (Get-AzureKeyVaultSecret -VaultName 'MY-KEY-VAULT' -Name 'MY-SECRET-NAME')
$certValue = [System.Convert]::FromBase64String($cert.SecretValueText)

Converteer vervolgens het SecretValueText naar een certificaat.

$certObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $certValue,$null,"Exportable, PersistKeySet"
$certBytes = $certObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword.SecretValueText);
$identityCertificate = [System.Convert]::ToBase64String($certBytes)

Vervolgens kunt u het $identityCertificate gebruiken om een nieuw cluster te implementeren, zoals in het volgende fragment:

New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile $pathToArmTemplate `
    -identityCertificate $identityCertificate `
    -identityCertificatePassword $certPassword.SecretValueText `
    -clusterName  $clusterName `
    -clusterLoginPassword $SSHpassword `
    -sshPassword $SSHpassword `
    -servicePrincipalApplicationId $application.ApplicationId

Data Lake Storage Gen1 gebruiken als extra opslag

U kunt Data Lake Storage Gen1 ook gebruiken als extra opslag voor het cluster. In dergelijke gevallen kan de standaardopslag van het cluster een Azure Blob-opslag of een Azure Data Lake Storage Gen1-account zijn. Wanneer u HDInsight-taken uitvoert voor de gegevens die zijn opgeslagen in Azure Data Lake Storage Gen1 als extra opslag, gebruikt u het volledig gekwalificeerde pad. Bijvoorbeeld:

adl://mydatalakestore.azuredatalakestore.net/<file_path>

De URL bevat nu geen cluster_root_path . Dat komt doordat Data Lake Storage in dit geval geen standaardopslag is. U hoeft alleen maar het pad naar de bestanden op te geven.

Als u een Data Lake Storage Gen1 als extra opslag wilt gebruiken, verleent u de service-principal toegang tot de paden waar uw bestanden worden opgeslagen. Bijvoorbeeld:

adl://mydatalakestore.azuredatalakestore.net/<file_path>

Zie Data Lake Storage-toegang configureren voor meer informatie over het maken van een service-principal en het verlenen van toegang.

Meer dan één Data Lake Storage Gen1-account gebruiken

U kunt een Data Lake Storage-account toevoegen als extra en meer dan één Data Lake Storage-account toevoegen. Geef het HDInsight-cluster toestemming voor gegevens in een of meer Data Lake Storage-accounts. Zie Data Lake Storage Gen1-toegang configureren.

Toegang tot Data Lake Storage Gen1 configureren

Als u Azure Data Lake Storage Gen1-toegang vanuit uw HDInsight-cluster wilt configureren, moet u een Microsoft Entra-service-principal hebben. Alleen een Microsoft Entra-beheerder kan een service-principal maken. De service-principal moet worden gemaakt met een certificaat. Zie voor meer informatie Snelstartgids: Clusters instellen in HDInsight en Service-principal maken met zelfondertekend certificaat.

Notitie

Als u Azure Data Lake Storage Gen1 gaat gebruiken als extra opslag voor HDInsight-cluster, wordt u ten zeerste aangeraden dit te doen terwijl u het cluster maakt, zoals beschreven in dit artikel. Het toevoegen van Azure Data Lake Storage Gen1 als extra opslag aan een bestaand HDInsight-cluster is geen ondersteund scenario.

Zie Toegangsbeheer in Azure Data Lake Storage Gen1 voor meer informatie over het toegangsbeheermodel.

Bestanden openen vanuit het cluster

Er zijn verschillende manieren waarop u toegang hebt tot de bestanden in Data Lake Storage vanuit een HDInsight-cluster.

  • De volledig gekwalificeerde naam gebruiken. Met deze methode geeft u het volledige pad op naar het bestand dat u wilt openen.

    adl://<data_lake_account>.azuredatalakestore.net/<cluster_root_path>/<file_path>
    
  • De verkorte padnotatie gebruiken. Met deze methode vervangt u het pad naar de hoofdmap van het cluster door:

    adl:///<file path>
    
  • Het relatieve pad gebruiken. Met deze methode geeft u alleen het volledige relatieve pad op naar het bestand dat u wilt openen.

    /<file.path>/
    

Voorbeelden van gegevenstoegang

Voorbeelden zijn gebaseerd op een SSH-verbinding met het hoofdknooppunt van het cluster. In de voorbeelden worden alle drie de URI-schema's gebruikt. Vervang DATALAKEACCOUNT en CLUSTERNAME door de relevante waarden.

Een paar HDFS-opdrachten

  1. Maak een bestand in de lokale opslag.

    touch testFile.txt
    
  2. Maak mappen in clusteropslag.

    hdfs dfs -mkdir adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -mkdir adl:///sampledata2/
    hdfs dfs -mkdir /sampledata3/
    
  3. Gegevens kopiëren van lokale opslag naar clusteropslag.

    hdfs dfs -copyFromLocal testFile.txt adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -copyFromLocal testFile.txt adl:///sampledata2/
    hdfs dfs -copyFromLocal testFile.txt /sampledata3/
    
  4. Lijst met mapinhoud op clusteropslag.

    hdfs dfs -ls adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -ls adl:///sampledata2/
    hdfs dfs -ls /sampledata3/
    

Een Hive-tabel maken

Er worden drie bestandslocaties weergegeven voor illustratieve doeleinden. Gebruik slechts één van de LOCATION vermeldingen voor de werkelijke uitvoering.

DROP TABLE myTable;
CREATE EXTERNAL TABLE myTable (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE
LOCATION 'adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/example/data/';
LOCATION 'adl:///example/data/';
LOCATION '/example/data/';

Opslagpad van Ambari identificeren

Als u het volledige pad naar het geconfigureerde standaardarchief wilt identificeren, gaat u naar HDFS-configuraties> en voert fs.defaultFS u het filterinvoervak in.

HDInsight-clusters maken met toegang tot Data Lake Storage Gen1

Gebruik de volgende koppelingen voor gedetailleerde instructies voor het maken van HDInsight-clusters met toegang tot Data Lake Storage Gen1.

Het HDInsight-certificaat voor toegang tot Data Lake Storage Gen1 vernieuwen

In het volgende voorbeeld leest PowerShell-code een certificaat uit een lokaal bestand of Azure Key Vault en werkt u uw HDInsight-cluster bij met het nieuwe certificaat voor toegang tot Azure Data Lake Storage Gen1. Geef uw eigen HDInsight-clusternaam, resourcegroepnaam, abonnements-id, app IDlokaal pad naar het certificaat op. Typ het wachtwoord wanneer u hierom wordt gevraagd.

$clusterName = '<clustername>'
$resourceGroupName = '<resourcegroupname>'
$subscriptionId = '01234567-8a6c-43bc-83d3-6b318c6c7305'
$appId = '01234567-e100-4118-8ba6-c25834f4e938'
$addNewCertKeyCredential = $true
$certFilePath = 'C:\localfolder\adls.pfx'
$KeyVaultName = "my-key-vault-name"
$KeyVaultSecretName = "my-key-vault-secret-name"
$certPassword = Read-Host "Enter Certificate Password"
# certSource
# 0 - create self signed cert
# 1 - read cert from file path
# 2 - read cert from key vault
$certSource = 0

Login-AzAccount
Select-AzSubscription -SubscriptionId $subscriptionId

if($certSource -eq 0)
{
    Write-Host "Generating new SelfSigned certificate"

    $cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=hdinsightAdlsCert" -KeySpec KeyExchange
    $certBytes = $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword);
    $certString = [System.Convert]::ToBase64String($certBytes)
}
elseif($certSource -eq 1)
{

    Write-Host "Reading the cert file from path $certFilePath"

    $cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2($certFilePath, $certPassword)
    $certString = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($certFilePath))
}
elseif($certSource -eq 2)
{

    Write-Host "Reading the cert file from Azure Key Vault $KeyVaultName"

    $cert = (Get-AzureKeyVaultSecret -VaultName $KeyVaultName -Name $KeyVaultSecretName)
    $certValue = [System.Convert]::FromBase64String($cert.SecretValueText)
    $certObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $certValue, $null,"Exportable, PersistKeySet"

    $certBytes = $certObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword.SecretValueText);

    $certString =[System.Convert]::ToBase64String($certBytes)
}

if($addNewCertKeyCredential)
{
    Write-Host "Creating new KeyCredential for the app"
    $keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
    New-AzADAppCredential -ApplicationId $appId -CertValue $keyValue -EndDate $cert.NotAfter -StartDate $cert.NotBefore
    Write-Host "Waiting for 7 minutes for the permissions to get propagated"
    Start-Sleep -s 420 #7 minutes
}

Write-Host "Updating the certificate on HDInsight cluster..."

Invoke-AzResourceAction `
    -ResourceGroupName $resourceGroupName `
    -ResourceType 'Microsoft.HDInsight/clusters' `
    -ResourceName $clusterName `
    -ApiVersion '2015-03-01-preview' `
    -Action 'updateclusteridentitycertificate' `
    -Parameters @{ ApplicationId = $appId; Certificate = $certString; CertificatePassword = $certPassword.ToString() } `
    -Force

Volgende stappen

In dit artikel hebt u geleerd hoe u HDFS-compatibele Azure Data Lake Storage Gen1 gebruikt met HDInsight. Met deze opslag kunt u aanpasbare, langetermijnoplossingen voor het archiveren van gegevens bouwen. En gebruik HDInsight om de informatie in de opgeslagen gestructureerde en ongestructureerde gegevens te ontgrendelen.

Zie voor meer informatie: