Herstellen einer Verbindung mit Azure Data Lake Storage Gen2 und Blob Storage
Hinweis
In diesem Artikel werden Legacy-Muster zum Konfigurieren des Zugriffs auf Azure Data Lake Storage Gen2 beschrieben. Databricks empfiehlt die Verwendung von Unity Catalog zum Konfigurieren des Zugriffs auf Azure Data Lake Storage Gen2 und Volumes für die direkte Interaktion mit Dateien. Siehe Verbinden mit Cloudobjektspeicher und -diensten mithilfe des Unity-Katalogs.
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.
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).
- Azure hat die ausstehende Einstellung von Azure Data Lake Storage Gen1 angekündigt. Azure Databricks empfiehlt die Migration aller Daten von Azure Data Lake Storage Gen1 zu Azure Data Lake Storage Gen2. Wenn Sie noch nicht migriert haben, finden Sie weitere Informationen unter Zugreifen auf Azure Data Lake Storage Gen1 von Azure Databricks.
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-Dienstprinzipale, um eine Verbindung mit Azure Data Lake Storage Gen2 herzustellen. Informationen zum Erstellen eines Microsoft Entra ID-Dienstprinzipals sowie zum Bereitstellen des Zugriffs auf Azure-Speicherkonten für den Dienstprinzipal finden Sie unter Zugriff auf Speicher mit Microsoft Entra ID (früher Azure Active Directory) und einem Dienstprinzipal.
Um einen Microsoft Entra ID-Dienstprinzipal zu erstellen, benötigen Sie die
Application Administrator
-Rolle oder dieApplication.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.
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 geheimen Bereichs finden Sie unter Verwalten geheimer Bereiche.
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)
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:
Databricks empfiehlt nicht mehr, externe Datenspeicherorte in das Databricks-Dateisystem einzubinden. Weitere Informationen finden Sie unter Bereitstellen von Cloudobjektspeicher in Azure Databricks.
Databricks empfiehlt nicht länger die Verwendung von Passthrough für Anmeldeinformationen für Azure Data Lake Storage Gen2. Weitere Informationen finden Sie unter Zugriff auf Azure Data Lake Storage mithilfe von Passthrough für Microsoft Entra ID-Anmeldeinformationen (Legacy)