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 tutte le connessioni a Archiviazione BLOB di Azure.

Configurare le credenziali WASB in Databricks

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

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

È possibile passare le credenziali:

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

Databricks consiglia di aggiornare tutte le connessioni per usare ABFS per accedere a 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 le credenziali del cluster, impostare le proprietà di configurazione di Spark quando si crea il cluster. Le credenziali impostate a livello di cluster sono disponibili per tutti gli utenti con accesso a tale cluster.

Per configurare le credenziali con ambito notebook, usare spark.conf.set(). Le credenziali passate a livello di notebook sono disponibili per tutti gli utenti con accesso a tale notebook.

Impostazione delle credenziali di Archiviazione BLOB di Azure con una chiave di accesso dell'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 delle credenziali di Archiviazione BLOB di Azure con una firma di accesso condiviso (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 le credenziali configurate a livello di notebook o 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 aggiornare ABFS anziché WASB, aggiornare gli URI. Per altre informazioni, vedere Accedere ad Archiviazione di Azure

Accedere Archiviazione BLOB di Azure con SQL

Le credenziali impostate nella configurazione di sessione di un notebook non sono accessibili ai notebook che eseguono Spark SQL.

Dopo aver configurato una chiave di accesso dell'account o una firma di accesso condiviso nella configurazione del cluster, è possibile usare query SPARK SQL standard con Archiviazione BLOB di Azure:

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

Per aggiornare ABFS invece di WASB, aggiornare gli URI; vedere Accedere ad Archiviazione di 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 la posizione in cui il contenitore di archiviazione BLOB o una cartella all'interno del contenitore (specificato in source) 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>"