Montaje del almacenamiento de objetos en la nube en Azure Databricks

Azure Databricks admite que los usuarios monten el almacenamiento de objetos en la nube en el sistema de archivos de Databricks (DBFS). De esta manera, es posible simplificar los patrones de acceso a datos para los usuarios que no estén familiarizados con los conceptos de la nube. Los datos montados no funcionan con el catálogo de Unity y, por tanto, el equipo de Databricks recomienda que se migre a un método que no use montajes y, en su lugar, que se administre la gobernanza de datos mediante el catálogo de Unity.

¿Cómo se monta el almacenamiento de objetos en la nube en Azure Databricks?

El uso de los montajes de Azure Databricks crea un vínculo entre un área de trabajo y un almacenamiento de objetos en la nube, Esto le permite interactuar con el almacenamiento de objetos en la nube mediante el uso de rutas de acceso de archivos conocidas que sean relativas al sistema de archivos de Databricks. Los montajes crean un alias local en el directorio /mnt que almacena la siguiente información:

  • La ubicación del almacenamiento de objetos en la nube.
  • Las especificaciones del controlador, que se usan para conectarse a la cuenta de almacenamiento o al contenedor.
  • Las credenciales necesarias para acceder a los datos.

¿Qué sintaxis debe usarse para montar el almacenamiento?

El elemento source especifica el URI del almacenamiento de objetos (y, opcionalmente, puede codificar las credenciales de seguridad). El elemento mount_point especifica la ruta de acceso local que se ubica en el directorio /mnt. Algunos orígenes de almacenamiento de objetos admiten el argumento opcional encryption_type. En algunos patrones de acceso, es posible pasar especificaciones de configuración adicionales al elemento extra_configs en forma de diccionario.

Nota:

Databricks recomienda establecer la configuración específica del montaje de Spark y Hadoop como opciones mediante extra_configs. Esto garantiza que las configuraciones están vinculadas al montaje en lugar del clúster o la sesión.

dbutils.fs.mount(
  source: str,
  mount_point: str,
  encryption_type: Optional[str] = "",
  extra_configs: Optional[dict[str:str]] = None
)

Póngase en contacto con los administradores del área de trabajo y la nube antes de configurar o modificar montajes de datos, ya que configurarlos de forma incorrecta puede proporcionar un acceso no seguro a todos los usuarios del área de trabajo.

Nota:

Además de los enfoques descritos en este artículo, puede automatizar el montaje de un cubo con el proveedor Terraform de Databricks y databricks_mount.

Desmontar un punto de montaje

Para desmontar un punto de montaje, use el comando siguiente:

dbutils.fs.unmount("/mnt/<mount-name>")

Advertencia

Para evitar errores, nunca modifique un punto de montaje mientras otros trabajos leen o escriben en él. Después de modificar un montaje, ejecute siempre dbutils.fs.refreshMounts() en todos los demás clústeres en ejecución para propagar las actualizaciones de montaje. Vea Comando refreshMounts (dbutils.fs.refreshMounts).

Montaje de ADLS Gen2 o Blob Storage con ABFS

Es posible montar datos en una cuenta de almacenamiento de Azure usando la entidad de servicio de aplicación de Microsoft Entra ID (anteriormente Azure Active Directory) para la autenticación. Para obtener más información, consulte Acceso al almacenamiento con Microsoft Entra ID (anteriormente Azure Active Directory) usando una entidad de servicio.

Importante

  • Todos los usuarios del área de trabajo de Azure Databricks tienen acceso a la cuenta de ADLS Gen2 montada. A la entidad de servicio que use para acceder a la cuenta de ADLS Gen2 solo se le debe conceder acceso a esa cuenta de ADLS Gen2; no se le debe conceder acceso a otros recursos de Azure.
  • Cuando cree un punto de montaje a través de un clúster, los usuarios del clúster pueden acceder al punto de montaje de inmediato. 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 para su uso.
  • Desmontar un punto de montaje mientras se ejecutan trabajos puede provocar errores. Asegúrese de que en los trabajos de producción no se desmonta el almacenamiento como parte del procesamiento.
  • Los puntos de montaje que usan secretos no se actualizan automáticamente. Si el almacenamiento montado se basa en un secreto que se rota, expira o se elimina, pueden producirse errores, como 401 Unauthorized. Para resolver este error, debe desmontar el almacenamiento y volver a montarlo.
  • El espacio de nombres jerárquico (HNS) debe estar habilitado para montar correctamente una cuenta de almacenamiento de Azure Data Lake Storage Gen2 mediante el punto de conexión de ABFS.

Ejecute lo siguiente en el cuaderno para autenticarse y crear un punto de montaje.

configs = {"fs.azure.account.auth.type": "OAuth",
          "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
          "fs.azure.account.oauth2.client.id": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)
val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<application-id>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

Replace

  • <application-id> por el Id. de aplicación (cliente) de la aplicación de Azure Active Directory.
  • <scope-name> por el nombre del ámbito de secreto de Databricks.
  • <service-credential-key-name> por el nombre de la clave que contiene el secreto de cliente.
  • <directory-id> por el Id. de directorio (inquilino) de la aplicación de Azure Active Directory.
  • <container-name> por el nombre de un contenedor de la cuenta de almacenamiento de ADLS Gen2.
  • <storage-account-name> por el nombre de la cuenta de almacenamiento de ADLS Gen2.
  • <mount-name> por el nombre del punto de montaje previsto en DBFS.