Azure Data Lake Storage Gen1

Notes

Microsoft a publié la nouvelle génération data lake store, Azure Data Lake Storage Gen2.

Azure Data Lake Storage Gen1 (anciennement Azure Data Lake Store, également appelé ADLS) est un référentiel à l’échelle de l’entreprise pour Big Data charges de travail analytiques. Azure Data Lake Storage Gen1 vous permet de capturer des données de toute taille, de tout type et de toute vitesse d’ingestion dans un emplacement unique pour les analyses opérationnelles et exploratoires. Azure Data Lake Storage Gen1 est spécifiquement conçu pour permettre l’analyse des données stockées et est optimisé pour les performances des scénarios d’analyse des données.

Notes

Azure Databricks prend également en charge les sources de données azure suivantes : stockage Blob azure, Azure Cosmos DBet azure Synapse Analytics.

il existe trois façons d’accéder à Azure Data Lake Storage Gen1 :

  1. transmettez vos informations d’identification de Azure Active Directory, également appelées relais d’informations d’identification.
  2. montez un système de fichiers Azure Data Lake Storage Gen1 sur DBFS à l’aide d’un principal du service et OAuth 2,0.
  3. Utilisez un principal de service directement.

accéder automatiquement avec vos informations d’identification de Azure Active Directory

vous pouvez vous authentifier automatiquement pour Azure Data Lake Storage Gen1 des clusters Azure Databricks à l’aide de la même identité Azure Active Directory (Azure AD) que celle que vous utilisez pour vous connecter à Azure Databricks. lorsque vous activez votre cluster pour Azure AD relais d’informations d’identification, les commandes que vous exécutez sur ce cluster peuvent 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 l’installation et l’utilisation, consultez Azure Data Lake Storage d’accès à l’aide de Azure Active Directory connexion passthrough.

Créer et accorder des autorisations au principal du service

Si votre méthode d’accès sélectionnée requiert un principal du service disposant des autorisations appropriées et que vous n’en avez pas, procédez comme suit :

  1. créez un Azure AD application et un principal de service pouvant accéder aux ressources. Notez les propriétés suivantes :
    • application-id: ID qui identifie de façon unique l’application cliente.
    • directory-id: ID qui identifie de façon unique l’instance de Azure AD.
    • service-credential: Chaîne utilisée par l’application pour prouver son identité.
  2. inscrivez le principal du service, en lui accordant l' attribution de rôleappropriée, par exemple contributeur, sur le compte Azure Data Lake Storage Gen1.

monter Azure Data Lake Storage Gen1 ressource à l’aide d’un principal du service et OAuth 2,0

vous pouvez monter une ressource Azure Data Lake Storage Gen1 ou un dossier à l’intérieur de celle-ci dans le système de fichiers Databricks (DBFS). Le montage étant un pointeur vers le stockage Data Lake, les données ne sont jamais synchronisées localement.

Important

  • tous les utilisateurs de l’espace de travail Azure Databricks ont accès au compte Azure Data Lake Storage Gen1 monté. le client de service que vous utilisez pour accéder au compte Azure Data Lake Storage Gen1 doit bénéficier d’un accès uniquement à ce compte Azure Data Lake Storage Gen1 ; il ne doit pas être autorisé à accéder à d’autres ressources dans Azure.
  • Une fois qu’un point de montage est créé via un cluster, les utilisateurs de ce 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 en cours d’exécution pour rendre le point de montage nouvellement créé disponible.

DBFS utilise les informations d’identification que vous fournissez lors de la création du point de montage pour accéder au compte de Azure Data Lake Storage Gen1 montée.

monter Azure Data Lake Storage Gen1 ressource ou le dossier

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

Python

