Bereitstellen von Cloudobjektspeicher auf Azure Databricks

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 (früher Azure Active Directory)-Anwendung für die Authentifizierung verwenden. Weitere Informationen finden Sie unter Zugreifen auf Speicher mit Microsoft Entra ID (ehemals Azure Active Directory) mit 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.