Acceso a Azure Data Lake Storage Gen1 desde Azure Databricks

Se ha anunciado la retirada planeada de Azure Data Lake Storage Gen1 (anteriormente conocido como Azure Data Lake Store y ADLS) y, por tanto, es recomendable que todos los usuarios migren a Azure Data Lake Storage Gen2. El equipo de Databricks recomienda que se actualice al conjunto de capacidades Azure Data Lake Storage Gen2 para obtener el mejor rendimiento y nuevas características.

Hay tres formas de acceder a Azure Data Lake Storage Gen1. Estas se muestran a continuación:

  1. Pase sus credenciales de Microsoft Entra ID (anteriormente Azure Active Directory), lo que también se conoce como acceso directo de credenciales.
  2. Use una entidad de servicio directamente.

Acceder automáticamente con las credenciales de Microsoft Entra ID (anteriormente Azure Active Directory).

Puede autenticarse automáticamente en Azure Data Lake Storage Gen1 desde clústeres de Azure Databricks mediante la misma identidad de Microsoft Entra ID que se usa para iniciar sesión en Azure Databricks. Cuando habilite el clúster para el acceso directo con credenciales de Microsoft Entra ID. Así, los comandos que ejecute en ese clúster podrán leer y escribir sus datos en Azure Data Lake Storage Gen1 sin necesidad de configurar las credenciales de la entidad de servicio para el acceso al almacenamiento.

Para obtener instrucciones completas de instalación y uso, consulte Acceso a Azure Data Lake Storage mediante el acceso directo a credenciales de Microsoft Entra ID (anteriormente Azure Active Directory) (heredado).

Creación y concesión de permisos a la entidad de servicio

Si el método de acceso seleccionado requiere una entidad de servicio con los permisos adecuados y no dispone de ninguna, siga estos pasos:

  1. Cree una aplicación y una entidad de servicio de Microsoft Entra ID (anteriormente Azure Active Directory) que puedan acceder a los recursos. Tenga en cuenta las propiedades siguientes:
    • application-id: id. que identifica la aplicación cliente de forma única.
    • directory-id: un id. que identifica la instancia de Microsoft Entra ID de forma única.
    • service-credential: cadena que la aplicación usa para demostrar su identidad.
  2. Registre la entidad de servicio, a la que se le concede la asignación de roles correcta (como Colaborador) en la cuenta de Azure Data Lake Storage Gen1.

Acceso directo con las API de Spark mediante una entidad de servicio y OAuth 2.0

Para leer desde la cuenta de Azure Data Lake Storage Gen1, puede configurar Spark para que use credenciales de servicio con el siguiente fragmento de código en el cuaderno:

spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("fs.adl.oauth2.client.id", "<application-id>")
spark.conf.set("fs.adl.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"))
spark.conf.set("fs.adl.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

where

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") recupera la clave de acceso de la cuenta de almacenamiento que se ha almacenado como secreto en un ámbito de secreto.

Cuando haya configurado las credenciales, podrá usar las API estándar de Spark y Databricks para acceder a los recursos. Por ejemplo:

val df = spark.read.format("parquet").load("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

dbutils.fs.ls("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

Azure Data Lake Storage Gen1 proporciona control de acceso en el nivel de directorio, por lo que la entidad de servicio debe tener acceso a los directorios desde los que quiera leer, así como al recurso de Azure Data Lake Storage Gen1.

Acceso a través de metastore

Para acceder a las ubicaciones adl:// especificadas en el metastore, debe especificar las opciones de configuración de credenciales de Hadoop como opciones de Spark al crear el clúster mediante la adición del prefijo spark.hadoop. a las claves de configuración de Hadoop correspondientes para propagarlas a las configuraciones de Hadoop que usa el metastore:

spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential
spark.hadoop.fs.adl.oauth2.client.id <application-id>
spark.hadoop.fs.adl.oauth2.credential <service-credential>
spark.hadoop.fs.adl.oauth2.refresh.url https://login.microsoftonline.com/<directory-id>/oauth2/token

Advertencia

  • Estas credenciales están disponibles para todos los usuarios que acceden al clúster.

Montaje de un recurso o carpeta de Azure Data Lake Storage Gen1

Para montar un recurso de Azure Data Lake Storage Gen1 o una carpeta dentro de este, use el comando siguiente:

Python

configs = {"fs.adl.oauth2.access.token.provider.type": "ClientCredential",
          "fs.adl.oauth2.client.id": "<application-id>",
          "fs.adl.oauth2.credential": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
          "fs.adl.oauth2.refresh.url": "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 = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)

Scala

val configs = Map(
  "fs.adl.oauth2.access.token.provider.type" -> "ClientCredential",
  "fs.adl.oauth2.client.id" -> "<application-id>",
  "fs.adl.oauth2.credential" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
  "fs.adl.oauth2.refresh.url" -> "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 = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

where

  • <mount-name>es una ruta de acceso de DBFS que representa dónde se montará en DBFS la cuenta de Azure Data Lake Storage Gen1 o una carpeta dentro de ella (especificada en source).
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") recupera la clave de acceso de la cuenta de almacenamiento que se ha almacenado como secreto en un ámbito de secreto.

Acceda a los archivos del contenedor como si fueran archivos locales, por ejemplo:

Python

df = spark.read.format("text").load("/mnt/<mount-name>/....")
df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")

Scala

val df = spark.read.format("text").load("/mnt/<mount-name>/....")
val df = spark.read.format("text").load("dbfs:/mnt/<mount-name>/....")

Configuración de credenciales de servicio para varias cuentas

Puede configurar credenciales de servicio para varias cuentas de Azure Data Lake Storage Gen1 a fin de usarlas en una sola sesión de Spark mediante la adición de account.<account-name> a las claves de configuración. Por ejemplo, si quiere configurar las credenciales para que ambas cuentas accedan a adl://example1.azuredatalakestore.nety adl://example2.azuredatalakestore.net, puede hacerlo de la siguiente forma:

spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")

spark.conf.set("fs.adl.account.example1.oauth2.client.id", "<application-id-example1>")
spark.conf.set("fs.adl.account.example1.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example1>"))
spark.conf.set("fs.adl.account.example1.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example1>/oauth2/token")

spark.conf.set("fs.adl.account.example2.oauth2.client.id", "<application-id-example2>")
spark.conf.set("fs.adl.account.example2.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example2>"))
spark.conf.set("fs.adl.account.example2.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example2>/oauth2/token")

Esto también funciona para la configuración de Spark del clúster:

spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential

spark.hadoop.fs.adl.account.example1.oauth2.client.id <application-id-example1>
spark.hadoop.fs.adl.account.example1.oauth2.credential <service-credential-example1>
spark.hadoop.fs.adl.account.example1.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example1>/oauth2/token

spark.hadoop.fs.adl.account.example2.oauth2.client.id <application-id-example2>
spark.hadoop.fs.adl.account.example2.oauth2.credential <service-credential-example2>
spark.hadoop.fs.adl.account.example2.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example2>/oauth2/token

En el siguiente cuaderno se muestra cómo acceder a Azure Data Lake Storage Gen1 tanto directamente como con un montaje.

Cuaderno de entidad de servicio de ADLS Gen1

Obtener el cuaderno