Accedere ad Azure Data Lake Storage Gen1 da Azure Databricks

Microsoft ha annunciato il ritiro pianificato di Azure Data Lake Storage Gen1 (in precedenza Azure Data Lake Store, noto anche come ADLS) e consiglia a tutti gli utenti di eseguire la migrazione ad Azure Data Lake Storage Gen2. Databricks consiglia di eseguire l'aggiornamento ad Azure Data Lake Storage Gen2 per ottenere prestazioni ottimali e nuove caratteristiche.

Esistono due modi per accedere ad Azure Data Lake Storage Gen1:

  1. Passare le credenziali di Microsoft Entra ID, note anche come pass-through delle credenziali.
  2. Usare un'entità servizio direttamente.

Accedere automaticamente con le credenziali di Microsoft Entra ID

È possibile autenticarsi automaticamente in Azure Data Lake Storage Gen1 dai cluster Azure Databricks utilizzando la stessa identità Microsoft Entra ID che si usa per accedere ad Azure Databricks. Quando si abilita il cluster per il pass-through delle credenziali Microsoft Entra ID, i comandi eseguiti sul cluster saranno in grado di leggere e scrivere i dati in Azure Data Lake Storage Gen1 senza richiedere la configurazione delle credenziali dell’entità servizio per l'accesso all’archiviazione.

Per istruzioni complete sull'installazione e sull'utilizzo, vedere Accedere ad Azure Data Lake Storage usando il pass-through delle credenziali di Microsoft Entra ID (legacy).

Creare e assegnarle le autorizzazioni a un'entità servizio

Se il metodo di accesso selezionato richiede un'entità servizio con autorizzazioni adeguate e non ne è disponibile alcuna, seguire questa procedura:

  1. Creare un'applicazione e un'entità servizio Microsoft Entra ID (precedentemente Azure Active Directory) in grado di accedere alle risorse. Considerare le proprietà seguenti:
    • application-id: ID che identifica l'applicazione client in modo univoco.
    • directory-id: ID che identifica in modo univoco l'istanza di Microsoft Entra ID.
    • service-credential: stringa usata dall'applicazione per dimostrare la su identità.
  2. Registrare l'entità servizio, concedendo l'assegnazione di ruolo corretta, ad esempio Contributore, nell'account Azure Data Lake Storage Gen1.

Accedere direttamente con le API Spark usando un'entità servizio e OAuth 2.0

Per leggere dall'account Azure Data Lake Storage Gen1, è possibile configurare Spark per l'uso delle credenziali del servizio con il frammento di codice seguente nel Notebook:

spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("fs.adl.oauth2.client.id", "<application-id>")
spark.conf.set("fs.adl.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"))
spark.conf.set("fs.adl.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

where

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") recupera la chiave di accesso dell'account di archiviazione archiviata come segreto in un ambito segreto.

Dopo aver configurato le credenziali, è possibile usare le API Spark e Databricks standard per accedere alle risorse. Ad esempio:

val df = spark.read.format("parquet").load("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

dbutils.fs.ls("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

Azure Data Lake Storage Gen1 fornisce il controllo di accesso a livello di directory, pertanto l'entità servizio deve avere accesso alle directory da cui si vuole leggere e alla risorsa Azure Data Lake Storage Gen1.

Accesso tramite metastore

Per accedere alle posizioni adl:// specificate nel metastore, è necessario indicare le opzioni di configurazione delle credenziali hadoop come opzioni Spark quando si crea il cluster aggiungendo il prefisso spark.hadoop. alle chiavi di configurazione Hadoop corrispondenti per propagarle alle configurazioni hadoop usate dal metastore:

spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential
spark.hadoop.fs.adl.oauth2.client.id <application-id>
spark.hadoop.fs.adl.oauth2.credential <service-credential>
spark.hadoop.fs.adl.oauth2.refresh.url https://login.microsoftonline.com/<directory-id>/oauth2/token

Avviso

  • Queste credenziali sono disponibili per tutti gli utenti che accedono al cluster.

Montare la risorsa o la cartella di Azure Data Lake Storage Gen1

Per montare una risorsa di Azure Data Lake Storage Gen1 o una cartella al suo interno, usare il comando seguente:

Python

configs = {"fs.adl.oauth2.access.token.provider.type": "ClientCredential",
          "fs.adl.oauth2.client.id": "<application-id>",
          "fs.adl.oauth2.credential": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
          "fs.adl.oauth2.refresh.url": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)

Scala

val configs = Map(
  "fs.adl.oauth2.access.token.provider.type" -> "ClientCredential",
  "fs.adl.oauth2.client.id" -> "<application-id>",
  "fs.adl.oauth2.credential" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
  "fs.adl.oauth2.refresh.url" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")

// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

where

  • <mount-name> è un percorso DBFS che indica dove verrà montato l'account Azure Data Lake Storage Gen1 o una cartella all'interno di essa (specificato in source) in DBFS.
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") recupera la chiave di accesso dell'account di archiviazione archiviata come segreto in un ambito segreto.

Accedere ai file nel contenitore come se fossero file locali, ad esempio:

Python

df = spark.read.format("text").load("/mnt/<mount-name>/....")
df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")

Scala

val df = spark.read.format("text").load("/mnt/<mount-name>/....")
val df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")

Configurare le credenziali del servizio per più account

È possibile configurare le credenziali del servizio per più account Azure Data Lake Storage Gen1 da usare all'interno di una singola sessione Spark aggiungendo account.<account-name> alle chiavi di configurazione. Ad esempio, se si vogliono configurare le credenziali per entrambi gli account a cui accedere adl://example1.azuredatalakestore.net e adl://example2.azuredatalakestore.net, è possibile eseguire questa operazione come indicato di seguito:

spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")

spark.conf.set("fs.adl.account.example1.oauth2.client.id", "<application-id-example1>")
spark.conf.set("fs.adl.account.example1.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example1>"))
spark.conf.set("fs.adl.account.example1.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example1>/oauth2/token")

spark.conf.set("fs.adl.account.example2.oauth2.client.id", "<application-id-example2>")
spark.conf.set("fs.adl.account.example2.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example2>"))
spark.conf.set("fs.adl.account.example2.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example2>/oauth2/token")

Questa operazione funziona anche per la configurazione di Spark del cluster:

spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential

spark.hadoop.fs.adl.account.example1.oauth2.client.id <application-id-example1>
spark.hadoop.fs.adl.account.example1.oauth2.credential <service-credential-example1>
spark.hadoop.fs.adl.account.example1.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example1>/oauth2/token

spark.hadoop.fs.adl.account.example2.oauth2.client.id <application-id-example2>
spark.hadoop.fs.adl.account.example2.oauth2.credential <service-credential-example2>
spark.hadoop.fs.adl.account.example2.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example2>/oauth2/token

Il Notebook seguente illustra come accedere ad Azure Data Lake Storage Gen1, direttamente e con un montaggio.

Notebook dell'entità servizio ADLS Gen1

Ottenere il notebook