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
- O driver de Blob de Armazenamento (WASB) herdado do Windows Azure foi preterido. A 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 WASB (legado).
- O Azure anunciou a desativação pendente do Azure Data Lake Storage Gen1. O Azure Databricks recomenda migrar todos os dados do Azure Data Lake Storage Gen1 para o Azure Data Lake Storage Gen2. Se você ainda não migrou, consulte Acessando o Azure Data Lake Storage Gen1 a partir do Azure Databricks.
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 aApplication.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
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:
O Databricks não recomenda mais a montagem de locais de dados externos no Databricks Filesystem. Consulte Montagem do armazenamento de objetos na nuvem no Azure Databricks.
O Databricks já não recomenda a utilização do pass-through de credenciais com o Azure Data Lake Storage Gen2. Consulte Acessar o Armazenamento do Azure Data Lake usando a passagem de credenciais (legado) do Microsoft Entra ID.