Bereitstellen von Cloudobjektspeicher auf Azure Databricks
Wichtig
Eine Einbindung stellt ein veraltetes Zugriffsmuster dar. Databricks empfiehlt die Verwendung von Unity Catalog für die Verwaltung des gesamten Datenzugriffs. Siehe Verbinden mit Cloudobjektspeicher und -diensten mithilfe des Unity-Katalogs.
Azure Databricks ermöglicht Benutzern das Einbinden von Cloud-Objektspeicher in das Databricks File System (DBFS), um Datenzugriffsmuster für Benutzer zu vereinfachen, die mit Cloud-Konzepten nicht vertraut sind. Eingebundene Daten funktionieren nicht mit Unity Catalog, und Databricks empfiehlt, von der Verwendung von Einbindungen weg zu migrieren und stattdessen Data Governance mit Unity Catalog zu verwalten.
Wie stellt Azure Databricks den Cloudobjektspeicher bereit?
Azure Databricks stellt eine Verknüpfung zwischen einem Arbeitsbereich und einem Cloudobjektspeicher bereit, mit dem Sie mit dem Cloudobjektspeicher mit vertrauten Dateipfaden relativ zum Databricks-Dateisystem interagieren können. Einbinden funktioniert durch Erstellen eines lokalen Alias unter dem /mnt
-Verzeichnis, das die folgenden Informationen speichert:
- Speicherort des Cloudobjektspeichers.
- Treiberspezifikationen zum Herstellen einer Verbindung mit dem Speicherkonto oder -container.
- Sicherheitsanmeldeinformationen, die für den Zugriff auf die Daten erforderlich sind.
Was ist die Syntax zum Einbinden von Speicher?
source
gibt den URI des Objektspeichers an (und kann optional Sicherheitsanmeldeinformationen codieren). mount_point
gibt den lokalen Pfad im Verzeichnis /mnt
an. Einige Objektspeicherquellen unterstützen das optionale Argument encryption_type
. Für einige Zugriffsmuster können Sie an extra_configs
zusätzliche Konfigurationsspezifikationen als Wörterbuch übergeben.
Hinweis
Databricks empfiehlt das Festlegen der Einbinden-spezifischen Spark- und Hadoop-Konfiguration als Optionen mittels extra_configs
. Dadurch wird sichergestellt, dass die Konfigurationen an die Einbindung und nicht an den Cluster oder die Sitzung gebunden sind.
dbutils.fs.mount(
source: str,
mount_point: str,
encryption_type: Optional[str] = "",
extra_configs: Optional[dict[str:str]] = None
)
Wenden Sie sich an Ihren Arbeitsbereichs- und Cloud-Administrator, bevor Sie Dateneinbindungen konfigurieren oder ändern, da eine unsachgemäße Konfiguration allen Benutzern in Ihrem Arbeitsbereich ungesicherten Zugriff gewähren kann.
Hinweis
Zusätzlich zu den in diesem Artikel beschriebenen Ansätzen können Sie das Einbinden eines Buckets mit dem Databricks-Terraform-Anbieter und databricks_mount automatisieren.
Aufheben der Bereitstellung eines Bereitstellungspunkts
Verwenden Sie den folgenden Befehl, um die Bereitstellung eines Bereitstellungspunkts aufzuheben:
dbutils.fs.unmount("/mnt/<mount-name>")
Warnung
Um Fehler zu vermeiden, ändern Sie niemals einen Bereitstellungspunkt, während andere Aufträge darin lesen oder schreiben. Nachdem Sie eine Bereitstellung geändert haben, sollten Sie für alle anderen ausgeführten Cluster immer dbutils.fs.refreshMounts()
ausführen, um etwaige Bereitstellungsupdates zu verteilen. Siehe refreshMounts-Befehl (dbutils.fs.refreshMounts).
Bereitstellen von ADLS Gen2 oder Blob Storage mit ABFS
Sie können Daten in einem Azure-Speicherkonto bereitstellen, indem Sie einen Dienstprinzipal der Microsoft Entra ID-Anwendung für die Authentifizierung verwenden. Weitere Informationen finden Sie unter Zugriff auf Speicher mit Microsoft Entra ID (früher Azure Active Directory) und einem Dienstprinzipal.
Wichtig
- Alle Benutzer im Azure Databricks-Arbeitsbereich haben Zugriff auf das bereitgestellte ADLS Gen2-Konto. Dem Dienstprinzipal, den Sie für den Zugriff auf das ADLS Gen2-Konto verwenden, sollte nur Zugriff auf dieses ADLS Gen2-Konto gewährt werden. Ihm sollte kein Zugriff auf andere Azure-Ressourcen gewährt werden.
- Wenn Sie einen Bereitstellungspunkt über einen Cluster erstellen, können Benutzer des Clusters sofort auf den Bereitstellungspunkt zugreifen. Um den Bereitstellungspunkt in einem anderen ausgeführten Cluster zu verwenden, müssen Sie
dbutils.fs.refreshMounts()
auf diesem ausgeführten Cluster ausführen, um den neu erstellten Bereitstellungspunkt verfügbar zu machen. - Das Aufheben der Bereitstellung eines Bereitstellungspunkts während der Ausführung von Aufträgen kann zu Fehlern führen. Stellen Sie sicher, dass die Bereitstellung von Speicher nicht im Rahmen der Verarbeitung von Produktionsaufträgen aufgehoben wird.
- Bereitstellungspunkte, die Geheimnisse verwenden, werden nicht automatisch aktualisiert. Wenn der eingebundene Speicher auf einem Geheimnis basiert, das rotiert, abläuft oder gelöscht wird, können Fehler wie z. B.
401 Unauthorized
auftreten. Um einen solchen Fehler zu beheben, müssen Sie die Einbindung des Speichers aufheben und den Speicher erneut einbinden. - Der hierarchische Namespace (HNS) muss aktiviert sein, um ein Azure Data Lake Storage Gen2-Speicherkonto mithilfe des ABFS-Endpunkts erfolgreich bereitstellen zu können.
Führen Sie folgende Schritte in Ihrem Notebook aus, um sich zu authentifizieren und einen Bereitstellungspunkt zu erstellen.
configs = {"fs.azure.account.auth.type": "OAuth",
"fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id": "<application-id>",
"fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
"fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}
# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
mount_point = "/mnt/<mount-name>",
extra_configs = configs)
val configs = Map(
"fs.azure.account.auth.type" -> "OAuth",
"fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id" -> "<application-id>",
"fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
"fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
mountPoint = "/mnt/<mount-name>",
extraConfigs = configs)
Replace
<application-id>
durch die Anwendungs-ID (Client) für die Active Directory-Anwendung.<scope-name>
durch den Namen des Databricks-Geheimnisbereichs.<service-credential-key-name>
durch den Namen des Schlüssels, der den geheimen Clientschlüssel enthält.<directory-id>
durch die Verzeichnis-ID (Mandant) für die Azure Active Directory-Anwendung.<container-name>
durch den Namen eines Containers im ADLS Gen2-Speicherkonto.<storage-account-name>
durch den Namen des ADLS Gen2-Speicherkontos.<mount-name>
durch den Namen des vorgesehenen Bereitstellungspunkts in DBFS.