Conexión a Azure Data Lake Storage y Blob Storage

Importante

Esta documentación se ha retirado y es posible que no se actualice.

En este artículo se describen los patrones heredados para configurar el acceso a Azure Data Lake Storage. Databricks recomienda usar Unity Catalog para configurar el acceso a Azure Data Lake Storage y volúmenes para interactuar directamente con los archivos. Consulte cómo usar identidades administradas de Azure en el Catálogo de Unity para acceder al almacenamiento.

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

Nota:

El controlador heredado para Windows de Azure Storage Blob (WASB) está en desuso. ABFS tiene numerosas ventajas sobre WASB. Consulte la documentación de Azure sobre ABFS. Para obtener documentación sobre el uso del controlador heredado WASB, consulte Conexión a Azure Blob Storage con WASB (heredado).

Paso 1: Registrar una aplicación de Microsoft Entra ID

El registro de una aplicación con Microsoft Entra ID crea una entidad de servicio que puede emplear para proporcionar acceso a las cuentas de almacenamiento de Azure.

Para registrar una aplicación de Microsoft Entra ID, debe tener el rol de Application Administrator o el permiso de Application.ReadWrite.All en Microsoft Entra ID.

  1. En Azure Portal, vaya al servicio Microsoft Entra ID.
  2. En Administrar, haga clic en Registros de aplicaciones.
  3. Haga clic en + Nuevo registro. Escriba un nombre para la aplicación y haga clic en Registrar.
  4. Haga clic en Certificados y secretos.
  5. Haga clic en + Nuevo secreto de cliente.
  6. Agregue una descripción para el secreto y haga clic en Agregar.
  7. Copie y guarde el valor del nuevo secreto.
  8. En la descripción general del registro de aplicaciones, copie y guarde el ID de aplicación (cliente) y el ID de directorio (inquilino).

Paso 2: Asignar roles a la entidad de servicio

Puede controlar el acceso a los recursos de almacenamiento mediante la asignación de roles a un registro de aplicación de Microsoft Entra ID asociado a la cuenta de almacenamiento. Es posible que tenga que asignar otros roles en función de los requisitos específicos.

Para asignar roles en una cuenta de almacenamiento, debe tener el rol de Propietario o Administrador de acceso de usuario de Azure RBAC en la cuenta de almacenamiento.

  1. En el portal de Azure, vaya al servicio Cuentas de almacenamiento.
  2. Seleccione la cuenta de Azure Storage que quiera usar durante el proceso de registro de esta aplicación.
  3. Haga clic en Access Control (IAM).
  4. Haga clic en + Agregar y seleccione Agregar asignación de roles en el menú desplegable.
  5. Establezca el campo Seleccionar en el nombre de la aplicación de Microsoft Entra ID y establezca Rol en Colaborador de datos de Storage Blob.
  6. Haz clic en Guardar.

Paso 3: Configuración de credenciales de Azure en Azure Databricks

Configure el clúster o cuaderno de Azure Databricks con las credenciales de la cuenta de almacenamiento de Azure a la que desea acceder.

Tipos de credenciales admitidos y almacenamiento de secretos

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

  • OAuth 2.0 con una entidad de servicio de Microsoft Entra ID: Databricks recomienda usar entidades de servicio de Id. de Microsoft Entra para conectarse a Azure Data Lake Storage. Para crear una entidad de servicio de Microsoft Entra ID y proporcionarle acceso a cuentas de almacenamiento de Azure, complete los pasos 1 y 2 anteriores.

    Para crear una entidad de servicio de Microsoft Entra ID, debe tener el rol de Application Administrator o el permiso de Application.ReadWrite.All en el Microsoft Entra ID. 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.

    Importante

    Blob Storage no admite entidades de servicio de Microsoft Entra ID.

  • 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 conceder a los usuarios, entidades de servicio y grupos del área de trabajo acceso para leer el ámbito del secreto. Esto protege las credenciales de Azure, a la vez que permite a los usuarios acceder a Azure Storage. Para crear un ámbito de secreto, consulte Administración de ámbitos secretos.

Nota:

Las entidades de servicio de Microsoft Entra ID también se pueden usar para acceder a Azure Storage desde una instancia de Almacén de SQL, consulte Configuraciones de acceso a datos.

Establecimiento de las propiedades de Spark para configurar credenciales de Azure

Puede establecer las propiedades de Spark para configurar las credenciales de Azure para acceder al almacenamiento de Azure. Las credenciales se pueden limitar 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.

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> con el nombre de la clave que contiene el secreto del 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> por 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 almacenamiento de Azure.
  • <scope> por 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.

Paso 4: Acceso al almacenamiento de Azure

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. Databricks recomienda usar el controlador abfss para una mayor seguridad.

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 OAuth 2.0 con Microsoft Entra ID (anteriormente Azure Active Directory)

Abrir el bloc de notas

Problemas conocidos de Azure Data Lake Storage

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 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: