Herstellen einer Verbindung mit Azure Blob Storage mit WASB (Legacy)

Microsoft hat den WASB-Treiber (Windows Azure Storage Blob) für Azure Blob Storage zugunsten des ABFS-Treibers (Azure Blob Filesystem) verworfen, siehe Herstellen einer Verbindung mit Azure Data Lake Storage Gen2 und Blob Storage. ABFS hat zahlreiche Vorteile gegenüber WASB; siehe Azure-Dokumentation auf ABFS.

Dieser Artikel enthält eine Dokumentation zum Verwalten von Code, der den WASB-Treiber verwendet. Databricks empfiehlt die Verwendung von ABFS für alle Verbindungen mit Azure Blob Storage.

Konfigurieren von WASB-Anmeldeinformationen in Databricks

Mit dem WASB-Treiber können Sie entweder einen Zugriffsschlüssel für ein Speicherkonto oder eine Shared Access Signature (SAS) verwenden. (Wenn Sie Daten aus einem öffentlichen Speicherkonto lesen, müssen Sie keine Anmeldeinformationen konfigurieren).

Databricks empfiehlt die Verwendung von Geheimnissen, wenn Sie Anmeldeinformationen in Azure Databricks übergeben müssen. Geheimnisse stehen allen Benutzern mit Zugriff auf den zugehörigen geheimen Bereich zur Verfügung.

Sie können Anmeldeinformationen übergeben:

  • Bereich für den Cluster in der Spark-Konfiguration
  • Bereich für das Notebook
  • Angefügt an ein bereitgestelltes Verzeichnis

Databricks empfiehlt das Upgrade all Ihrer Verbindungen, um ABFS für den Zugriff auf Azure Blob Storage zu verwenden, das ähnliche Zugriffsmuster wie WASB bereitstellt. Verwenden Sie ABFS für die beste Sicherheit und Leistung bei der Interaktion mit Azure Blob Storage.

Um Clusteranmeldeinformationen zu konfigurieren, legen Sie beim Erstellen des Clusters die Eigenschaften für die Spark-Konfiguration fest. Anmeldeinformationen, die auf Clusterebene festgelegt sind, stehen allen Benutzern mit Zugriff auf diesen Cluster zur Verfügung.

Verwenden Sie spark.conf.set(), um Anmeldeinformationen für Notebooks zu konfigurieren. Auf Notebook-Ebene übergebene Anmeldeinformationen sind für alle Benutzer mit Zugriff auf dieses Notebook verfügbar.

Festlegen von Anmeldeinformationen für Azure Blob Storage mit einem Zugriffsschlüssel für ein Speicherkonto

Ein Zugriffsschlüssel für Speicherkonten gewährt vollständigen Zugriff auf alle Container innerhalb eines Speicherkontos. Obwohl dieses Muster für die Prototyperstellung nützlich ist, sollten Sie es nicht in der Produktion verwenden, um die Risiken zu verringern, die mit der Gewährung von uneingeschränktem Zugriff auf Produktionsdaten verbunden sind.

spark.conf.set(
  "fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
  "<storage-account-access-key>"
)

Sie können Kontoschlüssel-URIs für die Verwendung von ABFS aktualisieren. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit Azure Data Lake Storage Gen2 und Blob Storage.

Festlegen von Azure Blob Storage-Anmeldeinformationen mit einer Shared Access Signature (SAS)

Sie können SAS-Token verwenden, um eingeschränkten Zugriff auf einen einzelnen Container in einem Speicherkonto zu konfigurieren, der zu einer bestimmten Zeit abläuft.

spark.conf.set(
  "fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
  "<sas-token-for-container>"
)

Zugreifen auf Azure Blob Storage mithilfe der DataFrame-API

Die Apache Spark DataFrame-API kann Anmeldeinformationen verwenden, die entweder auf Notebook- oder auf Clusterebene konfiguriert sind. Alle WASB-Treiber-URIs geben die Container- und Speicherkontonamen an. Der Verzeichnisname ist optional und kann mehrere verschachtelte Verzeichnisse relativ zum Container angeben.

wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>

Die folgenden Codebeispiele zeigen, wie Sie die DataFrames-API und die Referenz zu Databricks-Hilfsprogrammen (dbutils) verwenden können, um mit einem benannten Verzeichnis in einem Container zu interagieren.

df = spark.read.format("parquet").load("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

dbutils.fs.ls("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

Aktualisieren Sie Ihre URIs, um ABFS anstelle von WASB zu aktualisieren. Weitere Informationen finden Sie unter Zugreifen auf Azure Storage.

Zugreifen auf Azure Blob Storage mit SQL

Anmeldeinformationen, die in der Sitzungskonfiguration eines Notebooks festgelegt sind, sind für Notebooks mit Spark SQL nicht zugänglich.

Nachdem ein Kontozugriffsschlüssel oder eine SAS in Ihrer Clusterkonfiguration eingerichtet wurde, können Sie Spark-SQL-Standardabfragen mit Azure Blob Storage verwenden:

-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/";

Aktualisieren Sie Ihre URIs, um ABFS anstelle von WASB zu aktualisieren, siehe Zugreifen auf Azure Storage.

Einbinden eines Azure Blob Storage-Containers in DBFS

Sie können einen Azure Blob Storage-Container oder einen Ordner in einem Container in DBFS einbinden. Informationen zu Databricks-Empfehlungen finden Sie unter Einbinden von Cloudobjektspeicher auf Azure Databricks.

Wichtig

  • Azure Blob Storage unterstützt drei Blobtypen: Block-, Anfüge- und Seitenblobs. Sie können nur Blockblobs in DBFS einbinden.
  • Alle Benutzer haben Lese- und Schreibzugriff auf die Objekte in Blob Storage-Containern, die in DBFS eingebunden sind.
  • Nachdem ein Bereitstellungspunkt über einen Cluster erstellt wurde, 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.

DBFS verwendet die Anmeldeinformationen, die Sie beim Erstellen des Bereitstellungspunkts angeben, um auf den eingebundenen Blob Storage-Container zuzugreifen. Wenn ein Blob Storage-Container mit einem Speicherkonto-Zugriffsschlüssel eingebunden wird, verwendet DBFS temporäre SAS-Token, die vom Speicherkontoschlüssel abgeleitet werden, wenn auf diesen Bereitstellungspunkt zugegriffen wird.

Einbinden eines Azure Blob Storage-Containers

Databricks empfiehlt die Verwendung von ABFS anstelle von WASB. Weitere Informationen zur Montage mit ABFS finden Sie unter: Einbinden von ADLS Gen2 oder Blob Storage mit ABFS.

  1. Verwenden Sie den folgenden Befehl, um einen Blob Storage-Container oder einen Ordner in einen Container einzubinden:

    Python

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
      mount_point = "/mnt/<mount-name>",
      extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})
    

    Scala

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>",
      mountPoint = "/mnt/<mount-name>",
      extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))
    

    where

    • <storage-account-name> ist der Name Ihres Azure Blob Storage-Containers.
    • <container-name> ist der Name eines Containers in Ihrem Azure Blob Storage-Konto.
    • <mount-name> ist ein DBFS-Pfad, der angibt, wo der Blob Storage-Container oder ein Ordner innerhalb des Containers (angegeben in source) eingebunden wird.
    • <conf-key> kann entweder fs.azure.account.key.<storage-account-name>.blob.core.windows.net oder fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net sein
    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") ruft den Schlüssel ab, der als Geheimnis in einem Geheimnisbereich gespeichert wurde.
  2. Greifen Sie auf Dateien in Ihrem Container zu, als wären es lokale Dateien. Beispiel:

    Python

    # python
    df = spark.read.format("text").load("/mnt/<mount-name>/...")
    df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    Scala

    // scala
    val df = spark.read.format("text").load("/mnt/<mount-name>/...")
    val df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    SQL

    -- SQL
    CREATE DATABASE <db-name>
    LOCATION "/mnt/<mount-name>"