Conectar-se ao Armazenamento Azure Data Lake e ao Armazenamento de Blobs

Importante

Esta documentação foi desativada e pode não ser atualizada.

Este artigo descreve padrões herdados para configurar o acesso ao Armazenamento do Azure Data Lake. A Databricks recomenda o uso do Catálogo Unity para configurar o acesso ao Armazenamento e volumes do Azure Data Lake para interação direta com arquivos. Veja Utilize identidades geridas do Azure no Unity Catalog para aceder ao armazenamento.

Este artigo explica como se conectar ao Armazenamento Azure Data Lake e ao Armazenamento de Blob do Azure Databricks.

Nota

O driver antigo do Windows Armazenamento do Azure Blob (WASB) foi descontinuado. A ABFS tem inúmeros benefícios em relação ao WASB. Consulte a documentação do Azure no ABFS. Para obter documentação sobre o uso do driver WASB legado, consulte Conectar-se ao Armazenamento de Blobs do Azure com WASB (herdado).

Passo 1: Registar uma aplicação Microsoft Entra ID

Registrar uma aplicação com o Microsoft Entra ID cria uma entidade de serviço que pode ser usada para fornecer acesso às contas de armazenamento do Azure.

Para registrar um aplicativo Microsoft Entra ID, você deve ter a Application Administrator função ou a Application.ReadWrite.All permissão no Microsoft Entra ID.

  1. No portal do Azure, vá para o serviço Microsoft Entra ID .
  2. Em Gerir, clique em Registos de Aplicações.
  3. Clique em + Novo registo. Introduza um nome para a aplicação e clique em Registar.
  4. Clique em Certificados & Segredos.
  5. Clique em + Novo segredo de cliente.
  6. Adicione uma descrição para o segredo e clique em Adicionar.
  7. Copie e salve o valor do novo segredo.
  8. Na visão geral do registro do aplicativo, copie e salve o ID do aplicativo (cliente) e o ID do diretório (locatário).

Passo 2: Atribuir papéis ao principal do serviço

Você controla o acesso aos recursos de armazenamento atribuindo funções a um registro de aplicativo Microsoft Entra ID associado à conta de armazenamento. Talvez seja necessário atribuir outras funções, dependendo dos requisitos específicos.

Para atribuir funções numa conta de armazenamento, deve ter a função Proprietário ou Administrador de Acesso de Utilizador do RBAC do Azure na conta de armazenamento.

  1. No portal do Azure, vá para o serviço Contas de armazenamento .
  2. Selecione uma conta de armazenamento do Azure para usar com este registro de aplicativo.
  3. Clique em Controle de acesso (IAM).
  4. Clique em + Adicionar e selecione Adicionar atribuição de função no menu suspenso.
  5. Defina o campo Select como o nome do aplicativo Microsoft Entra ID e defina Role como Storage Blob Data Contributor.
  6. Clique em Salvar.

Passo 3: Configurar credenciais Azure no Azure Databricks

Configure o seu cluster ou notebook do Azure Databricks com as credenciais da conta de armazenamento Azure à qual pretende aceder.

Tipos de credenciais suportados e armazenamento secreto

As seguintes credenciais podem ser usadas para acessar o Armazenamento Azure Data Lake ou o Armazenamento de Blob:

  • OAuth 2.0 com uma entidade de serviço Microsoft Entra ID: O Databricks recomenda utilizar entidades de serviço do Microsoft Entra ID para se conectar ao Armazenamento Azure Data Lake. Para criar um principal de serviço Microsoft Entra ID e fornecer-lhe acesso às contas de armazenamento do Azure, complete os Passos 1 e 2 acima.

    Para criar uma entidade de serviço do Microsoft Entra ID, você deve ter a Application Administrator função ou a Application.ReadWrite.All permissão no Microsoft Entra ID. Para atribuir funções numa conta de armazenamento, tem de ser um proprietário ou um utilizador com a função de Administrador de Acesso de Utilizador no RBAC do Azure na conta de armazenamento.

    Importante

    O armazenamento Blob não é compatível com os principais de serviço do Microsoft Entra ID.

  • Assinaturas de acesso partilhado (SAS): pode usar tokens de SAS de armazenamento para aceder ao armazenamento do Azure. Com o SAS, você pode restringir o acesso a uma conta de armazenamento usando tokens temporários com controle de acesso refinado.

    Você só pode conceder permissões de token SAS que você mesmo tem na conta de armazenamento, contêiner ou arquivo.

  • Chaves de conta: você pode usar chaves de acesso de conta de armazenamento para gerenciar o acesso ao Armazenamento do Azure. As chaves de acesso da conta de armazenamento fornecem acesso total à configuração de uma conta de armazenamento, bem como aos dados. O Databricks recomenda usar um principal de serviço do Microsoft Entra ID ou um token SAS para ligar ao armazenamento Azure em vez de utilizar chaves de conta.

    Para exibir as chaves de acesso de uma conta, você deve ter a função Proprietário, Colaborador ou Serviço de Operador de Chave da Conta de Armazenamento na conta de armazenamento.

O Databricks recomenda o uso de escopos secretos para armazenar todas as credenciais. Você pode conceder aos usuários, entidades de serviço e grupos em seu espaço de trabalho acesso para ler o âmbito secreto. Isso protege as credenciais do Azure enquanto permite que os usuários acessem o armazenamento do Azure. Para criar um escopo secreto, consulte Gerenciar escopos secretos.

Nota

As entidades de serviço do Microsoft Entra ID também podem ser usadas para aceder ao armazenamento do Azure a partir de um armazém de dados SQL, consulte Configurações de acesso a dados.

Definir propriedades do Spark para configurar credenciais do Azure

Podes definir as propriedades do Spark para configurar credenciais do Azure para aceder ao armazenamento do Azure. As credenciais podem estar associadas a um cluster ou a um notebook. Use o controle de acesso a clusters e o controle de acesso a cadernos em conjunto para proteger o acesso ao Azure Storage. Consulte Permissões de computação e Colaborar usando blocos de anotações Databricks.

Para definir as propriedades do Spark, use o seguinte trecho na configuração do Spark de um cluster ou em um bloco de anotações:

Principal de serviço do Azure

Use o seguinte formato para definir a configuração do cluster Spark:

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

Você pode usar spark.conf.set em blocos de anotações, conforme mostrado no exemplo a seguir:

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Substituir

  • <secret-scope> com o nome do escopo secreto de Databricks.
  • <service-credential-key> com o nome da chave que contém o segredo do cliente.
  • <storage-account> com o nome da conta de armazenamento do Azure.
  • <application-id> com o ID da Aplicação (cliente) para a aplicação Microsoft Entra ID.
  • <directory-id>com a ID de diretório (locatário) para o aplicativo Microsoft Entra ID.

Tokens SAS

Você pode configurar tokens SAS para várias contas de armazenamento na mesma sessão do Spark.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Substituir

  • <storage-account> com o nome da conta de armazenamento do Azure.
  • <scope> com o nome do escopo secreto do Azure Databricks.
  • <sas-token-key> com o nome da chave que contém o token SAS de armazenamento do Azure.

Chave da conta

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Substituir

  • <storage-account> com o nome da conta de armazenamento do Azure.
  • <scope> com o nome do escopo secreto do Azure Databricks.
  • <storage-account-access-key> com o nome da chave que contém a chave de acesso da conta de armazenamento do Azure.

Passo 4: Aceder ao armazenamento Azure

Depois de configurar corretamente as credenciais para acessar seu contêiner de armazenamento do Azure, você pode interagir com recursos na conta de armazenamento usando URIs. Databricks recomenda o uso do abfss driver para maior segurança.

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

Bloco de notas de exemplo

ADLS OAuth 2.0 com Microsoft Entra ID (anteriormente Azure Ative Directory) bloco de anotações de entidades de serviço

Obter bloco de notas

Problemas conhecidos do Armazenamento do Azure Data Lake

Se tentar aceder a um contentor de armazenamento criado através do portal do Azure, poderá receber o seguinte erro:

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

Quando um namespace hierárquico está habilitado, você não precisa criar contêineres por meio do portal do Azure. Se vir este problema, elimine o contentor de Blob através do portal do Azure. Depois de alguns minutos, você pode acessar o contêiner. Como alternativa, você pode alterar seu abfss URI para usar um contêiner diferente, desde que esse contêiner não seja criado por meio do portal do Azure.

Consulte Problemas conhecidos com o Armazenamento do Azure Data Lake na documentação da Microsoft.

Padrões descontinuados para armazenar e aceder a dados do Azure Databricks

A seguir estão os padrões de armazenamento preteridos: