Pular para o conteúdo principal

Acessando o Azure Data Lake Storage Gen1 da Databricks

A Microsoft anunciou a aposentadoria 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. Databricks recomenda a atualização para Azure Data Lake Storage Gen2 para obter melhor desempenho e novo recurso.

O senhor pode acessar o Azure Data Lake Storage Gen1 diretamente usando uma entidade de serviço.

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

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

  1. Crie um aplicativo Microsoft Entra ID (anteriormente Azure Active Directory) e uma entidade de serviço que possa acessar o recurso. Observe as seguintes propriedades:

    • application-id: uma ID que identifica de forma exclusiva o aplicativo cliente.
    • directory-id: Uma ID que identifica de forma exclusiva a instância do Microsoft Entra ID.
    • service-credential: Uma cadeia de caracteres que o aplicativo usa para provar sua identidade.
  2. registrar a entidade de serviço, concedendo a atribuição de função correta, como Contribuinte, no site Azure Data Lake Storage Gen1 account.

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

Para ler a partir do site Azure Data Lake Storage Gen1 account, o senhor pode configurar o site Spark para usar as credenciais de serviço com o seguinte snippet no Notebook:

Python
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 seu armazenamento account access key que foi armazenado como segredo em um Secret Scope.

Depois de configurar suas credenciais, o senhor pode usar os endereços padrão Spark e Databricks APIs para acessar o recurso. Por exemplo:

Scala
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 em nível de diretório, portanto, a entidade de serviço deve ter acesso aos diretórios dos quais o senhor deseja ler, bem como ao recurso Azure Data Lake Storage Gen1.

Acesso por meio de metastore

Para acessar os locais adl:// especificados no metastore, o senhor deve especificar as opções de configuração de credenciais Hadoop como opções Spark ao criar o clustering, adicionando o prefixo spark.hadoop. à chave de configuração Hadoop correspondente para propagá-las para as configurações Hadoop usadas pelo metastore:

ini
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
atenção
  • Essas credenciais estão disponíveis para todos os usuários que acessam o clustering.

Montar o recurso ou a 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)

onde

  • <mount-name> é um caminho DBFS que representa onde o Azure Data Lake Storage Gen1 account ou uma pasta dentro dele (especificado em source) será montado em DBFS.
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>") recupera seu armazenamento account access key que foi armazenado como segredo em um Secret Scope.

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

Configurar credenciais de serviço para várias contas

O senhor pode configurar credenciais de serviço para várias contas Azure Data Lake Storage Gen1 para uso em uma única sessão Spark adicionando account.<account-name> à chave de configuração. Por exemplo, se quiser configurar credenciais para a conta de acesso a adl://example1.azuredatalakestore.net e adl://example2.azuredatalakestore.net, o senhor pode fazer isso da seguinte forma:

Scala
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 de clustering:Spark

ini
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 seguinte Notebook demonstra como acessar Azure Data Lake Storage Gen1 diretamente e com uma montagem.

ADLS Gen1 entidade de serviço Notebook

Open notebook in new tab