Använda Data Lake Storage Gen1 med Azure HDInsight-kluster

Kommentar

Distribuera nya HDInsight-kluster med Azure Data Lake Storage Gen2 för bättre prestanda och nya funktioner.

Om du vill analysera data i HDInsight-kluster kan du lagra data antingen i Azure Blob storage, Azure Data Lake Storage Gen1 eller Azure Data Lake Storage Gen2. Med alla lagringsalternativ kan du på ett säkert sätt ta bort HDInsight-kluster som används för beräkning utan att förlora användardata.

I den här artikeln får du lära dig hur Data Lake Storage Gen1 fungerar med HDInsight-kluster. Information om hur Azure Blob Storage fungerar med HDInsight-kluster finns i Använda Azure Blob Storage med Azure HDInsight-kluster. Mer information om hur du skapar ett HDInsight-kluster finns i Skapa Apache Hadoop-kluster i HDInsight.

Kommentar

Data Lake Storage Gen1 nås alltid via en säker kanal, så det finns inget adls namn på filsystemets schema. Du använder alltid adl.

Kommentar

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.

Tillgänglighet för HDInsight-kluster

Apache Hadoop stöder en uppfattning om standardfilsystemet. Standardfilsystemet kräver att ett standardschema och en utfärdare används. Det kan också användas för att matcha relativa sökvägar. Under processen för att skapa HDInsight-kluster anger du en blobcontainer i Azure Storage som standardfilsystem. Eller med HDInsight 3.5 och senare versioner kan du välja antingen Azure Blob Storage eller Azure Data Lake Storage Gen1 som standardfilsystem med några få undantag. Klustret och lagringskontot måste finnas i samma region.

HDInsight-kluster kan använda Data Lake Storage Gen1 på två sätt:

  • Som standardlagring
  • Som ytterligare lagring, med Azure Blob Storage som standardlagring.

För närvarande stöder endast några av HDInsight-klustertyperna/-versionerna användning av Data Lake Storage Gen1 som standardlagring och ytterligare lagringskonton:

Typ av HDInsight-kluster Data Lake Storage Gen1 som standardlagring Data Lake Storage Gen1 som ytterligare lagring Kommentar
HDInsight version 4.0 Nej Nej ADLS Gen1 stöds inte med HDInsight 4.0
HDInsight version 3.6 Ja Ja Förutom HBase
HDInsight version 3.5 Ja Ja Förutom HBase
HDInsight version 3.4 Nej Ja
HDInsight version 3.3 Nej Nej
HDInsight version 3.2 Nej Ja

Varning

HDInsight HBase stöds inte med Azure Data Lake Storage Gen1

Att använda Data Lake Storage Gen1 som ytterligare ett lagringskonto påverkar inte prestandan. Eller möjligheten att läsa eller skriva till Azure Blob Storage från klustret.

Använda Data Lake Storage Gen1 som standardlagring

När HDInsight distribueras med Data Lake Storage Gen1 som standardlagring lagras de klusterrelaterade filerna i adl://mydatalakestore/<cluster_root_path>/, där <cluster_root_path> är namnet på en mapp som du skapar i Data Lake Storage. Genom att ange en rotsökväg för varje kluster kan du använda samma Data Lake Storage-konto för mer än ett kluster. Så du kan ha en konfiguration enligt följande:

  • Kluster 1 kan använda sökvägen adl://mydatalakestore/cluster1storage
  • Kluster 2 kan använda sökvägen adl://mydatalakestore/cluster2storage

Observera att båda klustren använder samma Data Lake Storage Gen1-konto mydatalakestore. Varje kluster har åtkomst till sitt eget rotfilsystem i Data Lake Storage. Distributionsupplevelsen i Azure-portalen uppmanar dig att använda ett mappnamn, till exempel /clusters/<clustername> för rotsökvägen.

Om du vill använda Data Lake Storage Gen1 som standardlagring måste du ge tjänstens huvudnamn åtkomst till följande sökvägar:

  • Data Lake Storage Gen1-kontoroten. Till exempel: adl://mydatalakestore/.
  • Mappen för alla klustermappar. Till exempel: adl://mydatalakestore/clusters.
  • Mappen för klustret. Till exempel: adl://mydatalakestore/clusters/cluster1storage.

Mer information om hur du skapar tjänstens huvudnamn och beviljar åtkomst finns i Konfigurera Data Lake Storage-åtkomst.

Extrahera ett certifikat från Azure Keyvault för användning vid skapande av kluster

Om certifikatet för tjänstens huvudnamn lagras i Azure Key Vault måste du konvertera certifikatet till rätt format. Följande kodfragment visar hur du utför konverteringen.

Ladda först ned certifikatet från Key Vault och extrahera SecretValueText.

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

Konvertera SecretValueText sedan till ett certifikat.

$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)

Sedan kan du använda $identityCertificate för att distribuera ett nytt kluster som i följande kodfragment:

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

Använda Data Lake Storage Gen1 som ytterligare lagring

Du kan också använda Data Lake Storage Gen1 som ytterligare lagring för klustret. I sådana fall kan klustrets standardlagring antingen vara ett Azure Blob Storage- eller Azure Data Lake Storage Gen1-konto. När du kör HDInsight-jobb mot data som lagras i Azure Data Lake Storage Gen1 som ytterligare lagring använder du den fullständigt kvalificerade sökvägen. Till exempel:

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

Det finns inga cluster_root_path i URL:en nu. Det beror på att Data Lake Storage inte är en standardlagring i det här fallet. Så allt du behöver göra är att ange sökvägen till filerna.

Om du vill använda en Data Lake Storage Gen1 som ytterligare lagring ger du tjänstens huvudnamn åtkomst till sökvägarna där filerna lagras. Till exempel:

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

Mer information om hur du skapar tjänstens huvudnamn och beviljar åtkomst finns i Konfigurera Data Lake Storage-åtkomst.

Använda mer än ett Data Lake Storage Gen1-konto

Du kan lägga till ett Data Lake Storage-konto som ytterligare och lägga till fler än ett Data Lake Storage-konton. Ge HDInsight-klustret behörighet för data i ett eller flera Data Lake Storage-konton. Se Konfigurera Data Lake Storage Gen1-åtkomst.

Konfigurera Data Lake Storage Gen1-åtkomst

Om du vill konfigurera Azure Data Lake Storage Gen1-åtkomst från ditt HDInsight-kluster måste du ha ett Microsoft Entra-tjänstens huvudnamn. Endast en Microsoft Entra-administratör kan skapa ett huvudnamn för tjänsten. Tjänstens huvudnamn måste skapas med ett certifikat. Mer information finns i Snabbstart: Konfigurera kluster i HDInsight och Create service principal with self-signed-certificate (Skapa tjänstens huvudnamn med självsignerat certifikat).

Kommentar

Om du ska använda Azure 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 Azure Data Lake Storage Gen1 som ytterligare lagring i ett befintligt HDInsight-kluster är inte ett scenario som stöds.

Mer information om åtkomstkontrollmodellen finns i Åtkomstkontroll i Azure Data Lake Storage Gen1.

Åtkomst till filer från klustret

Det finns flera sätt att komma åt filerna i Data Lake Storage från ett HDInsight-kluster.

  • Via det fullständiga namnet. Med den här metoden kan du ange den fullständiga sökvägen till filen som du vill öppna.

    adl://<data_lake_account>.azuredatalakestore.net/<cluster_root_path>/<file_path>
    
  • Via det förkortade sökvägsformatet. Med den här metoden ersätter du sökvägen upp till klusterroten med:

    adl:///<file path>
    
  • Med den relativa sökvägen. Med den här metoden anger du bara den relativa sökvägen till den fil som du vill öppna.

    /<file.path>/
    

Exempel på dataåtkomst

Exemplen baseras på en ssh-anslutning till huvudnoden i klustret. Exemplen använder alla tre URI-scheman. Ersätt DATALAKEACCOUNT och CLUSTERNAME med relevanta värden.

Några hdfs-kommandon

  1. Skapa en fil på lokal lagring.

    touch testFile.txt
    
  2. Skapa kataloger på klusterlagring.

    hdfs dfs -mkdir adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -mkdir adl:///sampledata2/
    hdfs dfs -mkdir /sampledata3/
    
  3. Kopiera data från lokal lagring till klusterlagring.

    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. Lista kataloginnehåll i klusterlagring.

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

Skapa en Hive-tabell

Tre filplatser visas i illustrativa syften. Använd bara en av posterna för LOCATION faktisk körning.

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/';

Identifiera lagringssökväg från Ambari

Om du vill identifiera den fullständiga sökvägen till det konfigurerade standardarkivet går du till HDFS-konfigurationer> och anger fs.defaultFS i filterinmatningsrutan.

Skapa HDInsight-kluster med åtkomst till Data Lake Storage Gen1

Använd följande länkar för detaljerade instruktioner om hur du skapar HDInsight-kluster med åtkomst till Data Lake Storage Gen1.

Uppdatera HDInsight-certifikatet för Data Lake Storage Gen1-åtkomst

I följande exempel läser PowerShell-koden ett certifikat från en lokal fil eller Azure Key Vault och uppdaterar HDInsight-klustret med det nya certifikatet för åtkomst till Azure Data Lake Storage Gen1. Ange ett eget HDInsight-klusternamn, resursgruppsnamn, prenumerations-ID, app ID, lokal sökväg till certifikatet. Skriv in lösenordet när du uppmanas att göra det.

$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

Nästa steg

I den här artikeln har du lärt dig hur du använder HDFS-kompatibla Azure Data Lake Storage Gen1 med HDInsight. Med den här lagringen kan du skapa anpassningsbara, långsiktiga lösningar för arkivering av datainsamling. Och använd HDInsight för att låsa upp informationen i lagrade strukturerade och ostrukturerade data.

Mer information finns i: