Herstellen einer Verbindung mit Azure Data Lake Storage und Blob Storage

Wichtig

Diese Dokumentation wurde eingestellt und wird unter Umständen nicht aktualisiert.

In diesem Artikel werden Legacymuster zum Konfigurieren des Zugriffs auf Azure Data Lake Storage beschrieben. Databricks empfiehlt die Verwendung des Unity-Katalogs zum Konfigurieren des Zugriffs auf Azure Data Lake Storage und Volumes für die direkte Interaktion mit Dateien. Weitere Informationen finden Sie unter Verwenden Sie Azure-verwaltete Identitäten im Unity-Katalog, um auf Speicher zuzugreifen.

In diesem Artikel wird erläutert, wie Sie eine Verbindung mit Azure Data Lake Storage und Blob Storage von Azure Databricks herstellen.

Hinweis

Der Legacy-WASB-Treiber (Windows Azure Storage Blob) ist veraltet. ABFS hat zahlreiche Vorteile gegenüber WASB. Weitere Informationen finden Sie in der Azure-Dokumentation zu ABFS. Eine Dokumentation zum Arbeiten mit dem Legacy-WASB-Treiber finden Sie unter Herstellen einer Verbindung mit Azure Blob Storage mit WASB (Legacy).

Schritt 1: Registrieren einer Microsoft Entra ID Anwendung

Durch das Registrieren einer Anwendung mit Microsoft Entra ID wird ein Dienstprinzipal erstellt, mit dem Sie Zugriff auf Azure-Speicherkonten bereitstellen können.

Um eine Microsoft Entra-ID-Anwendung zu registrieren, müssen Sie über die Rolle Application Administrator oder die Berechtigung Application.ReadWrite.All in Microsoft Entra ID verfügen.

  1. Navigieren Sie im Azure-Portal zum Dienst Microsoft Entra ID.
  2. Klicken Sie unter Verwalten auf App-Registrierungen.
  3. Klicken Sie auf + Neue Registrierung. Geben Sie einen Namen für die Anwendung ein, und klicken Sie auf Registrieren.
  4. Klicken Sie auf Zertifikate und Geheimnisse.
  5. Klicken Sie auf + Neuer geheimer Clientschlüssel.
  6. Fügen Sie eine Beschreibung für das Geheimnis hinzu, und klicken Sie auf Hinzufügen.
  7. Kopieren und speichern Sie den Wert für das neue Passwort.
  8. Kopieren und speichern Sie in der Übersicht über die Anwendungsregistrierung die Anwendungs-ID (Client) und Verzeichnis-ID (Mandant).

Schritt 2: Weisen Sie dem Dienstprinzipal Rollen zu

Sie steuern den Zugriff auf Speicherressourcen, indem Sie einer Microsoft Entra ID-Anwendungsregistrierung, die dem Speicherkonto zugeordnet ist, Rollen zuweisen. Je nach den spezifischen Anforderungen müssen Sie möglicherweise andere Rollen zuweisen.

Um Rollen für ein Speicherkonto zuweisen zu können, müssen Sie über die Azure RBAC-Rolle „Besitzer“ oder „Benutzerzugriffsadministrator“ für das Speicherkonto verfügen.

  1. Wechseln Sie im Azure-Portal zum Speicherkontendienst .
  2. Wählen Sie das Azure-Speicherkonto für diese Anwendungsregistrierung aus.
  3. Klicken Sie auf Access Control (IAM).
  4. Klicken Sie auf +Hinzufügen , und wählen Sie im Dropdownmenü " Rollenzuweisung hinzufügen " aus.
  5. Legen Sie das Feld Auswählen auf den Microsoft Entra ID-Anwendungsnamen und die Rolle auf Mitwirkender an Storage-Blobdaten fest.
  6. Klicke auf Speichern.

Schritt 3: Konfigurieren von Azure Anmeldeinformationen in Azure Databricks

Konfigurieren Sie Ihren Azure Databricks Cluster oder Notizbuch mit den Anmeldeinformationen für das Azure Speicherkonto, auf das Sie zugreifen möchten.

Unterstützte Anmeldeinformationstypen und Geheimnisspeicher

Die folgenden Anmeldeinformationen können für den Zugriff auf Azure Data Lake Storage oder Blob Storage verwendet werden:

  • OAuth 2.0 mit einem Microsoft Entra ID-Dienstprinzipal: Databricks empfiehlt die Verwendung von Microsoft Entra ID-Dienstprinzipale, um eine Verbindung mit Azure Data Lake Storage herzustellen. Führen Sie die oben beschriebenen Schritte 1 und 2 aus, um einen Microsoft Entra ID-Dienstprinzipal zu erstellen und ihm Zugriff auf Azure-Speicherkonten zu gewähren.

    Um einen Microsoft Entra ID-Dienstprinzipal zu erstellen, benötigen Sie die Application Administrator-Rolle oder die Application.ReadWrite.All-Berechtigung in Microsoft Entra ID. Um Rollen in einem Speicherkonto zuweisen zu können, müssen Sie ein Besitzer oder Benutzer mit der Azure RBAC-Rolle „Benutzerzugriffsadministrator“ für das Speicherkonto sein.

    Wichtig

    Blob-Speicher unterstützt keine Microsoft Entra ID-Dienstprinzipale.

  • Shared Access Signatures (SAS): Sie können Speicher-SAS-Token verwenden, um auf Azure Storage zuzugreifen. Mit SAS können Sie den Zugriff auf ein Speicherkonto mithilfe temporärer Token mit feiner Zugriffssteuerung einschränken.

    Sie können nur SAS-Tokenberechtigungen erteilen, die Sie selbst für das Speicherkonto, den Container oder die Datei besitzen.

  • Kontoschlüssel: Sie können Zugriffsschlüssel für Speicherkonten verwenden, um den Zugriff auf Azure Storage zu verwalten. Speicherkonto-Zugriffsschlüssel bieten Vollzugriff auf die Konfiguration eines Speicherkontos sowie auf die Daten. Databricks empfiehlt die Verwendung eines Microsoft Entra ID-Dienstprinzipals oder eines SAS-Tokens anstelle von Kontoschlüsseln, um eine Verbindung mit Azure Storage herzustellen.

    Um die Zugriffsschlüssel eines Kontos anzuzeigen, müssen Sie die Rolle des "Besitzers", "Mitwirkers" oder "Speicherkonto-Schlüsselbetreiberdienstes" für das Speicherkonto haben.

Databricks empfiehlt zum Speichern aller Anmeldeinformationen die Verwendung von Geheimnisbereichen. Sie können Benutzern, Dienstprinzipalen und Gruppen in Ihrem Arbeitsbereich Lesezugriff auf den Geheimnisbereich gewähren. Dadurch werden die Azure-Anmeldeinformationen geschützt, während Benutzern der Zugriff auf Azure Storage ermöglicht wird. Informationen zum Erstellen eines geheimen Bereichs finden Sie unter Verwalten geheimer Bereiche.

Hinweis

Microsoft Entra ID-Dienstprinzipale können auch für den Zugriff auf Azure Storage aus einem SQL Warehouse verwendet werden, siehe Datenzugriffskonfigurationen.

Festlegen von Spark-Eigenschaften zum Konfigurieren von Azure Anmeldeinformationen

Sie können Spark-Eigenschaften festlegen, um Azure-Anmeldeinformationen für den Zugriff auf Azure-Speicher zu konfigurieren. Die Anmeldeinformationen können entweder auf einen Cluster oder auf ein Notebook beschränkt werden. Verwenden Sie gleichzeitig die Zugriffssteuerung für Cluster und Notebooks, um den Zugriff auf Azure Storage zu schützen. Siehe Compute-Berechtigungen und Zusammenarbeit mithilfe von Databricks-Notebooks.

Verwenden Sie zum Festlegen von Spark-Eigenschaften den folgenden Codeausschnitt in der Spark-Konfiguration eines Clusters oder in einem Notizbuch:

Azure-Dienstprinzipal (Service Principal)

Verwenden Sie das folgende Format, um die Spark-Clusterkonfiguration festzulegen:

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

Sie können spark.conf.set in Notebooks verwenden, wie im folgenden Beispiel gezeigt:

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Ersetzen

  • <secret-scope> durch den Namen des Databricks-Geheimnisbereichs ersetzen.
  • <service-credential-key> mit dem Namen des Schlüssels, der das Client-Geheimnis enthält.
  • <storage-account> mit dem Namen des Azure-Speicherkontos.
  • <application-id> mit der Anwendungs-ID (Client-ID) für die Microsoft Entra-ID-Anwendung.
  • <directory-id> mit der Verzeichnis-ID (Mandanten-ID) der Microsoft Entra ID-Anwendung.

SAS-Token

Sie können SAS-Token für mehrere Speicherkonten in derselben Spark-Sitzung konfigurieren.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Ersetzen

  • <storage-account> mit dem Namen des Azure Storage-Kontos.
  • <scope> mit dem Namen des Azure Databricks-Geheimnisbereichs.
  • <sas-token-key> mit dem Namen des Schlüssels, der den Azure Storage-SAS-Token enthält.

Kontoschlüssel

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Ersetzen

  • <storage-account> mit dem Namen des Azure Storage-Kontos.
  • <scope> mit dem Namen des Azure Databricks-Geheimnisbereichs.
  • <storage-account-access-key> mit dem Namen des Schlüssels, der den Zugriffsschlüssel für das Azure-Speicherkonto enthält.

Schritt 4: Zugreifen auf Azure Speicher

Sobald Sie die Anmeldeinformationen für den Zugriff auf Ihren Azure-Speichercontainer richtig konfiguriert haben, können Sie mithilfe von URIs mit Ressourcen im Speicherkonto interagieren. Databricks empfiehlt die Verwendung des abfss-Treibers für mehr Sicherheit.

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

Beispiel-Notebook

ADLS OAuth 2.0 mit Microsoft Entra ID (früher Azure Active Directory) und Dienstprinzipalen-Notizbuch

Notebook abrufen

Bekannte Probleme mit Azure Data Lake Storage

Wenn Sie versuchen, auf einen über das Azure-Portal erstellten Speichercontainer zuzugreifen, wird möglicherweise der folgende Fehler angezeigt:

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

Wenn ein hierarchischer Namespace aktiviert ist, müssen Sie keine Container über das Azure-Portal erstellen. Wenn Sie dieses Problem feststellen, löschen Sie den Blob-Container über das Azure-Portal. Nach einigen Minuten können Sie auf den Container zugreifen. Alternativ können Sie Ihren abfss-URI so ändern, dass er einen anderen Container verwendet, solange dieser Container nicht über das Azure-Portal erstellt wurde.

Informationen zu bekannten Problemen mit Azure Data Lake Storage finden Sie in der Microsoft-Dokumentation.

Veraltete Muster zum Speichern und Zugreifen auf Daten von Azure Databricks

Im Folgenden finden Sie veraltete Speichermuster: