Se connecter à Azure Blob Storage avec WASB (hérité)
Microsoft a déprécié le Driver Windows Azure Storage Blob (WASB) pour Azure Blob Storage en faveur du Driver Azure Blob Filesystem (ABFS) ; consultez Se connecter à Azure Data Lake Storage et Azure Blob Storage. ABFS présente de nombreux avantages par rapport à WASB ; consultez la documentation Azure sur ABFS.
Cet article fournit une documentation pour la maintenance du code qui utilise le driver WASB. Databricks recommande d'utiliser ABFS pour toutes les connexions au Stockage Azure Blob.
Configurer les identifiants WASB dans Databricks
Le Driver WASB vous permet d'utiliser soit une clé d'accès de compte de stockage, soit une signature d'accès partagé (SAS). (Si vous lisez des données à partir d'un compte de stockage public, vous n'avez pas besoin de configurer les identifiants).
Databricks recommande d'utiliser des secrets chaque fois que vous devez transmettre des informations d'identification dans Databricks. Les secrets sont accessibles à tous les utilisateurs ayant accès au Secret Scope qui les contient.
Vous pouvez transmettre des identifiants :
- Portée au cluster dans la configuration Spark
- Limité au Notebook
- Attaché à un répertoire monté
Databricks recommande de mettre à niveau toutes vos connexions afin d'utiliser ABFS pour accéder à Azure Blob Storage, qui fournit des modèles d'accès similaires à WASB. Utilisez ABFS pour une sécurité et des performances optimales lors de l'interaction avec Azure Blob Storage.
Pour configurer les informations d'identification du cluster, définissez les propriétés de configuration Spark lorsque vous créez le cluster. Les identifiants définis au niveau du cluster sont disponibles pour tous les utilisateurs ayant accès à ce cluster.
Pour configurer les identifiants délimités par le notebook, utilisez spark.conf.set(). Les identifiants passés au niveau du Notebook sont disponibles pour tous les utilisateurs ayant accès à ce Notebook.
Définition des identifiants Azure Blob Storage avec une clé d’accès au compte de stockage
Une clé d'accès de compte de stockage octroie un accès complet à 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'informations, consultez Se connecter à Azure Data Lake Storage et à Stockage Blob.
Définition des informations d'identification d'Azure Blob Storage avec une signature d'accès partagé (SAS)
Vous pouvez utiliser des jetons SAS pour configurer un accès limité à un seul conteneur dans un compte de stockage qui expire à un moment précis.
spark.conf.set(
"fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
"<sas-token-for-container>"
)
Accéder au Stockage Azure Blob à 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. Tous les URI de Driver WASB spécifient les noms du conteneur et du compte de stockage. Le nom du 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 vous pouvez utiliser l'API DataFrames et la référence des utilitaires Databricks (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 Étape 4 : Accéder au stockage Azure
Accéder à Azure Blob Storage avec SQL
Les identifiants définis 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 un SAS est configuré dans votre configuration de cluster, vous pouvez utiliser des requêtes Spark SQL standard avec Azure Blob Storage :
-- 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 ; consultez Étape 4 : Accéder au stockage Azure
Monter les conteneurs Azure Blob Storage sur DBFS
Vous pouvez monter un conteneur Azure Blob Storage ou un dossier à l'intérieur d'un conteneur vers DBFS. Pour les recommandations Databricks, consultez Montage du stockage d'objets cloud sur Databricks.
- Le stockage Azure Blob prend en charge trois types de blobs: de bloc, d'ajout et de page. Vous ne pouvez monter des objets blob *bloc* que sur DBFS.
- Tous les utilisateurs ont un accès en lecture et en écriture aux objets dans les conteneurs de stockage Blob montés sur DBFS.
- Après la création d'un point de montage via un cluster, les utilisateurs de ce cluster peuvent y accéder immédiatement. 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 afin de rendre le point de montage nouvellement créé disponible.
DBFS utilise les informations d’identification que vous fournissez lorsque vous créez le 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 SAS temporaires dérivés de la clé du compte de stockage lorsqu'il accède à ce point de montage.
Monter un conteneur de stockage Azure Blob
Databricks recommande d'utiliser ABFS au lieu de WASB. Pour plus d'information sur le montage avec ABFS, consultez : Monter ADLS ou Blob Storage avec ABFS.
- Pour monter un conteneur de stockage Blob ou un dossier à l'intérieur d'un conteneur, utilisez la commande suivante :
- Python
- Scala
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>")})
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>")))
où
<storage-account-name>est le nom de votre compte de stockage Azure Blob.<container-name>est le nom d'un conteneur dans votre compte de stockage Azure Blob.<mount-name>est un chemin DBFS indiquant l'emplacement où le conteneur de stockage Blob ou un dossier à l'intérieur du conteneur (spécifié danssource) sera monté dans DBFS.<conf-key>peut êtrefs.azure.account.key.<storage-account-name>.blob.core.windows.netoufs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.netdbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")obtient la clé qui a été stockée en tant que secret dans un Secret Scope.
- Accédez aux fichiers de votre conteneur comme s'il s'agissait de fichiers locaux, par exemple :
- Python
- Scala
- SQL
# python
df = spark.read.format("text").load("/mnt/<mount-name>/...")
df = spark.read.format("text").load("dbfs:/<mount-name>/...")
// scala
val df = spark.read.format("text").load("/mnt/<mount-name>/...")
val df = spark.read.format("text").load("dbfs:/<mount-name>/...")
-- SQL
CREATE DATABASE <db-name>
LOCATION "/mnt/<mount-name>"