Conectar a Azure Data Lake Storage Gen2 y Blob Storage

En este artículo se explica cómo conectarse a Azure Data Lake Storage Gen2 y Blob Storage desde Azure Databricks.

Databricks recomienda usar Unity Catalog para configurar el acceso a Azure Data Lake Storage Gen2 y volúmenes para la interacción directa con los archivos. ConsulteConexión al almacenamiento de objetos en la nube mediante Unity Catalog.

Nota:

Conexión a Azure Data Lake Storage Gen2 o Blob Storage mediante credenciales de Azure

Las credenciales siguientes se pueden usar para acceder a Azure Data Lake Storage Gen2 o Blob Storage:

  • OAuth 2.0 con una entidad de servicio de Microsoft Entra ID: Databricks recomienda usar entidades de servicio de Microsoft Entra ID para conectarse a Azure Storage. Para crear una entidad de servicio de Microsoft Entra ID y proporcionarle acceso a las cuentas de almacenamiento de Azure, consulte Acceso al almacenamiento con Microsoft Entra ID (anteriormente Azure Active Directory) usando una entidad de servicio.

    Para crear una entidad de servicio de Microsoft Entra ID, debe tener el rol Application Administrator o el permiso Application.ReadWrite.All en Microsoft Entra ID (anteriormente Azure Active Directory). Para asignar roles en una cuenta de almacenamiento, es necesario ser propietario o usuario con el rol RBAC de Azure de administrador de acceso de usuarios en la cuenta de almacenamiento.

  • Firmas de acceso compartido (SAS): es posible usar tokens de SAS de almacenamiento para acceder a Azure Storage. Las SAS permiten restringir el acceso a una cuenta de almacenamiento por medio de tokens temporales con un control de acceso específico.

    Solo puede conceder permisos de token de SAS que tenga en la cuenta de almacenamiento, el contenedor o el archivo usted mismo.

  • Claves de acceso: es posible usar las claves de acceso de una cuenta de almacenamiento para administrar el acceso a Azure Storage. Las claves de acceso de la cuenta de almacenamiento proporcionan acceso total a la configuración de una cuenta de almacenamiento, así como a los datos. Databricks recomienda usar una entidad de servicio de Microsoft Entra ID o un token de SAS para conectarse a Azure Storage en lugar de claves de cuenta.

    Para ver las claves de acceso de una cuenta, es necesario tener el rol Propietario, Colaborador o Servicio de operador de clave de cuenta de almacenamiento en la cuenta de almacenamiento.

El equipo de Databricks recomienda que se usen ámbitos secretos para almacenar todas las credenciales. Puede otorgar a los usuarios, entidades de servicio y grupos de su área de trabajo acceso para leer el ámbito secreto. Esto protege las credenciales de Azure, a la vez que permite a los usuarios acceder a Azure Storage. Para crear un ámbito secreto, consulte Ámbitos secretos.

Establecimiento de las propiedades de Spark para configurar las credenciales de Azure para acceder a Azure Storage

Es posible establecer las propiedades de Spark para configurar las credenciales de Azure para acceder a Azure Storage. Las credenciales se pueden asignar a un clúster o a un cuaderno. Utilice tanto el control de acceso a clústeres como el control de acceso a cuadernos para proteger el acceso a Azure Storage. Consulte Permisos de proceso y Colaborar mediante cuadernos de Databricks.

Nota:

Las entidades de servicio de Microsoft Entra ID también se pueden usar para acceder a Azure Storage desde un almacén de SQL, consulte Habilitar la configuración del acceso a datos.

Para establecer las propiedades de Spark, use el siguiente fragmento de código en la configuración de Spark de un clúster o en un cuaderno:

Entidad de servicio de Azure

Use el siguiente formato para establecer la configuración de Spark del clúster:

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

Puede usar spark.conf.set en cuadernos, como se muestra en el ejemplo siguiente:

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> por el nombre del ámbito de secreto de Databricks.
  • <service-credential-key> por el nombre de la clave que contiene el secreto de cliente.
  • <storage-account> por el nombre de la cuenta de Azure Storage.
  • <application-id> por el Id. de aplicación (cliente) de la aplicación de Microsoft Entra ID.
  • <directory-id> por el Id. de directorio (inquilino) de la aplicación de Microsoft Entra ID.

Tokens de SAS

Es posible configurar tokens de SAS para su uso con varias cuentas de almacenamiento en la misma sesión de 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> con el nombre de la cuenta de Azure Storage.
  • <scope> con el nombre del ámbito de secreto de Azure Databricks.
  • <sas-token-key> con el nombre de la clave que contiene el token de SAS de Azure Storage.

Clave de cuenta

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> con el nombre de la cuenta de Azure Storage.
  • <scope> con el nombre del ámbito de secreto de Azure Databricks.
  • <storage-account-access-key> con el nombre de la clave que contiene la clave de acceso de la cuenta de almacenamiento de Azure.

Acceso a Azure Storage

Una vez que haya configurado correctamente las credenciales para acceder al contenedor de Azure Storage, podrá interactuar con los recursos de la cuenta de almacenamiento mediante el uso de URI. El equipo de Databricks recomienda que se use el controlador abfss.

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');

Cuaderno de ejemplo

Cuaderno de entidades de servicio de ADLS Gen2 OAuth 2.0 con Microsoft Entra ID (anteriormente Azure Active Directory)

Obtener el cuaderno

Problemas conocidos de Azure Data Lake Storage Gen2

Si intenta acceder a un contenedor de almacenamiento creado a través de Azure Portal, puede recibir el siguiente error:

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

Cuando se habilita un espacio de nombres jerárquico, no es necesario crear contenedores a través de Azure Portal. Si ve este problema, elimine el contenedor de blobs mediante Azure Portal. Después de unos minutos, puede acceder al contenedor. Como alternativa, puede cambiar el URI abfss para usar otro contenedor, siempre y cuando este contenedor no se cree mediante Azure Portal.

Consulte Problemas conocidos con Azure Data Lake Storage Gen2 en la documentación de Microsoft.

Uso de patrones en desuso para almacenar y acceder a datos desde Azure Databricks

A continuación se muestran patrones de almacenamiento en desuso: