Montage de stockage d’objets cloud sur Azure Databricks

Azure Databricks permet aux utilisateurs de monter un stockage d’objets cloud dans le système de fichiers Databricks (DBFS) afin de simplifier les modèles d’accès aux données pour les utilisateurs peu familiarisés avec les concepts du cloud. Les données montées ne fonctionnent pas avec Unity Catalog, et Databricks recommande de ne pas utiliser les montages et de gérer la gouvernance des données avec Unity Catalog.

Comment Azure Databricks monte-t-il le stockage d’objets cloud ?

Les montages Azure Databricks créent un lien entre un espace de travail et un stockage d’objets cloud, qui vous permet d’interagir avec le stockage d’objets cloud à l’aide de chemins d’accès de fichiers familiers par rapport au système de fichiers Databricks. Les montages fonctionnent en créant un alias local sous le répertoire /mnt qui stocke les informations suivantes :

  • Emplacement du stockage d’objets cloud.
  • Spécifications du pilote pour la connexion au compte de stockage ou au conteneur.
  • Informations d’identification de sécurité requises pour accéder aux données.

Quelle est la syntaxe pour le montage d’un stockage ?

source spécifie l’URI du stockage d’objets (et peut éventuellement encoder des informations d’identification de sécurité). mount_point spécifie le chemin d’accès local dans le répertoire /mnt. Certaines sources de stockage d’objets prennent en charge un argument encryption_type facultatif. Pour certains modèles d’accès, vous pouvez passer des spécifications de configuration supplémentaires en tant que dictionnaire à extra_configs.

Remarque

Databricks recommande de définir la configuration Spark et Hadoop spécifique au montage en tant qu’options à l’aide de extra_configs. Cela permet de s’assurer que les configurations sont liées au montage plutôt qu’au cluster ou à la session.

dbutils.fs.mount(
  source: str,
  mount_point: str,
  encryption_type: Optional[str] = "",
  extra_configs: Optional[dict[str:str]] = None
)

Consultez vos administrateurs d’espace de travail et de cloud avant de configurer ou de modifier des montages de données, car une configuration incorrecte peut donner un accès non sécurisé à tous les utilisateurs de votre espace de travail.

Notes

En plus des approches décrites dans cet article, vous pouvez automatiser le montage d’un compartiment avec le fournisseur Databricks Terraform et databricks_mount.

Démonter un point de montage

Pour démonter un point de montage, utilisez la commande suivante :

dbutils.fs.unmount("/mnt/<mount-name>")

Avertissement

Pour éviter les erreurs, ne modifiez jamais un point de montage quand d’autres travaux le lisent ou y écrivent. Après avoir modifié un montage, exécutez toujours dbutils.fs.refreshMounts() sur tous les autres clusters en cours d’exécution pour propager les mises à jour de montage. Consultez la section Commande refreshMounts (dbutils.fs.refreshMounts).

Monter le stockage ADLS Gen2 ou le Stockage Blob avec ABFS

Vous pouvez monter des données dans un compte de stockage Azure en utilisant un principal de service d’application Microsoft Entra ID (anciennement Azure Active Directory) pour l’authentification. Pour en savoir plus, consultez Accéder au stockage avec Microsoft Entra ID (anciennement Azure Active Directory) à l’aide d’un principal de service.

Important

  • Tous les utilisateurs de l’espace de travail Azure Databricks ont accès au compte ADLS Gen2 monté. Le principal de service que vous utilisez pour accéder au compte ADLS Gen2 doit être autorisé à accéder uniquement à ce compte ADLS Gen2 ; il ne doit pas être autorisé à accéder à d’autres ressources Azure.
  • Lorsque vous créez un point de montage via un cluster, les utilisateurs du cluster peuvent accéder immédiatement au point de montage. Pour utiliser le point de montage dans un autre cluster en cours d’exécution, vous devez exécuter dbutils.fs.refreshMounts() sur ce cluster pour mettre à disposition le nouveau point de montage créé.
  • Le démontage d’un point de montage pendant l’exécution des travaux peut entraîner des erreurs. Assurez-vous que les travaux de production ne démontent pas le stockage dans le cadre du traitement.
  • Les points de montage qui utilisent des secrets ne sont pas automatiquement actualisés. Si le stockage monté repose sur un secret qui change, expire ou est supprimé, des erreurs peuvent se produire, telles que 401 Unauthorized. Pour résoudre une telle erreur, vous devez démonter et remonter le stockage.
  • L’espace de noms hiérarchique (HNS) doit être activé pour monter correctement un compte de stockage Azure Data Lake Storage Gen2 à l’aide du point de terminaison ABFS.

Exécutez la commande suivante dans votre notebook pour vous authentifier et créer un point de montage.

configs = {"fs.azure.account.auth.type": "OAuth",
          "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
          "fs.azure.account.oauth2.client.id": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "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 = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)
val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<application-id>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
  "fs.azure.account.oauth2.client.endpoint" -> "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 = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

Replace

  • <application-id> par l’ID d’application (client) de votre application Azure Active Directory.
  • <scope-name> par le nom de l’étendue de secrets Databricks.
  • <service-credential-key-name> par le nom de la clé contenant la clé secrète client.
  • <directory-id> par l’ID de répertoire (locataire) de l'application Azure Active Directory.
  • <container-name> par le nom d’un conteneur dans le compte de stockage ADLS Gen2.
  • <storage-account-name> par le nom du compte de stockage ADLS Gen2.
  • <mount-name> par le nom du point de montage prévu dans DBFS.