Condividi tramite


Connettersi a Archiviazione BLOB di Azure con WASB (legacy)

Microsoft ha deprecato il driver BLOB di Windows Archiviazione di Azure (WASB) per Archiviazione BLOB di Azure a favore del driver del file system BLOB di Azure (ABFS). Vedere Connettersi ad Azure Data Lake Storage Gen2 e archiviazione BLOB. ABFS offre numerosi vantaggi rispetto a WASB; Vedere la documentazione di Azure in ABFS.

Questo articolo fornisce la documentazione per la gestione del codice che usa il driver WASB. Databricks consiglia di usare ABFS per tutti i connections nell'Azure Storage Blob.

Configurare WASB credentials in Databricks

Il driver WASB consente di usare una chiave di accesso dell'account di archiviazione o una firma di accesso condiviso. Se si legge i dati da un account di archiviazione pubblico, non è necessario configurare credentials).

Databricks consiglia di utilizzare i "secrets" ogni volta che è necessario passare credentials in Azure Databricks. I segreti sono disponibili per tutti gli utenti con accesso all'ambito segreto contenitore.

È possibile passare credentials:

  • Ambito del cluster nella configurazione di Spark
  • Ambito del notebook
  • Collegato a una directory montata

Databricks consiglia di aggiornare tutti i connections a che utilizzano ABFS per accedere all'archiviazione BLOB di Azure, che fornisce modelli di accesso simili a WASB. Usare ABFS per migliorare la sicurezza e le prestazioni quando si interagisce con Archiviazione BLOB di Azure.

Per configurare il cluster credentials, setle proprietà della configurazione di Spark quando si crea il cluster. Credentials set a livello di cluster sono disponibili per tutti gli utenti con accesso a tale cluster.

Per configurare credentialscon ambito limitato al notebook, usare spark.conf.set(). Credentials passati al livello di notebook sono messi a disposizione di tutti gli utenti con accesso a tale notebook.

Impostazione di Azure Blob Storage credentials con una chiave di accesso per l'account di archiviazione

Una chiave di accesso all'account di archiviazione concede l'accesso completo a tutti i contenitori all'interno di un account di archiviazione. Sebbene questo modello sia utile per la creazione di prototipi, evitare di usarlo nell'ambiente di produzione per ridurre i rischi associati alla concessione di accesso illimitato ai dati di produzione.

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

È possibile aggiornare gli URI della chiave dell'account per usare ABFS. Per altre informazioni, vedere Connettersi a Azure Data Lake Storage Gen2 e Archiviazione BLOB.

Impostazione di Azure Blob Storage credentials con una Shared Access Signature (SAS)

È possibile usare i token di firma di accesso condiviso per configurare l'accesso limitato a un singolo contenitore in un account di archiviazione che scade in un momento specifico.

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

Accedere Archiviazione BLOB di Azure usando l'API DataFrame

L'API DataFrame Apache Spark può usare credentials configurata a livello di notebook o di cluster. Tutti gli URI del driver WASB specificano i nomi dei contenitori e degli account di archiviazione. Il nome della directory è facoltativo e può specificare più directory annidate relative al contenitore.

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

Gli esempi di codice seguenti illustrano come usare il riferimento api DataFrames e Databricks Utilities (dbutils) per interagire con una directory denominata all'interno di un contenitore.

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

Per update ABFS anziché WASB, update gli URI. Per altre informazioni, vedere Accedere ad Archiviazione di Azure

Accedere Archiviazione BLOB di Azure con SQL

Credentials set nella configurazione di sessione di un notebook non sono accessibili ai notebook che eseguono Spark SQL.

Dopo che una chiave di accesso all'account o una firma di accesso condiviso è set nella configurazione del cluster, è possibile usare query SQL Spark standard con Archiviazione BLOB di Azure:

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

Per utilizzare update ABFS al posto di WASB, update i tuoi URI; vedere Accedi all'archiviazione Azure

Montare i contenitori di Archiviazione BLOB di Azure in DBFS

È possibile montare un contenitore Archiviazione BLOB di Azure o una cartella all'interno di un contenitore in DBFS. Per le raccomandazioni di Databricks, vedere Montaggio dell'archiviazione di oggetti cloud in Azure Databricks.

Importante

  • Archiviazione BLOB di Azure supporta tre tipi di BLOB: blocco, accodamento e pagina. È possibile montare BLOB in blocchi solo in DBFS.
  • Tutti gli utenti hanno accesso in lettura e scrittura agli oggetti nei contenitori di Archiviazione BLOB montati in DBFS.
  • Dopo aver creato un punto di montaggio tramite un cluster, gli utenti del cluster possono accedere immediatamente al punto di montaggio. Per usare il punto di montaggio in un altro cluster in esecuzione, è necessario eseguirlo dbutils.fs.refreshMounts() in tale cluster in esecuzione per rendere disponibile il punto di montaggio appena creato.

DBFS usa le credenziali fornite quando si crea il punto di montaggio per accedere al contenitore di archiviazione BLOB montato. Se un contenitore di archiviazione BLOB viene montato usando una chiave di accesso dell'account di archiviazione, DBFS usa token di firma di accesso condiviso temporanei derivati dalla chiave dell'account di archiviazione quando accede a questo punto di montaggio.

Montare un contenitore di archiviazione BLOB di Azure

Databricks consiglia di usare ABFS anziché WASB. Per altre informazioni sul montaggio con ABFS, vedere Montare ADLS Gen2 o Archiviazione BLOB con ABFS.

  1. Per montare un contenitore di archiviazione BLOB o una cartella all'interno di un contenitore, usare il comando seguente:

    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> è il nome dell'account di archiviazione BLOB di Azure.
    • <container-name> è il nome di un contenitore nell'account di archiviazione BLOB di Azure.
    • <mount-name> è un percorso DBFS che rappresenta where il contenitore di archiviazione Blob o una cartella all'interno del contenitore (specificato in source) che verrà montato in DBFS.
    • <conf-key>può essere o fs.azure.account.key.<storage-account-name>.blob.core.windows.netfs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net
    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") ottiene la chiave archiviata come segreto in un ambito segreto.
  2. Accedere ai file nel contenitore come se fossero file locali, ad esempio:

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