Conectar-se ao Azure Data Lake Storage Gen2 e ao Blob Storage

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

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

  • OAuth 2.0 com <entra-service-principal>: a Databricks recomenda usar <entra-service-principal>s para se conectar ao armazenamento do Azure. Para criar um <entra-service-principal> e fornecer-lhe acesso à conta de armazenamento do Azure, consulte o armazenamento de acesso com o Microsoft Entra ID (anteriormente Azure Active Directory) utilizando uma entidade de serviço.

    Para criar um <entra-service-principal>, você deve 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 account de armazenamento, você deve ser Proprietário ou usuário com a função Administrador de Acesso do Usuário do Azure RBAC na account de armazenamento.

  • Assinaturas de acesso compartilhado (SAS): você pode usar tokens SAS de armazenamento para acessar o armazenamento do Azure. Com o SAS, é possível restringir o acesso a uma conta de armazenamento com tokens temporários com controle de acesso refinado.

    Você só pode conceder as permissões de token do SAS que tiver na conta de armazenamento, contêiner ou arquivo por conta própria.

  • Chave da conta: você pode usar a chave de acesso da conta de armazenamento para gerenciar o acesso ao Armazenamento do Azure. A chave de acesso account de armazenamento fornece acesso total à configuração de uma account de armazenamento, bem como aos dados. A Databricks recomenda usar um <entra-service-principal> ou tokens SAS para se conectar ao armazenamento do Azure em vez da chave account .

    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 do seu workspace o acesso para ler o escopo secreto. Isso protege as credenciais do Azure e permite que os usuários acessem o armazenamento do Azure. Para criar um escopo secreto, consulte Escopos secretos.

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

O senhor pode definir as propriedades do Spark para configurar as credenciais do Azure para acessar o armazenamento do Azure. As credenciais podem ter o escopo de um cluster ou de um Notebook. Use o controle de acesso de clusters e o controle de acesso Notebook juntos para proteger o acesso ao armazenamento do Azure. Consulte Permissões de computação e Colaboração usando o Databricks Notebook.

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

Use o seguinte formato para definir a configuração do cluster do 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 utilizar o spark.conf.set em notebooks, como 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> pelo nome do escopo secreto do Databricks.

  • <service-credential-key> pelo nome da chave que contém o segredo do cliente.

  • <storage-account> pelo nome da conta de armazenamento do Azure.

  • <application-id> com o ID do aplicativo (cliente) do aplicativo Microsoft Entra ID.

  • <directory-id> com o ID do diretório (tenant) do aplicativo Microsoft Entra ID.

Você pode configurar tokens SAS para várias contas de armazenamento na mesma sessão 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> pelo nome da conta Azure Storage.

  • <scope> pelo nome do escopo secreto do Databricks.

  • <sas-token-key> pelo nome da chave que contém o token SAS de armazenamento do Azure.

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> pelo nome da conta Azure Storage.

  • <scope> pelo nome do escopo secreto do Databricks.

  • <storage-account-access-key> pelo nome da chave que contém a chave de acesso da conta de armazenamento do Azure.

Acesse o armazenamento do Azure

Depois de configurar corretamente as credenciais para acessar seu contêiner de armazenamento do Azure, você pode interagir com os recursos na conta de armazenamento usando URIs. A 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');

Exemplo de notebook

ADLS Gen2 OAuth 2.0 com Microsoft Entra ID (anteriormente Azure Active Directory) entidade de serviço Notebook

Abra o bloco de anotações em outra guia

Problemas conhecidos do Azure Data Lake Storage Gen2

Se tentar aceder a um contentor de armazenamento criado através do portal 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, não é necessário criar contêineres por meio do portal do Azure. Se vir este problema, elimine o contentor Blob através do portal Azure. Após alguns minutos, você poderá acessar o contêiner. Como alternativa, você pode alterar seu URI abfss 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 obsoletos no armazenamento e no acesso a dados do Databricks

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