Herstellen einer Verbindung mit Azure Data Lake Storage Gen2 und Blob Storage

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

Databricks empfiehlt die Verwendung des Unity-Katalogs zum Konfigurieren des Zugriffs auf Azure Data Lake Storage Gen2 und Volumes für die direkte Interaktion mit Dateien. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit Cloudobjektspeichern mithilfe von Unity Catalog.

Hinweis

Herstellen einer Verbindung mit Azure Data Lake Storage Gen2 oder Blob Storage mithilfe von Azure-Anmeldeinformationen

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

  • OAuth 2.0 mit einem Microsoft Entra ID-Dienstprinzipal: Databricks empfiehlt die Verwendung von Microsoft Entra ID-Dienstprinzipalen, um eine Verbindung mit Azure Storage herzustellen. Informationen zum Erstellen eines Microsoft Entra ID-Dienstprinzipals sowie zum Bereitstellen des Zugriffs auf Azure-Speicherkonten für den Dienstprinzipal finden Sie unter Zugreifen auf den Speicher mit Microsoft Entra ID (ehemals Azure Active Directory) mithilfe eines Dienstprinzipals.

    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 (ehemals Azure Active Directory). 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.

  • 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.

    Zum Anzeigen der Zugriffsschlüssel eines Kontos müssen Sie über die Rolle „Besitzer“, „Mitwirkender“ oder über die Dienstrolle „Speicherkonto-Schlüsseloperator“ im Speicherkonto verfügen.

Databricks empfiehlt zum Speichern aller Anmeldeinformationen die Verwendung von Geheimnisbereichen. Sie können Benutzern, Dienstprinzipalen und Gruppen in Ihrem Arbeitsbereich Lesezugriff für den Geheimnisbereich einräumen. Dadurch werden die Azure-Anmeldeinformationen geschützt, während Benutzern der Zugriff auf Azure Storage ermöglicht wird. Informationen zum Erstellen eines Geheimnisbereichs finden Sie unter Geheimnisbereiche.

Festlegen von Spark-Eigenschaften, um Azure-Anmeldeinformationen für den Zugriff auf Azure Storage zu konfigurieren

Sie können Spark-Eigenschaften festlegen, um Azure-Anmeldeinformationen für den Zugriff auf Azure Storage zu konfigurieren. Die Anmeldeinformationen können entweder auf einen Cluster oder ein Notebook festgelegt 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.

Hinweis

Microsoft Entra ID-Dienstprinzipale können außerdem für den Zugriff auf Azure Storage aus einem SQL-Warehouse verwendet werden. Weitere Informationen finden Sie unter Konfiguration zur Aktivierung des Datenzugriffs.

Um Spark-Eigenschaften festzulegen, verwenden Sie den folgenden Codeausschnitt in der Spark-Konfiguration eines Clusters oder eines Notebooks:

Azure-Dienstprinzipal

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

Replace

  • <secret-scope> durch den Namen des Databricks-Geheimnisbereichs.
  • <service-credential-key> durch den Namen des Schlüssels, der den geheimen Clientschlüssel enthält.
  • <storage-account>durch den 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 (Mandant-ID) für die 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>"))

Replace

  • <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>"))

Replace

  • <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.

Zugreifen auf Azure Storage

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

Notebook mit Beispielen

ADLS Gen2 OAuth 2.0 mit Microsoft Entra ID-Dienstprinzipal-Notebook (ehemals Azure Active Directory)

Notebook abrufen

Bekannte Probleme mit Azure Data Lake Storage Gen2

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.

Siehe Bekannte Probleme mit Azure Data Lake Storage Gen2 in der Microsoft-Dokumentation.

Veraltete Muster zum Speichern und Zugreifen auf Daten von Azure Databricks

Im Folgenden finden Sie veraltete Speichermuster: