Condividi tramite


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 Storage Gen2. Databricks consiglia di usare Unity Catalog per configurare l'accesso ad Azure Data Lake Storage Gen2 e ai volumi per l'interazione diretta con i file. Vedere Connettersi all'archiviazione di oggetti cloud usando Unity Catalog.

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

Nota

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

Per accedere ad Archiviazione BLOB o Azure Data Lake Storage Gen2, è possibile usare le credenziali seguenti:

  • 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 usando un'entità servizio e Microsoft Entra ID(Azure Active Directory).

    Per creare un'entità servizio Microsoft Entra ID, è necessario avere il ruolo Application Administrator o l'autorizzazione Application.ReadWrite.All in Microsoft Entra ID. 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 (SAS): è 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. Le chiavi di accesso dell'account di archiviazione forniscono l'accesso completo alla configurazione di un account di archiviazione e 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, contributore o servizio operatore chiave 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à Spark per configurare le credenziali di Azure per accedere ad Archiviazione di Azure

È possibile impostare le proprietà di Spark per configurare le credenziali per accedere all’Archiviaziobe di Azure. È possibile definire l'ambito delle credenziali sia in un cluster che in un Notebook. Usare il controllo di accesso del cluster e 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 seguente formato per impostare la configurazione del cluster Spark:

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

È anche 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 Azure.
  • <application-id> con l’ID applicazione (client) dell'applicazione Microsoft Entra ID.
  • <directory-id> con l’ID della directory (tenant) per l'applicazione Microsoft Entra ID.

Token di firma di accesso condiviso

È 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 di 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 di 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.

Accesso 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 driver abfss 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 con Azure Data Lake Storage 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 il portale di Azure. Se viene visualizzato questo problema, eliminare il contenitore BLOB tramite il 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 il portale di Azure.

Vedere Problemi noti con Azure Data Lake Storage Gen2 nella documentazione di Microsoft.

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

Di seguito sono riportati i criteri di archiviazione deprecati: