Conectar-se ao Azure Data Lake Storage Gen2 e ao Armazenamento de Blobs
Observação
Este artigo descreve padrões herdados para configurar o acesso ao Azure Data Lake Storage Gen2. 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. Consulte Conectar-se ao armazenamento de objetos e serviços na nuvem usando o Catálogo do Unity.
Este artigo explica como se conectar ao Azure Data Lake Storage Gen2 e ao Armazenamento de Blobs do Azure Databricks.
Observação
- O driver do WASB (Azure Storage Blob do Windows) herdado foi preterido. 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).
- O Azure anunciou a aposentadoria pendente do Azure Data Lake Storage Gen1. O Azure Databricks recomenda migrar todos os dados do Azure Data Lake Storage Gen1 para Azure Data Lake Storage Gen2. Se você ainda não migrou, confira Acessar o Azure Data Lake Storage Gen1 do Azure Databricks.
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 de ID do Microsoft Entra: o Databricks recomenda o uso de entidades de serviço de ID do Microsoft Entra para se conectar ao Azure Data Lake Storage Gen2. Para criar uma entidade de serviço do Microsoft Entra ID e fornecer a ela acesso às contas de armazenamento do Azure, consulte Acessar o armazenamento usando uma entidade de serviço e o Microsoft Entra ID (Azure Active Directory).
Para criar uma entidade de serviço do Microsoft Entra ID, você precisa ter a função
Application Administrator
ou a permissãoApplication.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 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 secreto, consulte Gerenciar escopos secretos.
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)
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:
O Databricks não recomenda mais a montagem de locais de dados externos no Sistema de Arquivos do Databricks. Confira Montar o repositório de objetos de nuvem no Azure Databricks.
O Databricks não recomenda mais usar a passagem de credencial com o Azure Data Lake Storage Gen2. Consulte Acessar o Azure Data Lake Storage usando a passagem de credencial do Microsoft Entra ID (herdada).