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 :
- Transmettez vos informations d’identification Microsoft Entra ID. Cette procédure est aussi connue sous le nom de passage des informations d’identification.
- Utiliser un principal de service directement.
Accès automatique grâce à vos identifiants Microsoft Entra ID
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.
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 :
- 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é.
- 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é danssource
) 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.