Connettersi a Azure Data Lake Storage Gen2 e Archiviazione BLOB

Nota

Questo articolo descrive i modelli legacy per la configurazione dell'accesso ad Azure Data Lake Archiviazione Gen2. Databricks consiglia di usare Unity Catalog per configurare l'accesso ad Azure Data Lake Archiviazione Gen2 e ai volumi per l'interazione diretta con i file. Vedere Connessione all'archiviazione di oggetti cloud usando il catalogo unity.

Questo articolo illustra come connettersi ad Azure Data Lake Archiviazione Gen2 e Archiviazione BLOB da Azure Databricks.

Nota

Connessione ad Azure Data Lake Archiviazione Gen2 o Archiviazione BLOB usando le credenziali di Azure

È possibile usare le credenziali seguenti per accedere ad Azure Data Lake Archiviazione Gen2 o Archiviazione BLOB:

  • OAuth 2.0 con un'entità servizio Microsoft Entra ID: Databricks consiglia di usare le entità servizio Microsoft Entra ID per connettersi all'archiviazione di Azure. Per creare un'entità servizio Microsoft Entra ID e fornire l'accesso agli account di archiviazione di Azure, vedere Accedere all'archiviazione con Microsoft Entra ID (in precedenza Azure Active Directory) usando un'entità servizio.

    Per creare un'entità servizio Microsoft Entra ID, è necessario avere il Application Administrator ruolo o l'autorizzazione Application.ReadWrite.All in Microsoft Entra ID (in precedenza Azure Active Directory). Per assegnare ruoli in un account di archiviazione, è necessario essere un proprietario o un utente con il ruolo Controllo degli accessi in base al ruolo di Amministratore RBAC di Azure nell'account di archiviazione.

  • Firme di accesso condiviso :è possibile usare i token di firma di accesso condiviso di archiviazione per accedere all'archiviazione di Azure. Con la firma di accesso condiviso è possibile limitare l'accesso a un account di archiviazione usando token temporanei con controllo di accesso con granularità fine.

    È possibile concedere a un token di firma di accesso condiviso solo le autorizzazioni disponibili nell'account di archiviazione, nel contenitore o nel file manualmente.

  • Chiavi dell'account: è possibile usare le chiavi di accesso dell'account di archiviazione per gestire l'accesso alle Archiviazione di Azure. Archiviazione chiavi di accesso dell'account forniscono l'accesso completo alla configurazione di un account di archiviazione, nonché ai dati. Databricks consiglia di usare un'entità servizio Microsoft Entra ID o un token di firma di accesso condiviso per connettersi all'archiviazione di Azure anziché alle chiavi dell'account.

    Per visualizzare le chiavi di accesso di un account, è necessario avere il ruolo proprietario, collaboratore o Archiviazione servizio operatore chiave account nell'account di archiviazione.

Databricks consiglia di usare ambiti segreti per l'archiviazione di tutte le credenziali. È possibile concedere agli utenti, alle entità servizio e ai gruppi nell'area di lavoro l'accesso per leggere l'ambito del segreto. In questo modo le credenziali di Azure vengono protette consentendo agli utenti di accedere ad Archiviazione di Azure. Per creare un ambito segreto, vedere Ambiti dei segreti.

Impostare le proprietà di Spark per configurare le credenziali di Azure per accedere ad Archiviazione di Azure

È possibile impostare le proprietà di Spark per configurare le credenziali di Azure per accedere ad Archiviazione di Azure. È possibile definire l'ambito delle credenziali in un cluster o in un notebook. Usare sia il controllo di accesso del cluster che il controllo di accesso dei notebook insieme per proteggere l'accesso all'archiviazione di Azure. Vedere Autorizzazioni di calcolo e Collaborazione con i notebook di Databricks.

Nota

Le entità servizio Microsoft Entra ID possono essere usate anche per accedere all'archiviazione di Azure da sql warehouse, vedere Abilitare la configurazione dell'accesso ai dati.

Per impostare le proprietà di Spark, usare il frammento di codice seguente nella configurazione spark di un cluster o in un notebook:

Entità servizio di Azure

Usare il formato seguente per impostare la configurazione di Spark del cluster:

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

È possibile usare spark.conf.set nei notebook, come illustrato nell'esempio seguente:

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Sostituzione

  • <secret-scope> con il nome dell'ambito del segreto Databricks.
  • <service-credential-key> con il nome della chiave contenente il segreto client.
  • <storage-account> con il nome dell'account di archiviazione di Azure.
  • <application-id>con l'ID applicazione (client) per l'applicazione Microsoft Entra ID.
  • <directory-id>con l'ID directory (tenant) per l'applicazione Microsoft Entra ID.

Token Sas

È possibile configurare i token di firma di accesso condiviso per più account di archiviazione nella stessa sessione spark.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Sostituzione

  • <storage-account>con il nome dell'account Archiviazione di Azure.
  • <scope> con il nome dell'ambito del segreto di Azure Databricks.
  • <sas-token-key> con il nome della chiave contenente il token di firma di accesso condiviso dell'archiviazione di Azure.

Chiave dell'account

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Sostituzione

  • <storage-account>con il nome dell'account Archiviazione di Azure.
  • <scope> con il nome dell'ambito del segreto di Azure Databricks.
  • <storage-account-access-key> con il nome della chiave contenente la chiave di accesso dell'account di archiviazione di Azure.

Accedere ad Archiviazione di Azure

Dopo aver configurato correttamente le credenziali per accedere al contenitore di archiviazione di Azure, è possibile interagire con le risorse nell'account di archiviazione usando gli URI. Databricks consiglia di usare il abfss driver per una maggiore sicurezza.

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

Notebook di esempio

Notebook delle entità servizio di ADLS Gen2 OAuth 2.0 con Microsoft Entra ID (in precedenza Azure Active Directory)

Ottenere il notebook

Problemi noti di Azure Data Lake Archiviazione Gen2

Se si tenta di accedere a un contenitore di archiviazione creato tramite il portale di Azure, è possibile che venga visualizzato l'errore seguente:

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

Quando uno spazio dei nomi gerarchico è abilitato, non è necessario creare contenitori tramite portale di Azure. Se viene visualizzato questo problema, eliminare il contenitore BLOB tramite portale di Azure. Dopo alcuni minuti, è possibile accedere al contenitore. In alternativa, è possibile modificare l'URI abfss per usare un contenitore diverso, purché questo contenitore non venga creato tramite portale di Azure.

Vedere Problemi noti relativi ad Azure Data Lake Archiviazione Gen2 nella documentazione Microsoft.

Modelli deprecati per l'archiviazione e l'accesso ai dati da Azure Databricks

Di seguito sono riportati i modelli di archiviazione deprecati: