Condividi tramite


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. Trasmetti le credenziali di Microsoft Entra ID, conosciute anche come passaggio delle credenziali .
  2. Usare un'entità servizio direttamente.

L'accesso automatico con le credenziali del 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 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 Storage 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 Storage usando il pass-through delle credenziali di Microsoft Entra ID (legacy).

Creare e concedere autorizzazioni al principal di 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 dal tuo account Azure Data Lake Storage Gen1, puoi configurare Spark per utilizzare le credenziali del servizio con il frammento di codice seguente nel tuo 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 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)

dove

  • <mount-name> è un percorso DBFS che rappresenta la posizione in cui verrà montato l'account Azure Data Lake Storage Gen1 o una cartella all'interno del file (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 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 per accedere a 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

Prendere il quaderno