Partilhar via


Estabeleça ligação ao Azure Data Lake Storage Gen2 e Armazenamento de Blobs

Nota

Este artigo descreve padrões herdados para configurar o acesso ao Azure Data Lake Storage Gen2. A Databricks recomenda o uso do Catálogo Unity para configurar o acesso ao Azure Data Lake Storage Gen2 e aos volumes para interação direta com arquivos. Consulte Conectar-se ao armazenamento e serviços de objetos na nuvem usando o Unity Catalog.

Este artigo explica como se conectar ao Azure Data Lake Storage Gen2 e ao Blob Storage do Azure Databricks.

Nota

Conectar-se ao Azure Data Lake Storage Gen2 ou Blob Storage usando credenciais do Azure

As credenciais a seguir podem ser usadas para acessar o Azure Data Lake Storage Gen2 ou o Blob Storage:

  • OAuth 2.0 com uma entidade de serviço do Microsoft Entra ID: o Databricks recomenda o uso de entidades de serviço do Microsoft Entra ID para se conectar ao Azure Data Lake Storage Gen2. Para criar uma entidade de serviço Microsoft Entra ID e fornecer-lhe acesso a contas de armazenamento do Azure, consulte Acessar armazenamento usando uma entidade de serviço & Microsoft Entra ID(Azure Ative Directory).

    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 Administrador de Acesso do Utilizador do RBAC do Azure na conta de armazenamento.

    Importante

    O armazenamento de Blob não suporta entidades de serviço do Microsoft Entra ID.

  • Assinaturas de acesso compartilhado (SAS): você pode usar tokens SAS de armazenamento para acessar o 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 uma entidade de serviço Microsoft Entra ID ou um token SAS para se conectar ao armazenamento do Azure em vez de 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 a utilização de âmbitos de segredos para armazenar todas as credenciais. Pode conceder aos utilizadores, principais de serviço e grupos na sua área de trabalho acesso para ler o âmbito de segredo. 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.

Definir as propriedades do Spark para configurar as credenciais do Azure para acessar o armazenamento do Azure

Você pode definir as propriedades do Spark para configurar credenciais do Azure para acessar o armazenamento do Azure. As credenciais podem ter como escopo um cluster ou um bloco de anotações. Use o controle de acesso do cluster e o controle de acesso do bloco de anotações juntos para proteger o acesso ao armazenamento do Azure. Consulte Permissões de computação e Colaborar usando blocos de anotações Databricks.

Nota

As entidades de serviço do Microsoft Entra ID também podem ser usadas para acessar o armazenamento do Azure a partir de um armazém SQL, consulte Habilitar configuração de acesso a dados.

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

Replace

  • <secret-scope> com o nome do escopo secreto 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 a ID do Aplicativo (cliente) para o aplicativo 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>"))

Replace

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

Replace

  • <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.

Acessar o armazenamento do 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 Gen2 OAuth 2.0 com Microsoft Entra ID (anteriormente Azure Ative Directory) bloco de anotações de entidades de serviço

Obter o bloco de notas

Problemas conhecidos do Azure Data Lake Storage Gen2

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 Azure Data Lake Storage Gen2 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: