Share via


Acessar o Azure Data Lake Storage Gen1 pelo Azure Databricks

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

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

  1. Transmita suas credenciais do Microsoft Entra ID (antigo Azure Active Directory), também conhecidas como passagem de credenciais.
  2. Use uma entidade de serviço diretamente.

Acesse automaticamente com suas credenciais do Microsoft Entra ID (antigo Azure Active Directory)

Você pode se autenticar automaticamente no Azure Data Lake Storage Gen1 a partir de clusters do Azure Databricks usando a mesma identidade do Microsoft Entra ID que você usa para fazer login no Azure Databricks. Quando você habilita seu cluster para a passagem de credenciais do Microsoft Entra ID, os comandos que você executa nesse cluster poderão ler e gravar seus dados no Azure Data Lake Storage Gen1 sem exigir que você configure credenciais da entidade de serviço para acesso ao armazenamento.

Para obter instruções completas de configuração e uso, consulte Acessar o Azure Data Lake Storage usando a passagem de credenciais (herdada) do Microsoft Entra ID (antigo Azure Active Directory).

Criar e conceder permissões para a 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. Criar um aplicativo e uma entidade de serviço do Microsoft Entra ID (antigo Azure Active Directory) que pode acessar recursos. Anote as seguintes propriedades:
    • application-id: uma ID que identifica exclusivamente o aplicativo cliente.
    • directory-id: Uma ID que identifica exclusivamente a instância do Microsoft Entra ID.
    • service-credential: uma cadeia de caracteres usada pelo aplicativo para provar a respectiva 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 direto com APIs do Spark usando uma entidade de serviço e o OAuth 2.0

Para fazer uma leitura da sua conta do Azure Data Lake Storage Gen1, configure o Spark para usar credenciais de serviço com o seguinte snippet no notebook:

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

onde

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

Depois que as suas credenciais forem configuradas, use 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 de nível do diretório. Portanto, a entidade de serviço precisa ter acesso aos diretórios que deseja ler, bem como ao recurso do Azure Data Lake Storage Gen1.

Acesso por meio do metastore

Para acessar os locais adl:// especificados no metastore, você precisa especificar opções de configuração de credencial 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.

Montar um recurso ou uma 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)

onde

  • <mount-name> é um caminho do DBFS que representa o local em que a conta do Azure Data Lake Storage Gen1 ou uma pasta dentro dele (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 segredo em um escopo secreto.

Acesse os arquivos no seu contêiner como se eles 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 sessão individual do Spark adicionando account.<account-name> às chaves de configuração. Por exemplo, se você quiser configurar as credenciais para as contas a fim de acessar adl://example1.azuredatalakestore.net e adl://example2.azuredatalakestore.net, faça 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 Spark do cluster:

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 notebook a seguir demonstra como acessar o Azure Data Lake Storage Gen1 diretamente e com uma montagem.

Notebook da entidade de serviço do ADLS Gen1

Obter notebook