Condividi tramite


Collegarsi a Azure Blob Storage con WASB (legacy)

Microsoft ha deprecato il driver BLOB di Archiviazione di Windows 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 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.

È possibile passare le credenziali:

  • Limitato al cluster nella configurazione di Spark
  • Definito esclusivamente per il 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 del notebook sono disponibili per tutti gli utenti con accesso a tale notebook.

Impostazione delle credenziali di Azure Blob Storage 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 ulteriori informazioni, consultare Connettersi ad Azure Data Lake Storage e Blob Storage.

Impostazione delle credenziali di Archiviazione BLOB di Azure con una firma di accesso condiviso (SAS)

È possibile utilizzare i token SAS per configurare l'accesso limitato a un singolo contenitore in un account di archiviazione che scade a un orario specifico.

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

Accedere all'Archiviazione BLOB di Azure usando l'API DataFrame

L'API DataFrame di Apache Spark può utilizzare le credenziali configurate sia a livello di notebook che 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 l'API DataFrames e le utilità di Databricks (dbutils) riferimento per interagire con una directory specificata 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 all'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 utilizzare query Spark SQL standard con Azure Blob Storage.

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

  • L'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 utilizzando una chiave di accesso dell'account di archiviazione, DBFS utilizza temporaneamente token SAS (Azure Shared Access Signature) 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 ulteriori informazioni sulla configurazione con ABFS, vedere: montare ADLS o Blob Storage 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>")))
    

    dove

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