configs = {"<prefix>.oauth2.access.token.provider.type": "ClientCredential",
          "<prefix>.oauth2.client.id": "<application-id>",
          "<prefix>.oauth2.credential": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
          "<prefix>.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(
  "<prefix>.oauth2.access.token.provider.type" -> "ClientCredential",
  "<prefix>.oauth2.client.id" -> "<application-id>",
  "<prefix>.oauth2.credential" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
  "<prefix>.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

  • <prefix> est fs.adl pour Databricks Runtime 6,0 et versions ultérieures et dfs.adls pour DATABRICKS Runtime 5,5 LTS.

    Avertissement

    pour les Databricks Runtime 6,0 et versions ultérieures, le dfs.adls. préfixe des clés de configuration Azure Data Lake Storage Gen1 a été déconseillé en faveur de la fs.adl. compatibilité descendante du préfixe est conservée, ce qui signifie que vous pouvez toujours utiliser l’ancien préfixe. Toutefois, il existe deux inconvénients lorsque vous utilisez l’ancien préfixe : 1. L’appel spark.conf.get de avec une clé à l’aide du nouveau préfixe échoue, sauf s’il a été défini explicitement. 2. les messages d’erreur référençant une clé de configuration Azure Data Lake Storage Gen1 utilisent toujours le nouveau préfixe. Pour Databricks Runtime 5,5 LTS, vous devez toujours utiliser l’ancien préfixe.

  • <mount-name>est un chemin d’accès DBFS qui représente l’emplacement où le compte Azure Data Lake Storage Gen1 ou un dossier à l’intérieur de celui-ci (spécifié dans source ) est monté dans DBFS.

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") récupère votre clé d’accès de compte de stockage qui a été stockée en tant que dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") dans une étendue secrète.

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

Python

df = spark.read.text("/mnt/%s/...." % <mount-name>)
df = spark.read.text("dbfs:/<mount-name>/....")

Scala

val df = spark.read.text("/mnt/<mount-name>/....")
val df = spark.read.text("dbfs:/<mount-name>/....")

Démonter un point de montage

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

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

Accéder directement aux API Spark à l’aide d’un principal du service et OAuth 2,0

vous pouvez accéder directement à un compte de stockage Azure Data Lake Storage Gen1 (par opposition au montage avec DBFS) avec OAuth 2,0 à l’aide du principal de service.

Accès à l’aide de l’API tableau

pour lire à partir de votre compte Azure Data Lake Storage Gen1, vous pouvez configurer Spark pour utiliser les informations d’identification de service avec l’extrait de code suivant dans votre bloc-notes :

spark.conf.set("<prefix>.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("<prefix>.oauth2.client.id", "<application-id>")
spark.conf.set("<prefix>.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"))
spark.conf.set("<prefix>.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

where

  • <prefix> est fs.adl pour Databricks Runtime 6,0 et versions ultérieures et dfs.adls pour DATABRICKS Runtime 5,5 LTS.

    Avertissement

    pour les Databricks Runtime 6,0 et versions ultérieures, le dfs.adls. préfixe des clés de configuration Azure Data Lake Storage Gen1 a été déconseillé en faveur de la fs.adl. compatibilité descendante du préfixe est conservée, ce qui signifie que vous pouvez toujours utiliser l’ancien préfixe. Toutefois, il existe deux inconvénients lorsque vous utilisez l’ancien préfixe : 1. L’appel spark.conf.get de avec une clé à l’aide du nouveau préfixe échoue, sauf s’il a été défini explicitement. 2. les messages d’erreur référençant une clé de configuration Azure Data Lake Storage Gen1 utilisent toujours le nouveau préfixe. Pour Databricks Runtime 5,5 LTS, vous devez toujours utiliser l’ancien préfixe.

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") récupère votre clé d’accès de compte de stockage qui a été stockée en tant que dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") dans une étendue secrète.

Une fois vos informations d’identification configurées, vous pouvez utiliser les API Spark et Databricks standard pour lire à partir de la ressource. Par exemple :

val df = spark.read.parquet("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 du 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 avec l’API RDD

Les options de configuration Hadoop définies à l’aide de spark.conf.set(...) ne sont pas accessibles via SparkContext . Cela signifie que, bien qu’ils soient visibles par l’API tableau et DataSet, ils ne sont pas visibles par l’API RDD. si vous utilisez l’API RDD pour lire à partir de Azure Data Lake Storage Gen1, vous devez définir les informations d’identification à l’aide de l’une des méthodes suivantes :

  • Spécifiez les options de configuration des informations d’identification Hadoop en tant qu’options Spark lors de la création du cluster. Vous devez ajouter le spark.hadoop. préfixe aux clés de configuration Hadoop correspondantes pour les propager aux configurations Hadoop utilisées pour vos travaux RDD :

    spark.hadoop.<prefix>.oauth2.access.token.provider.type ClientCredential
    spark.hadoop.<prefix>.oauth2.client.id <application-id>
    spark.hadoop.<prefix>.oauth2.credential <service-credential>
    spark.hadoop.<prefix>.oauth2.refresh.url "https://login.microsoftonline.com/<directory-id>/oauth2/token"
    
  • Les utilisateurs Scala peuvent définir les informations d’identification dans spark.sparkContext.hadoopConfiguration :

    spark.sparkContext.hadoopConfiguration.set("<prefix>.oauth2.access.token.provider.type", "ClientCredential")
    spark.sparkContext.hadoopConfiguration.set("<prefix>.oauth2.client.id", "<application-id>")
    spark.sparkContext.hadoopConfiguration.set("<prefix>.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"))
    spark.sparkContext.hadoopConfiguration.set("<prefix>.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
    

    where

    • <prefix> est fs.adl pour Databricks Runtime 6,0 et versions ultérieures et dfs.adls pour DATABRICKS Runtime 5,5 LTS.

      Avertissement

      pour les Databricks Runtime 6,0 et versions ultérieures, le dfs.adls. préfixe des clés de configuration Azure Data Lake Storage Gen1 a été déconseillé en faveur de la fs.adl. compatibilité descendante du préfixe est conservée, ce qui signifie que vous pouvez toujours utiliser l’ancien préfixe. Toutefois, il existe deux inconvénients lorsque vous utilisez l’ancien préfixe : 1. L’appel spark.conf.get de avec une clé à l’aide du nouveau préfixe échoue, sauf s’il a été défini explicitement. 2. les messages d’erreur référençant une clé de configuration Azure Data Lake Storage Gen1 utilisent toujours le nouveau préfixe. Pour Databricks Runtime 5,5 LTS, vous devez toujours utiliser l’ancien préfixe.

    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") récupère votre clé d’accès de compte de stockage qui a été stockée en tant que dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") dans une étendue secrète.

Avertissement

Ces informations d’identification sont accessibles à tous les utilisateurs qui accèdent au cluster.

Accès via le magasin de clés

Pour accéder aux adl:// emplacements spécifiés dans le magasin de données, vous devez spécifier les options de configuration des informations d’identification Hadoop comme options Spark lors de la création du cluster en ajoutant le spark.hadoop. préfixe aux clés de configuration Hadoop correspondantes pour les propager vers les configurations Hadoop utilisées par le magasin de données :

spark.hadoop.<prefix>.oauth2.access.token.provider.type ClientCredential
spark.hadoop.<prefix>.oauth2.client.id <application-id>
spark.hadoop.<prefix>.oauth2.credential <service-credential>
spark.hadoop.<prefix>.oauth2.refresh.url https://login.microsoftonline.com/<directory-id>/oauth2/token

<prefix> est fs.adl pour Databricks Runtime 6,0 et versions ultérieures et dfs.adls pour Databricks Runtime 5,5 LTS.

Avertissement

  • pour les Databricks Runtime 6,0 et versions ultérieures, le dfs.adls. préfixe des clés de configuration Azure Data Lake Storage Gen1 a été déconseillé en faveur de la fs.adl. compatibilité descendante du préfixe est conservée, ce qui signifie que vous pouvez toujours utiliser l’ancien préfixe. Toutefois, il existe deux inconvénients lorsque vous utilisez l’ancien préfixe : 1. L’appel spark.conf.get de avec une clé à l’aide du nouveau préfixe échoue, sauf s’il a été défini explicitement. 2. les messages d’erreur référençant une clé de configuration Azure Data Lake Storage Gen1 utilisent toujours le nouveau préfixe. Pour Databricks Runtime 5,5 LTS, vous devez toujours utiliser l’ancien préfixe.
  • Ces informations d’identification sont accessibles à tous les utilisateurs qui accèdent au cluster.

Configurer des informations d’identification de service pour plusieurs comptes

Notes

Requiert Databricks Runtime 6,0 ou version ultérieure.

vous pouvez configurer des informations d’identification de service pour plusieurs comptes Azure Data Lake Storage Gen1 à utiliser dans une même session Spark en ajoutant account.<account-name> aux clés de configuration. Par exemple, si vous souhaitez configurer des informations d’identification pour que les comptes accèdent à adl://example1.azuredatalakestore.net et adl://example2.azuredatalakestore.net , vous pouvez procéder comme suit :

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 fonctionne é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 bloc-notes suivant montre comment accéder directement à Azure Data Lake Storage Gen1 et avec un montage à l’aide du préfixe fs.adl de clé de configuration présenté dans Databricks Runtime 6,0. Si vous souhaitez exécuter le bloc-notes sur Databricks Runtime 5,5 LTS, remplacez le préfixe par dfs.adls .

Bloc-notes du service principal ADLS Gen1

Obtenir le notebook