Partager via


Se connecter au Stockage Blob Azure avec WASB (hérité)

Microsoft a abandonné le pilote Windows Azure Storage Blob (WASB) pour Stockage Blob Azure au profit du pilote Azure Blob Filesystem (ABFS) ; consultez Se connecter à Azure Data Lake Storage Gen2 et au stockage Blob. ABFS présente de nombreux avantages par rapport à WASB. Consultez la documentation Azure sur ABFS.

Cet article fournit une documentation sur la maintenance du code qui utilise le pilote WASB. Databricks recommande d’utiliser ABFS pour toutes les connexions au Stockage Blob Azure.

Configurer les informations d’identification WASB dans Databricks

Le pilote WASB vous permet d’utiliser une clé d’accès au compte de stockage ou une signature d’accès partagé (SAP). (Si vous lisez des données à partir d’un compte de stockage public, vous n’avez pas besoin de configurer d’informations d’identification).

Databricks recommande d’utiliser des secrets chaque fois que vous devez passer des informations d’identification dans Azure Databricks. Les secrets sont disponibles pour tous les utilisateurs ayant accès à l’étendue de secrets dans laquelle ils figurent.

Vous pouvez passer des informations d’identification :

  • Délimitées sur le cluster dans la configuration Spark
  • Délimitées sur le notebook
  • Attachées à un répertoire monté

Databricks recommande de mettre à niveau toutes les connexions pour utiliser ABFS pour accéder au Stockage Blob Azure, ce qui permet d’obtenir des modèles d’accès similaires à WASB. Utilisez ABFS pour optimiser la sécurité et les performances lors de l’interaction avec Stockage Blob Azure.

Pour configurer les informations d’identification du cluster, définissez les propriétés de configuration Spark lorsque vous créez le cluster. Les informations d’identification définies au niveau du cluster sont disponibles pour tous les utilisateurs ayant accès à celui-ci.

Pour configurer les informations d’identification délimitées sur le notebook, utilisez spark.conf.set(). Les informations d’identification passées au niveau du notebook sont disponibles pour tous les utilisateurs ayant accès à celui-ci.

Définition des informations d’identification de Stockage Blob Azure avec une clé d’accès au compte de stockage

Une clé d’accès au compte de stockage donne un accès total à tous les conteneurs au sein d’un compte de stockage. Bien que ce modèle soit utile pour le prototypage, évitez de l’utiliser en production afin de réduire les risques associés à l’octroi d’un accès illimité aux données de production.

spark.conf.set(
  "fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
  "<storage-account-access-key>"
)

Vous pouvez mettre à niveau les URI de clé de compte pour utiliser ABFS. Pour plus d’information, consultez Se connecter à Azure Data Lake Storage Gen2 et Stockage Blob.

Définition d’informations d’identification de Stockage Blob Azure avec une signature d’accès partagé (SAP)

Vous pouvez utiliser des jetons SAP pour configurer un accès limité à un conteneur dans un compte de stockage qui expire à un moment spécifique.

spark.conf.set(
  "fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
  "<sas-token-for-container>"
)

Accéder au Stockage Blob Azure à l’aide de l’API DataFrame

L’API Apache Spark DataFrame peut utiliser des informations d’identification configurées au niveau du notebook ou du cluster. Toutes les URI de pilote WASB spécifient les noms de conteneur et de compte de stockage. Le nom de répertoire est facultatif et peut spécifier plusieurs répertoires imbriqués par rapport au conteneur.

wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>

Les exemples de code suivants montrent comment utiliser l'API DataFrames et la référence Databricks Utilities (dbutils) pour interagir avec un répertoire nommé dans un conteneur.

df = spark.read.format("parquet").load("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

dbutils.fs.ls("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

Pour mettre à jour ABFS au lieu de WASB, mettez à jour vos URI. Pour plus d’informations, consultez Accéder au stockage Azure

Accès au Stockage Blob Azure avec T-SQL

Les informations d’identification définies dans la configuration de session d’un notebook ne sont pas accessibles aux notebooks exécutant Spark SQL.

Une fois qu’une clé d’accès au compte ou une SAP sont configurées dans la configuration de votre cluster, vous pouvez utiliser des requêtes Spark SQL standard avec le Stockage Blob Azure :

-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/";

Pour mettre à jour ABFS au lieu de WASB, mettez à jour vos URI ; voir Accéder au stockage Azure

Monter des conteneurs de Stockage Blob Azure sur DBFS

Vous pouvez monter un conteneur de Stockage Blob Azure ou un dossier à l’intérieur d’un conteneur sur DBFS. Pour obtenir des recommandations concernant Databricks, consultez Montage de stockage d’objets cloud sur Azure Databricks.

Important

  • Stockage Blob Azure prend en charge trois types de blobs : objet blob de blocs, objet blob d’ajout et objet blob de pages. Vous pouvez monter seulement des objets blob de blocs sur DBFS.
  • Tous les utilisateurs ont accès en lecture et en écriture aux objets des conteneurs de stockage Blob montés sur DBFS.
  • Dès qu’un point de montage a été créé via un cluster, les utilisateurs de celui-ci peuvent immédiatement accéder 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 celui-ci pour rendre disponible le point de montage nouvellement créé.

DBFS utilise les informations d’identification que vous avez fournies lors de la création du point de montage pour accéder au conteneur de stockage Blob monté. Si un conteneur de stockage Blob est monté à l’aide d’une clé d’accès de compte de stockage, DBFS utilise des jetons SAP temporaires dérivés de la clé de compte de stockage lorsqu’il accède à ce point de montage.

Monter un conteneur de stockage Blob Azure

Databricks recommande d’utiliser ABFS au lieu de WASB. Pour plus d’informations sur le montage avec ABFS, consultez Monter un stockage ADLS Gen2 ou Stockage Blob avec ABFS.

  1. Pour monter un conteneur de stockage Blob ou un dossier à l’intérieur d’un conteneur, utilisez la commande suivante :

    Python

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
      mount_point = "/mnt/<mount-name>",
      extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})
    

    Scala

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>",
      mountPoint = "/mnt/<mount-name>",
      extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))
    

    where

    • <storage-account-name> est le nom de votre compte de stockage Blob Azure.
    • <container-name> est le nom d’un conteneur dans votre compte de stockage Blob Azure.
    • <mount-name> est un chemin DBFS représentant l’emplacement où le conteneur de stockage Blob ou un dossier à l’intérieur du conteneur (spécifié dans source) sera monté dans DBFS.
    • <conf-key> peut être soit fs.azure.account.key.<storage-account-name>.blob.core.windows.net, soit fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net.
    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") obtient la clé qui a été stockée en tant que secret dans une étendue de secrets.
  2. Accédez aux fichiers dans votre conteneur comme s’il s’agissait de fichiers locaux, par exemple :

    Python

    # python
    df = spark.read.format("text").load("/mnt/<mount-name>/...")
    df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    Scala

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

    SQL

    -- SQL
    CREATE DATABASE <db-name>
    LOCATION "/mnt/<mount-name>"