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

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

O Databricks recomenda usar o Catálogo do Unity para configurar o acesso ao Azure Data Lake Storage Gen2 e volumes para interação direta com arquivos. Confira Conectar-se ao armazenamento de objetos de nuvem usando o Catálogo do Unity.

Observação

Conectar-se ao Azure Data Lake Storage Gen2 ou ao Armazenamento de Blobs usando credenciais do Azure

As credenciais a seguir podem ser usadas para acessar Azure Data Lake Storage Gen2 ou Armazenamento de Blobs:

  • OAuth 2.0 com uma entidade de serviço do Microsoft Entra ID: o Databricks recomenda usar entidades de serviço do Microsoft Entra ID para se conectar ao armazenamento do Azure. Para criar uma entidade de serviço do Microsoft Entra ID e dar-lhe acesso às contas de armazenamento do Azure, confira Acessar o armazenamento com o Microsoft Entra ID (antigo Azure Active Directory) usando uma entidade de serviço.

    Para criar uma entidade de serviço do Microsoft Entra ID, você precisa ter a função Application Administrator ou a permissão Application.ReadWrite.All no Microsoft Entra ID (antigo Azure Active Directory). Para atribuir funções em uma conta de armazenamento, você deve ser um Proprietário ou um usuário com a função RBAC de administrador de acesso do usuário do Azure na conta de armazenamento.

  • SAS (assinaturas de acesso compartilhado): você pode usar tokens SAS de armazenamento para acessar o armazenamento do Azure. Com a 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ê tem na conta de armazenamento, contêiner ou arquivo por conta própria.

  • Chaves de contaVocê pode usar as chaves de acesso da 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 do 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 o uso de escopos secretos para armazenar todas as credenciais. Você pode conceder aos usuários, entidades de serviço e grupos em seu workspace acesso para ler o escopo do segredo. Isso protege as credenciais do Azure, permitindo que os usuários acessem o armazenamento do Azure. Para criar um escopo de segredo, consulte Escopos de segredo.

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

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

Observação

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

Para definir as propriedades do Spark, use o seguinte snippet na configuração do Spark de um cluster ou em um notebook:

Entidade de serviço do Azure

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

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

Substitua

  • <secret-scope> pelo nome do escopo de segredo do 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) do aplicativo Microsoft Entra ID.
  • <directory-id> com a ID do Diretório (locatário) do aplicativo Microsoft Entra ID.

Tokens SAS

É possível 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>"))

Substitua

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

Chave de conta

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

Substitua

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

Acessar Armazenamento do Azure

Depois de configurar corretamente as credenciais para acessar seu contêiner de armazenamento do Azure, poderá interagir com recursos na conta de armazenamento usando URIs. O Databricks recomenda usar o driver abfss 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');

Caderno de exemplo

OAuth 2.0 do ADLS Gen2 com o notebook de entidades de serviço do Microsoft Entra ID (antigo Azure Active Directory)

Obter notebook

Problemas conhecidos do Azure Data Lake Storage Gen2

Se você tentar acessar um contêiner de armazenamento criado pelo 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 estiver habilitado, você não precisará criar contêineres pelo portal do Azure. Se você vir esse problema, exclua o contêiner de Blob pelo portal do Azure. Após alguns minutos, você poderá acessar o contêiner. Como alternativa, você pode alterar o URI abfss para usar um contêiner diferente, desde que esse contêiner não seja criado pelo portal do Azure.

Consulte Problemas conhecidos com o Azure Data Lake Storage Gen2 na documentação da Microsoft.

Padrões preteridos para armazenar e acessar dados do Azure Databricks

Veja a seguir os padrões de armazenamento preteridos: