Conexión a Azure Blob Storage con WASB (heredado)
Microsoft ha dejado de usar el controlador Windows Azure Storage Blob (WASB) para Azure Blob Storage en favor del controlador Azure Blob Filesystem (ABFS); vea Conexión a Azure Data Lake Storage Gen2 y Blob Storage. ABFS ofrece numerosas ventajas sobre WASB. Consúltelas en la documentación de Azure para ABFS.
En este artículo se proporciona documentación para mantener el código que usa el controlador WASB. Databricks recomienda usar ABFS para todas las conexiones a Azure Blob Storage.
Configuración de las credenciales WASB en Databricks
El controlador WASB permite usar una clave de acceso de la cuenta de almacenamiento o una Firma de acceso compartido (SAS). (Si lee datos de una cuenta de almacenamiento pública, no es necesario configurar las credenciales).
Databricks recomienda usar secretos siempre que deba pasar credenciales en Azure Databricks. Los secretos están disponibles para todos los usuarios con acceso al ámbito de secretos contenedor.
Puede pasar credenciales:
- Con el ámbito del clúster en la configuración de Spark
- Con el ámbito del cuaderno
- Asociadas a un directorio montado
Databricks recomienda actualizar todas las conexiones a fin de usar ABFS para acceder a Azure Blob Storage, lo que proporciona patrones de acceso similares como WASB. Use ABFS para lograr la mejor seguridad y rendimiento al interactuar con Azure Blob Storage.
Para configurar las credenciales del clúster, establezca las propiedades de configuración de Spark al crear el clúster. Las credenciales establecidas en el nivel de clúster están disponibles para todos los usuarios con acceso a ese clúster.
Para configurar las credenciales con ámbito de cuaderno, use spark.conf.set()
. Las credenciales pasadas en el nivel de cuaderno están disponibles para todos los usuarios con acceso a ese cuaderno.
Establecimiento de las credenciales de Azure Blob Storage con una clave de acceso de la cuenta de almacenamiento
Una clave de acceso de la cuenta de almacenamiento concede acceso total a todos los contenedores de una cuenta de almacenamiento. Aunque este patrón es útil para la creación de prototipos, evite usarlo en producción para reducir los riesgos asociados a la concesión de acceso sin restricciones a los datos de producción.
spark.conf.set(
"fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
"<storage-account-access-key>"
)
Puede actualizar los URI de clave de cuenta para usar ABFS. Consulte Conectar a Azure Data Lake Storage Gen2 y Blob Storage para obtener más información.
Establecimiento de las credenciales de Azure Blob Storage con una firma de acceso compartido (SAS)
Puede usar tokens de SAS para configurar el acceso limitado a un único contenedor de una cuenta de almacenamiento que expira en un momento específico.
spark.conf.set(
"fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
"<sas-token-for-container>"
)
Acceso a Azure Blob Storage mediante la API de DataFrame
La API DataFrame de Apache Spark puede usar credenciales configuradas en el nivel de cuaderno o clúster. Todos los URI del controlador WASB especifican los nombres de cuenta de almacenamiento y contenedor. El nombre del directorio es opcional y puede especificar varios directorios anidados en relación con el contenedor.
wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>
En los ejemplos de código siguientes se muestra cómo puede usar la API DataFrames y la Referencia Utilidades de Databricks (dbutils) para interactuar con un directorio con nombre dentro de un contenedor.
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>")
Para actualizar ABFS en lugar de WASB, actualice los URI. Para más información, veaAcceso a Azure Storage
Acceso a Azure Blob Storage con SQL
Las credenciales establecidas en la configuración de sesión de un cuaderno no son accesibles para los cuadernos que ejecutan Spark SQL.
Una vez configurada una clave de acceso de cuenta o una SAS en la configuración del clúster, puede usar consultas estándar de Spark SQL con Azure Blob Storage:
-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/";
Para actualizar ABFS en lugar de WASB, actualice los URI; vea Acceso a Azure storage
Montaje de contenedores de Azure Blob Storage en DBFS
Puede montar un contenedor de Azure Blob Storage o una carpeta dentro de un contenedor en DBFS. Para recomendaciones de Databricks, consulte Montaje del almacenamiento de objetos en la nube en Azure Databricks.
Importante
- Azure Blob Storage admite tres tipos de blob: en bloques, anexo y en páginas. En DBFS, solo puede montar blobs en bloques.
- Todos los usuarios tienen acceso de lectura y escritura a los objetos de los contenedores de Blob Storage montados en DBFS.
- Después de crear un punto de montaje a través de un clúster, los usuarios de ese clúster pueden acceder al punto de montaje de forma inmediata. Para usar el punto de montaje en otro clúster en ejecución, debe ejecutar
dbutils.fs.refreshMounts()
en ese clúster en ejecución, para que el punto de montaje recién creado esté disponible.
DBFS usa la credencial que proporciona el usuario al crear el punto de montaje para acceder al contenedor montado de Blob Storage. Si un contenedor de Blob Storage se monta mediante una clave de acceso de cuenta de almacenamiento, DBFS usa tokens temporales de SAS, derivados de la clave de la cuenta de almacenamiento cuando accede a este punto de montaje.
Montaje de un contenedor de Azure Blob Storage
Databricks recomienda usar ABFS en lugar de WASB. Para más información sobre el montaje con ABFS, consulte Montaje de ADLS Gen2 o Blob Storage con ABFS.
Para montar un contenedor de Blob Storage o una carpeta dentro de un contenedor, use el siguiente comando:
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>
es el nombre de la cuenta de Azure Blob Storage.<container-name>
es el nombre de un contenedor en la cuenta de Azure Blob Storage.<mount-name>
es una ruta de acceso de DBFS, que representa la ubicación de DBFS en la que se montará o bien el contenedor de Blob Storage, o bien una carpeta dentro del contenedor (especificado ensource
).<conf-key>
puede serfs.azure.account.key.<storage-account-name>.blob.core.windows.net
ofs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net
dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
obtiene la clave que se ha almacenado como un secreto en un ámbito secreto.
Acceda a los archivos del contenedor como si fueran archivos locales, por ejemplo:
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>"