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

Importante

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

Este artigo descreve padrões herdados para configurar o acesso ao Azure Data Lake Storage. O Databricks recomenda usar o Catálogo do Unity para configurar o acesso ao Azure Data Lake Storage e volumes para interação direta com arquivos. Veja Usar identidades gerenciadas do Azure no Unity Catalog para acessar o armazenamento.

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

Observação

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

Etapa 1: registrar um aplicativo Microsoft Entra ID

Registrar um aplicativo no Microsoft Entra ID cria um principal de serviço que você pode usar para fornecer acesso às contas de armazenamento do Azure.

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

  1. No portal do Azure, acesse o serviço Microsoft Entra ID.
  2. Em Gerenciar, clique em Registros de Aplicativo.
  3. Clique em + Novo registro. Insira um nome para o aplicativo e clique em Registrar.
  4. Clique em Certificados e segredos.
  5. Clique em + Novo segredo do 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 de aplicativo, copie e salve a ID do aplicativo (cliente)e a ID do diretório (locatário).

Etapa 2: Atribuir funções ao service principal

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

Para atribuir funções em uma conta de armazenamento, é necessário ter a função RBAC de Proprietário ou Administrador de Acesso de Usuário do Azure na conta de armazenamento.

  1. No portal do Azure, acesse o serviço contas de armazenamento .
  2. Selecione a conta de armazenamento do Azure a ser usada com esse registro de aplicativo.
  3. Clique em Controle de Acesso (IAM).
  4. Clique em + Adicionare selecione Adicionar atribuição de função no menu suspenso.
  5. Defina o campo Selecionar para o nome do aplicativo do Microsoft Entra ID e defina a Função como Storage Blob Data Contributor.
  6. Clique em Salvar.

Etapa 3: Configurar credenciais de Azure no Azure Databricks

Configure seu Azure Databricks cluster ou notebook com as credenciais para a conta de armazenamento Azure que você deseja acessar.

Tipos de credenciais com suporte e armazenamento secreto

As credenciais a seguir podem ser usadas para acessar o Armazenamento do Azure Data Lake ou o 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 Azure Data Lake Storage. Para criar uma entidade de serviço do Microsoft Entra ID e fornecer a ela acesso às contas de armazenamento do Azure, conclua as Etapas 1 e 2 acima.

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

    Importante

    O armazenamento de blobs não dá suporte a entidades de serviço do Microsoft Entra ID.

  • 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 a um token SAS as permissões que você mesmo tem na conta de armazenamento, no contêiner ou no arquivo.

  • 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 de 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 secreto, consulte Gerenciar escopos secretos.

Observação

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

Definir propriedades do Spark para configurar credenciais de Azure

Você pode definir propriedades do Spark para configurar Azure credenciais para acessar Azure armazenamento. As credenciais podem ser restritas a um cluster ou a 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 Colaboração usando notebooks do Databricks.

Para definir 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> pelo ID do aplicativo (cliente) do aplicativo Microsoft Entra ID.
  • <directory-id> pelo 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> com o nome da chave que contém a chave de acesso da conta de armazenamento do Azure.

Etapa 4: Acessar o armazenamento de 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');

Notebook de exemplo

ADLS OAuth 2.0 com notebook das entidades de serviço do Microsoft Entra ID (anteriormente conhecido como Azure Active Directory)

Obter notebook

Problemas conhecidos do Azure Data Lake Storage

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 está habilitado, você não precisa criar contêineres por meio do 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 na documentação da Microsoft.

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

Os seguintes padrões de armazenamento são obsoletos: