Verwenden von Data Lake Storage Gen1 mit Azure HDInsight-Clustern

Hinweis

Stellen Sie neue HDInsight-Cluster mithilfe von Azure Data Lake Storage Gen2 für verbesserte Leistung und neue Funktionen bereit.

Zum Analysieren von Daten in einem HDInsight-Cluster können Sie die Daten in Azure Blob storage, Azure Data Lake Storage Gen1 oder Azure Data Lake Storage Gen2 speichern. Alle Speichervarianten ermöglichen das sichere Löschen von HDInsight-Clustern, die für Berechnungen verwendet werden, ohne dass Benutzerdaten verloren gehen.

In diesem Artikel erfahren Sie, wie Data Lake Storage Gen1 mit HDInsight-Clustern funktioniert. Weitere Informationen zur Funktionsweise von Azure Blob Storage mit HDInsight-Clustern finden Sie unter Verwenden von Azure Storage mit Azure HDInsight-Clustern. Weitere Informationen zum Erstellen eines HDInsight-Clusters finden Sie unter Erstellen von Apache Hadoop-Clustern in HDInsight.

Hinweis

Da auf Data Lake Storage Gen1 immer über einen sicheren Kanal zugegriffen wird, ist kein adls-Dateisystem-Schemaname vorhanden. Sie verwenden immer adl.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren des Azure Az PowerShell-Moduls. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Verfügbarkeit für HDInsight-Cluster

Apache Hadoop unterstützt eine Variante des Standarddateisystems. Das Standarddateisystem gibt ein Standardschema und eine Standardautorität vor. Es kann auch zur Auflösung relativer Pfade verwendet werden. Geben Sie während der Erstellung des HDInsight-Clusters einen Blobcontainer in Azure Storage als Standarddateisystem an. Mit HDInsight 3.5 und neueren Versionen können Sie alternativ bis auf wenige Ausnahmen Azure Blob Storage oder Azure Data Lake Storage Gen1 als Standarddateisystem auswählen. Cluster und Speicherkonto müssen sich in der gleichen Region befinden.

HDInsight-Cluster können Data Lake Storage Gen1 auf 2 Arten verwenden:

  • Als Standardspeicher
  • Als zusätzlicher Speicher mit Azure Blob Storage als Standardspeicher

Derzeit unterstützen nur einige HDInsight-Clustertypen/-versionen Data Lake Storage Gen1 als Konten für Standardspeicher und Zusatzspeicher:

HDInsight-Clustertyp Data Lake Storage Gen1 als Standardspeicher Data Lake Storage Gen1 als zusätzlicher Speicher Notizen
HDInsight-Version 4.0 Nein Nein ADLS Gen1 wird mit HDInsight 4.0 nicht unterstützt
HDInsight-Version 3.6 Ja Ja Mit Ausnahme von HBase
HDInsight-Version 3.5 Ja Ja Mit Ausnahme von HBase
HDInsight-Version 3.4 Nein Ja
HDInsight, Version 3.3 Nein Nein
HDInsight, Version 3.2 Nein Ja

Warnung

HDInsight HBase wird mit Azure Data Lake Storage Gen1 nicht unterstützt.

Die Verwendung von Data Lake Storage Gen1 als Konto für zusätzlichen Speicher hat keine Auswirkungen auf die Leistung. Ebenso wenig ist die Fähigkeit zum Lesen oder Schreiben in Azure Blob Storage über den Cluster betroffen.

Verwenden von Data Lake Storage Gen1 als Standardspeicher

Wenn HDInsight mit Data Lake Storage Gen1 als Standardspeicher bereitgestellt wird, werden die clusterbezogenen Dateien in adl://mydatalakestore/<cluster_root_path>/ gespeichert, wobei <cluster_root_path> der Name eines Ordners ist, den Sie in Data Lake Storage erstellen. Indem Sie einen Stammpfad für jeden Cluster angeben, können Sie dasselbe Data Lake Storage-Konto für mehrere Cluster verwenden. Beispielsweise können Sie das folgende Setup verwenden:

  • Cluster 1 kann den Pfad verwenden adl://mydatalakestore/cluster1storage
  • Cluster 2 kann den Pfad verwenden adl://mydatalakestore/cluster2storage

Beachten Sie, dass für beide Cluster dasselbe Data Lake Storage Gen1-Konto mydatalakestore verwendet wird. Jeder Cluster hat in Data Lake Storage Zugriff auf sein eigenes Stammdateisystem. Bei der Bereitstellung im Azure-Portal werden Sie aufgefordert, für den Stammpfad einen Ordnernamen wie /clusters/<Clustername> zu verwenden.

Um Data Lake Storage Gen1 als Standardspeicher zu verwenden, müssen Sie dem Dienstprinzipal Zugriff auf die folgenden Pfade gewähren:

  • Den Data Lake Storage Gen1-Kontostamm. Beispiel: adl://mydatalakestore/.
  • Den Ordner für alle Clusterordner. Beispiel: adl://mydatalakestore/clusters.
  • Den Ordner für den Cluster. Beispiel: adl://mydatalakestore/clusters/cluster1storage.

Weitere Informationen zum Erstellen von Dienstprinzipalen und zum Gewähren des Zugriffs für diese finden Sie unter „Konfigurieren des Data Lake Storage-Zugriffs“.

Extrahieren eines Zertifikats aus Azure Key Vault für die Verwendung in der Clustererstellung

Wenn das Zertifikat für den Dienstprinzipal in Azure Key Vault gespeichert ist, müssen Sie das Zertifikat in das richtige Format konvertieren. Die folgenden Codeausschnitte veranschaulichen die Durchführung der Konvertierung.

Laden Sie zuerst das Zertifikat aus Key Vault herunter, und extrahieren Sie den SecretValueText.

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

Konvertieren Sie als Nächstes SecretValueText in ein Zertifikat.

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

Anschließend können Sie mit dem $identityCertificate einen neuen Cluster wie im folgenden Codeausschnitt bereitstellen:

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

Verwenden von Data Lake Storage Gen1 als zusätzlicher Speicher

Sie können Data Lake Storage Gen1 zudem als zusätzlichen Speicher für den Cluster verwenden. In solchen Fällen kann der Cluster-Standardspeicher ein Azure Blob Storage- oder Azure Data Lake Storage Gen1-Konto sein. Wenn Sie HDInsight-Aufträge für die in Azure Data Lake Storage Gen1 als zusätzlichem Speicher gespeicherten Daten ausführen, verwenden Sie den vollqualifizierten Pfad. Beispiel:

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

Die URL enthält jetzt keinen cluster_root_path. Dies liegt daran, dass Data Lake Storage in diesem Fall kein Standardspeicher ist. Sie müssen daher nur den Pfad zu den Dateien angeben.

Um Data Lake Storage Gen1 als zusätzlichen Speicher zu verwenden, gewähren Sie dem Dienstprinzipal Zugriff auf die Pfade, in denen Ihre Dateien gespeichert sind. Beispiel:

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

Weitere Informationen zum Erstellen von Dienstprinzipalen und zum Gewähren des Zugriffs für diese finden Sie unter „Konfigurieren des Data Lake Storage-Zugriffs“.

Verwenden mehrerer Data Lake Storage Gen1-Konten

Es ist möglich, ein Data Lake Storage-Konto als zusätzlichen Speicher hinzuzufügen und auch mehrere Data Lake Storage-Konten hinzuzufügen. Erteilen Sie dem HDInsight-Cluster Berechtigungen für Daten in mindestens einem Data Lake Storage-Konto. Weitere Informationen finden Sie unter „Konfigurieren des Data Lake Storage Gen1-Zugriffs“.

Konfigurieren des Data Lake Storage Gen1-Zugriffs

Sie benötigen einen Microsoft Entra-Dienstprinzipal, um den Zugriff auf Azure Data Lake Storage Gen1 von Ihrem HDInsight-Cluster aus zu konfigurieren. Nur ein Microsoft Entra-Administrator kann einen Dienstprinzipal erstellen. Der Dienstprinzipal muss mit einem Zertifikat erstellt werden. Weitere Informationen finden Sie unter Quickstart: Set up clusters in HDInsight (Schnellstart: Einrichten von Clustern in HDInsight) und Erstellen eines Dienstprinzipals mit selbstsigniertem Zertifikat.

Hinweis

Wenn Sie Azure Data Lake Storage Gen1 als zusätzlichen Speicher für HDInsight-Cluster verwenden, wird dringend empfohlen, diesen Vorgang beim Erstellen des Clusters auszuführen, wie in diesem Artikel beschrieben. Das Hinzufügen von Azure Data Lake Storage Gen1 zu einem vorhandenen HDInsight-Cluster als zusätzlicher Speicher wird nicht unterstützt.

Weitere Informationen zum Zugriffssteuerungsmodell finden Sie unter Zugriffssteuerung in Azure Data Lake Storage Gen1.

Zugreifen auf Dateien aus dem Cluster

Es gibt mehrere Möglichkeiten, wie Sie auf die Dateien in Data Lake Storage über einen HDInsight-Cluster zugreifen können.

  • Verwenden des vollqualifizierten Namens Bei diesem Ansatz geben Sie den vollständigen Pfad zu der Datei an, auf die Sie zugreifen möchten.

    adl://<data_lake_account>.azuredatalakestore.net/<cluster_root_path>/<file_path>
    
  • Verwenden des verkürzten Pfadformats Bei diesem Ansatz ersetzen Sie den Pfad bis zum Clusterstamm durch:

    adl:///<file path>
    
  • Verwenden des relativen Pfads Bei diesem Ansatz geben Sie nur den relativen Pfad zu der Datei an, auf die Sie zugreifen möchten.

    /<file.path>/
    

Beispiele für Datenzugriff

Die Beispiele basieren auf einer ssh-Verbindung mit dem Hauptknoten des Clusters. In den Beispielen werden alle drei URI-Schemas verwendet. Ersetzen Sie DATALAKEACCOUNT und CLUSTERNAME durch die entsprechenden Werte.

Ein paar HDFS-Befehle

  1. Erstellen von Dateien im lokalen Speicher.

    touch testFile.txt
    
  2. Erstellen von Verzeichnissen im Clusterspeicher.

    hdfs dfs -mkdir adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -mkdir adl:///sampledata2/
    hdfs dfs -mkdir /sampledata3/
    
  3. Kopieren von Daten aus dem lokalen Speicher in den Clusterspeicher.

    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. Auflisten von Verzeichnisinhalten im Clusterspeicher.

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

Erstellen einer Hive-Tabelle

Zu Zwecken der Veranschaulichung werden drei Speicherorte gezeigt. Verwenden Sie für die tatsächliche Ausführung nur einen der LOCATION-Einträge.

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

Bestimmen des Speicherpfads aus Ambari

Um den vollständigen Pfad zum konfigurierten Standardspeicher zu ermitteln, navigieren Sie zu HDFS>Konfigurationen, und geben Sie fs.defaultFS in das Filtereingabefeld ein.

Erstellen von HDInsight-Clustern mit Zugriff auf Data Lake Storage Gen1

Unter den folgenden Links finden Sie eine ausführliche Anleitung, wie Sie HDInsight-Cluster mit Zugriff auf Data Lake Storage Gen1 erstellen.

Aktualisieren des HDInsight-Zertifikats für den Data Lake Storage Gen1-Zugriff

Im folgenden Beispiel liest PowerShell-Code ein Zertifikat aus einer lokalen Datei oder Azure Key Vault und aktualisiert Ihren HDInsight-Cluster mit dem neuen Zertifikat für den Zugriff auf Azure Data Lake Storage Gen1. Geben Sie Ihren eigenen HDInsight-Clusternamen, den Ressourcengruppennamen, die Abonnement-ID, die app ID und den lokalen Pfad zum Zertifikat an. Geben Sie Ihr Kennwort ein, wenn Sie dazu aufgefordert werden.

$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ächste Schritte

In diesem Artikel wurde beschrieben, wie Sie HDFS-kompatibles Azure Data Lake Storage Gen1 mit HDInsight verwenden. Mit diesem Speicher können Sie anpassbare, langfristige Archivierungslösungen für die Datenerfassung erstellen. Mit HDInsight können Sie zudem die Informationen der gespeicherten strukturierten und unstrukturierten Daten verarbeiten.

Weitere Informationen finden Sie unter