Partage via


Accès au stockage Azure Data Lake Storage Gen1 à partir d’Azure Databricks

Microsoft a annoncé la mise hors service planifiée d’Azure Data Lake Storage Gen1 (anciennement Azure Data Lake Store, également appelé ADLS), et recommande à tous les utilisateurs de migrer vers Azure Data Lake Storage Gen2. Databricks recommande d’opérer une mise à niveau vers Azure Data Lake Storage Gen2 pour optimiser les performances et bénéficier des nouvelles fonctionnalités.

Vous pouvez accéder à Azure Data Lake Storage Gen1 de trois façons :

  1. Transmettre vos informations d’identification Microsoft Entra ID (anciennement Azure Active Directory), méthode également appelée transmission directe des informations d’identification (« credential passthrough »).
  2. Utiliser un principal de service directement.

Accès automatique grâce à vos informations d’identification Microsoft Entra ID (anciennement Azure Active Directory)

Vous pouvez vous authentifier automatiquement auprès d’Azure Data Lake Storage Gen1 à partir de clusters Azure Databricks en utilisant la même identité Microsoft Entra ID que celle utilisée pour vous connecter à Azure Databricks. Quand vous activez votre cluster pour le passage des informations d’identification Microsoft Entra ID, les commandes que vous exécutez sur ce cluster pourront lire et écrire vos données dans Azure Data Lake Storage Gen1 sans que vous ayez besoin de configurer les informations d’identification du principal de service pour l’accès au stockage.

Pour obtenir des instructions complètes sur la configuration et l’utilisation, consultez l’article Accéder à Azure Data Lake Storage en utilisant le passage des informations d’identification (hérité) Microsoft Entra ID (anciennement Azure Active Directory).

Créer des autorisations et les accorder au principal de service

Si vous avez choisi une méthode d’accès qui utilise un principal de service avec des autorisations appropriées et que vous n’avez pas encore de principal de service, effectuez ces étapes :

  1. Créer une application et un principal de service Microsoft Entra ID (anciennement Azure Active Directory) pouvant accéder aux ressources. Notez les propriétés suivantes :
    • application-id : ID qui identifie de manière unique l’application cliente.
    • directory-id : ID qui identifie de façon unique l’instance Microsoft Entra ID.
    • service-credential : chaîne utilisée par l’application pour prouver son identité.
  2. Inscrivez le principal de service, en lui accordant l’attribution de rôle appropriée, par exemple Contributeur, sur le compte Azure Data Lake Storage Gen1.

Accéder directement aux API Spark en utilisant un principal de service et OAuth 2.0

Pour lire dans votre compte Azure Data Lake Storage Gen1, vous pouvez configurer Spark afin qu’il utilise les informations d’identification du service. Pour cela, ajoutez le code suivant dans votre 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>") récupère votre clé d’accès du compte de stockage qui a été enregistrée en tant que secret dans une étendue de secrets.

Une fois vos informations d’identification configurées, vous pouvez utiliser des API Spark et Databricks standard pour accéder aux ressources. Par exemple :

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 fournit un contrôle d’accès au niveau du répertoire. Le principal de service doit donc avoir accès aux répertoires à partir desquels vous souhaitez lire, ainsi qu’à la ressource Azure Data Lake Storage Gen1.

Accès via le metastore

Pour accéder aux emplacements adl:// spécifiés dans le metastore, vous devez spécifier les options de configuration des informations d’identification Hadoop comme des options Spark quand vous créez le cluster. Vous devez donc ajouter le préfixe spark.hadoop. aux clés de configuration Hadoop correspondantes afin de les propager aux configurations Hadoop utilisées par le 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

Avertissement

  • Ces informations d’identification sont visibles par tous les utilisateurs qui accèdent au cluster.

Monter une ressource ou un dossier Azure Data Lake Storage Gen1

Pour monter une ressource Azure Data Lake Storage Gen1, ou un dossier à l’intérieur de celle-ci, utilisez la commande suivante :

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> est un chemin DBFS qui définit où le compte Azure Data Lake Storage Gen1 ou un dossier à l’intérieur de celui-ci (spécifié dans source) sera monté dans DBFS.
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") récupère votre clé d’accès du compte de stockage qui a été enregistrée en tant que secret dans une étendue de secrets.

Accédez aux fichiers dans votre conteneur comme s’il s’agissait de fichiers locaux, par exemple :

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>/....")

Configurer les informations d’identification de service pour plusieurs comptes

Vous pouvez configurer les informations d’identification de service pour plusieurs comptes Azure Data Lake Storage Gen1 afin qu’elles puissent être utilisées dans une même session Spark. Pour cela, ajoutez account.<account-name> aux clés de configuration. Par exemple, si vous souhaitez configurer des informations d’identification qui permettent aux deux comptes d’accéder à adl://example1.azuredatalakestore.net et adl://example2.azuredatalakestore.net, ajoutez ce code :

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")

Cela vaut également pour la configuration du cluster Spark :

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

Le notebook suivant montre comment accéder à Azure Data Lake Storage Gen1 directement et avec un montage.

Notebook du principal de service ADLS Gen1

Obtenir le notebook