Aceder ao Azure Data Lake Storage Gen1 a partir do Azure Databricks

A Microsoft anunciou a desativação planejada do Azure Data Lake Storage Gen1 (anteriormente Azure Data Lake Store, também conhecido como ADLS) e recomenda que todos os usuários migrem para o Azure Data Lake Storage Gen2. O Databricks recomenda a atualização para o Azure Data Lake Storage Gen2 para obter o melhor desempenho e novos recursos.

Há duas maneiras de acessar o Azure Data Lake Storage Gen1:

  1. Passe suas credenciais do Microsoft Entra ID (anteriormente Azure Ative Directory), também conhecidas como passagem de credenciais.
  2. Utilizar um principal de serviço diretamente.

Aceda automaticamente com as suas credenciais do Microsoft Entra ID (anteriormente Azure Ative Directory)

Pode autenticar-se automaticamente no Azure Data Lake Storage Gen1 a partir de clusters do Azure Databricks utilizando a mesma identidade de ID do Microsoft Entra que utiliza para iniciar sessão no Azure Databricks. Quando você habilita seu cluster para passagem de credenciais do Microsoft Entra ID, os comandos executados nesse cluster poderão ler e gravar seus dados no Azure Data Lake Storage Gen1 sem exigir que você configure as credenciais da entidade de serviço para acesso ao armazenamento.

Para obter instruções completas de configuração e uso, consulte Acessar o Armazenamento do Azure Data Lake usando a passagem de credenciais (legado) do Microsoft Entra ID (anteriormente Azure Ative Directory).

Criar e conceder permissões à entidade de serviço

Se o método de acesso selecionado exigir uma entidade de serviço com permissões adequadas e você não tiver uma, siga estas etapas:

  1. Crie uma entidade de serviço e aplicativo Microsoft Entra ID (anteriormente Azure Ative Directory) que possa acessar recursos. Observe as seguintes propriedades:
    • application-id: Um ID que identifica exclusivamente o aplicativo cliente.
    • directory-id: Uma ID que identifica exclusivamente a instância de ID do Microsoft Entra.
    • service-credential: Uma cadeia de caracteres que o aplicativo usa para provar sua identidade.
  2. Registre a entidade de serviço, concedendo a atribuição de função correta, como Colaborador, na conta do Azure Data Lake Storage Gen1.

Acesso diretamente com APIs do Spark usando uma entidade de serviço e OAuth 2.0

Para ler a partir da sua conta do Azure Data Lake Storage Gen1, pode configurar o Spark para utilizar credenciais de serviço com o seguinte fragmento no seu bloco de notas:

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")

em que

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")Recupera a chave de acesso da conta de armazenamento que foi armazenada como um segredo em um escopo secreto.

Depois de configurar suas credenciais, você pode usar as APIs padrão do Spark e do Databricks para acessar os recursos. Por exemplo:

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

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

O Azure Data Lake Storage Gen1 fornece controle de acesso no nível de diretório, portanto, a entidade de serviço deve ter acesso aos diretórios dos quais você deseja ler, bem como ao recurso Azure Data Lake Storage Gen1.

Acesso através do metastore

Para acessar adl:// os locais especificados no metastore, você deve especificar as opções de configuração de credenciais do Hadoop como opções do Spark ao criar o cluster adicionando o prefixo spark.hadoop. às chaves de configuração do Hadoop correspondentes para propagá-las para as configurações do Hadoop usadas pelo 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

Aviso

  • Essas credenciais estão disponíveis para todos os usuários que acessam o cluster.

Monte o recurso ou pasta do Azure Data Lake Storage Gen1

Para montar um recurso do Azure Data Lake Storage Gen1 ou uma pasta dentro dele, use o seguinte comando:

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)

em que

  • <mount-name> é um caminho DBFS que representa onde a conta do Azure Data Lake Storage Gen1 ou uma pasta dentro dela (especificada em source) será montada no DBFS.
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")Recupera a chave de acesso da conta de armazenamento que foi armazenada como um segredo em um escopo secreto.

Acesse arquivos em seu contêiner como se fossem arquivos locais, por exemplo:

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>/....")

Configurar credenciais de serviço para várias contas

Você pode configurar credenciais de serviço para várias contas do Azure Data Lake Storage Gen1 para uso em uma única sessão do Spark adicionando account.<account-name> às chaves de configuração. Por exemplo, se você quiser configurar credenciais para ambas as contas para acessar adl://example1.azuredatalakestore.net e adl://example2.azuredatalakestore.net, você pode fazer isso da seguinte maneira:

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")

Isso também funciona para a configuração do cluster Spark:

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

O bloco de anotações a seguir demonstra como acessar o Azure Data Lake Storage Gen1 diretamente e com uma montagem.

Notebook principal de serviço ADLS Gen1

Obter o bloco de notas