Se connecter à Azure Data Lake Storage Gen2 et au Stockage Blob

Remarque

Cet article décrit les modèles hérités pour la configuration de l’accès à Azure Data Lake Storage Gen2. Databricks recommande d’utiliser Unity Catalog pour configurer l’accès à Azure Data Lake Storage Gen2 et aux volumes pour une interaction directe avec des fichiers. Consultez Se connecter au stockage d’objets cloud et aux services à l’aide du catalogue Unity.

Cet article explique comment se connecter à Azure Data Lake Storage Gen2 et au Stockage Blob à partir d’Azure Databricks.

Remarque

Se connecter à Azure Data Lake Storage Gen2 ou à Stockage Blob en utilisant des informations d’identification Azure

Les informations d’identification suivantes peuvent être utilisées pour accéder à Azure Data Lake Storage Gen2 ou au Stockage Blob :

  • OAuth 2.0 avec un principal de service Microsoft Entra ID : Databricks recommande d’utiliser les principaux de service Microsoft Entra ID pour se connecter à Azure Data Lake Storage Gen2. Pour créer un principal de service Microsoft Entra ID et lui fournir un accès aux comptes Stockage Azure, consultez Accéder au stockage avec à l’aide d’un principal de service et de Microsoft Entra (Azure Active Directory).

    Pour créer un principal de service Microsoft Entra ID, vous devez disposer du rôle Application Administrator ou de l’autorisation Application.ReadWrite.All dans Microsoft Entra ID. Pour attribuer des rôles sur un compte de stockage, vous devez être Propriétaire ou Utilisateur avec le rôle RBAC Administrateur de l’accès utilisateur sur le compte de stockage.

    Important

    Le stockage Blob ne prend pas en charge les principaux de service Microsoft Entra ID.

  • Signatures d’accès partagé (SAP) : vous pouvez utiliser des jetons SAP de stockage pour accéder au stockage Azure. Grâce aux SAP, vous pouvez restreindre l’accès à un compte de stockage à l’aide de jetons temporaires avec un contrôle d’accès affiné.

    Vous pouvez uniquement accorder à un jeton SAP les autorisations dont vous disposez vous-même sur le compte de stockage, le conteneur ou le fichier.

  • Clés de compte : vous pouvez utiliser des clés d’accès de compte de stockage pour gérer l’accès au Stockage Azure. Les clés d’accès au compte de stockage fournissent un accès complet à la configuration d’un compte de stockage, ainsi qu’aux données. Databricks recommande d’utiliser un principal de service Microsoft Entra ID ou un jeton SAP pour la connexion au stockage Azure au lieu de clés de compte.

    Pour afficher les clés d’accès d’un compte, vous devez disposer du rôle Propriétaire, Contributeur ou Service opérateur de clé de compte de stockage sur le compte de stockage.

Databricks recommande d’utiliser des étendues de secret pour stocker toutes les informations d’identification. Vous pouvez accorder aux utilisateurs, aux principaux de service et aux groupes de votre espace de travail un accès pour lire l’étendue du secret. Cette opération protège les informations d’identification Azure tout en permettant aux utilisateurs d’accéder au stockage Azure. Pour créer une étendue de secret, consultez Étendues de secret.

Définir les propriétés Spark pour configurer les informations d'identification Azure pour accéder au stockage Azure

Vous pouvez définir des propriétés Spark pour configurer des informations d’identification Azure afin d’accéder au stockage Azure. Les informations d’identification peuvent être étendues à un cluster ou à un notebook. Utilisez à la fois le contrôle d’accès au cluster et le contrôle d’accès au notebook pour protéger l’accès au stockage Azure. Consultez Autorisations de calcul et Collaborer à l’aide de notebooks Databricks.

Remarque

Vous pouvez également utiliser des principaux de service Microsoft Entra ID pour accéder au stockage Azure à partir d’un entrepôt SQL. Consultez Activer la configuration de l’accès aux données.

Pour définir des propriétés Spark, utilisez l’extrait de code suivant dans la configuration Spark d’un cluster ou un notebook :

Principal de service Azure

Utilisez le format suivant pour définir la configuration du cluster Spark :

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

Vous pouvez l'utiliser spark.conf.set dans des blocs-notes, comme illustré dans l'exemple suivant :

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Replace

  • <secret-scope> par le nom de l’étendue de secrets Databricks.
  • <service-credential-key> par le nom de la clé contenant la clé secrète client.
  • <storage-account> par le nom du compte de stockage Azure.
  • <application-id> avec l’ID d’application (client) pour l’application Microsoft Entra ID.
  • <directory-id> avec l’ID d’annuaire (locataire) pour l’application Microsoft Entra ID.

Jetons SAS

Vous pouvez configurer des jetons SAP pour plusieurs comptes de stockage dans la même session Spark.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Replace

  • <storage-account> par le nom du compte Stockage Azure.
  • <scope> avec le nom de l'étendue secrète d'Azure Databricks.
  • <sas-token-key> avec le nom de la clé contenant le jeton SAP du stockage Azure.

Clé de compte

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Replace

  • <storage-account> par le nom du compte Stockage Azure.
  • <scope> avec le nom de l'étendue secrète d'Azure Databricks.
  • <storage-account-access-key> avec le nom de la clé contenant la clé d'accès au compte de stockage Azure.

Accéder au stockage Azure

Une fois les informations d’identification correctement configurées pour accéder à votre conteneur de stockage Azure, vous pouvez interagir avec des ressources du compte de stockage en utilisant des URI. Databricks recommande d’utiliser le pilote abfss pour plus de sécurité.

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

Exemple de bloc-notes

Bloc-notes du principal de service ADLS Gen2 OAuth 2.0 avec Microsoft Entra ID (anciennement Azure Active Directory)

Obtenir le notebook

Azure Data Lake Storage Gen2 problèmes connus

Si vous essayez d’accéder à un conteneur de stockage créé via le portail Azure, vous pouvez recevoir l’erreur suivante :

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

Lorsqu’un espace de noms hiérarchique est activé, vous n’avez pas besoin de créer des conteneurs via Portail Azure. Si vous rencontrez ce problème, supprimez le conteneur Blob via Portail Azure. Après quelques minutes, vous pouvez accéder au conteneur. Vous pouvez également modifier votre URI abfss pour utiliser un autre conteneur, à condition que ce conteneur n’ait pas été créé via Portail Azure.

Consultez Problèmes connus avec Azure Data Lake Storage Gen2 dans la documentation de Microsoft.

Modèles déconseillés pour le stockage des données et l’accès à celles-ci à partir d’Azure Databricks

Modèles de stockage déconseillés :