Accesso ad Azure Data Lake Archiviazione Gen1 da Azure Databricks

Microsoft ha annunciato il ritiro pianificato di Azure Data Lake Archiviazione 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 Archiviazione Gen2. Databricks consiglia l'aggiornamento ad Azure Data Lake Archiviazione Gen2 per ottenere prestazioni ottimali e nuove funzionalità.

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

  1. Passare le credenziali di Microsoft Entra ID (in precedenza Azure Active Directory), note anche come pass-through delle credenziali.
  2. Usare un'entità servizio direttamente.

Accedere automaticamente con le credenziali di Microsoft Entra ID (in precedenza Azure Active Directory)

È possibile eseguire l'autenticazione automaticamente in Azure Data Lake Archiviazione Gen1 dai cluster Di Azure Databricks usando la stessa identità ID di Microsoft Entra usata per accedere ad Azure Databricks. Quando si abilita il pass-through delle credenziali dell'ID di Microsoft Entra, i comandi eseguiti in tale cluster potranno leggere e scrivere i dati in Azure Data Lake Archiviazione Gen1 senza che sia necessario configurare le credenziali dell'entità servizio per l'accesso all'archiviazione.

Per istruzioni complete sull'installazione e sull'utilizzo, vedere Accedere ad Azure Data Lake Archiviazione usando microsoft Entra ID (in precedenza Azure Active Directory) pass-through delle credenziali (legacy).

Creare e concedere autorizzazioni all'entità servizio

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

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

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

Per leggere dall'account Azure Data Lake Archiviazione 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")

dove

  • 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 Archiviazione 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 Archiviazione Gen1.

Accesso tramite metastore

Per accedere ai adl:// percorsi specificati nel metastore, è necessario specificare le opzioni di configurazione delle credenziali hadoop come opzioni spark quando si crea il cluster aggiungendo il spark.hadoop. prefisso 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 una risorsa o una cartella di Azure Data Lake Archiviazione Gen1

Per montare una risorsa di Azure Data Lake Archiviazione 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)

dove

  • <mount-name>è un percorso DBFS che rappresenta la posizione in cui l'account Azure Data Lake Archiviazione Gen1 o una cartella all'interno di essa (specificata in source) verrà montata 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 Archiviazione Gen1 da usare in 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 direttamente ad Azure Data Lake Archiviazione Gen1 e con un montaggio.

Notebook dell'entità servizio DILS Gen1

Ottenere il notebook