Montar o armazenamento de objetos de nuvem no Azure Databricks

O Azure Databricks permite que os usuários montem o armazenamento de objetos de nuvem no DBFS (Sistema de Arquivos do Databricks) para simplificar os padrões de acesso a dados para usuários que não estão familiarizados com conceitos de nuvem. Os dados montados não funcionam com o Unity Catalog, e a Databricks recomenda deixar de usar montagens e, em vez disso, gerenciar a governança de dados com o Unity Catalog.

Como o Azure Databricks monta o armazenamento de objetos de nuvem?

As montagens do Azure Databricks criam um link entre um workspace e o armazenamento de objetos de nuvem, o que permite interagir com o armazenamento de objetos de nuvem usando caminhos de arquivo familiares relativos ao sistema de arquivos do Databricks. As montagens funcionam criando um alias local no diretório /mnt que armazena as seguintes informações:

  • Local do armazenamento de objetos de nuvem.
  • Especificações do driver para se conectar à conta de armazenamento ou contêiner.
  • As credenciais de segurança necessárias para acessar os dados.

O que é a sintaxe para montagem de armazenamento?

O source especifica o URI do armazenamento de objetos (e, opcionalmente, pode codificar credenciais de segurança). O mount_point especifica o caminho local no diretório /mnt. Algumas fontes de armazenamento de objetos dão suporte a um argumento encryption_type opcional. Para alguns padrões de acesso, você pode passar especificações de configuração adicionais como um dicionário para extra_configs.

Observação

O Databricks recomenda definir a configuração do Spark e do Hadoop específica a uma montagem como opções usando extra_configs. Isso garante que as configurações estejam vinculadas à montagem em vez do cluster ou da sessão.

dbutils.fs.mount(
  source: str,
  mount_point: str,
  encryption_type: Optional[str] = "",
  extra_configs: Optional[dict[str:str]] = None
)

Verifique com seu workspace e administradores de nuvem antes de configurar ou alterar montagens de dados, pois a configuração inadequada pode fornecer acesso não seguro a todos os usuários em seu workspace.

Observação

Além das abordagens descritas neste artigo, você pode automatizar a montagem de um bucket com o provedor Databricks Terraform e o databricks_mount.

Desmontar um ponto de montagem

Para desmontar um ponto de montagem, use o seguinte comando:

dbutils.fs.unmount("/mnt/<mount-name>")

Aviso

Para evitar erros, nunca modifique um ponto de montagem enquanto outros trabalhos estiverem lendo ou gravando nele. Depois de modificar uma montagem, sempre execute dbutils.fs.refreshMounts() em todos os outros clusters em execução para propagar quaisquer atualizações de montagem. Consultecomando refreshMounts (dbutils.fs.refreshMounts).

Montar o ADLS Gen2 ou o Armazenamento de Blobs com o ABFS

Você pode montar dados em uma conta de armazenamento do Azure usando uma entidade de serviço do aplicativo do Microsoft Entra ID (antigo Azure Active Directory) para autenticação. Para obter mais informações, consulte Acessar o armazenamento com o Microsoft Entra ID (antigo Azure Active Directory) utilizando uma entidade de serviço.

Importante

  • Todos os usuários no workspace do Azure Databricks têm acesso à conta do ADLS Gen2 montada. A entidade de serviço usada para acessar a conta do ADLS Gen2 deve ter acesso somente a essa conta do ADLS Gen2; ela não deve ter acesso a outros recursos do Azure.
  • Ao criar um ponto de montagem por meio de um cluster, os usuários desse cluster podem acessar imediatamente o ponto de montagem. Para usar o ponto de montagem em outro cluster em execução, execute dbutils.fs.refreshMounts() no cluster em execução a fim de disponibilizar o ponto de montagem recém-criado para uso.
  • Desmontar um ponto de montagem enquanto os trabalhos estão em execução pode levar a erros. Verifique se os trabalhos de produção não desmontam o armazenamento como parte do processamento.
  • Os pontos de montagem que usam segredos não são atualizados automaticamente. Se o armazenamento montado depende de um segredo que é girado, expira ou é excluído, podem ocorrer erros, como 401 Unauthorized. Para resolver esse erro, você deve desmontar e remontar o armazenamento.
  • O namespace hierárquico (HNS) deve estar habilitado para montar com êxito uma conta de armazenamento do Azure Data Lake Storage Gen2 usando o ponto de extremidade ABFS.

Execute o seguinte no notebook para autenticar e criar um ponto de montagem.

configs = {"fs.azure.account.auth.type": "OAuth",
          "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
          "fs.azure.account.oauth2.client.id": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)
val configs = Map(
  "fs.azure.account.auth.type" -> "OAuth",
  "fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
  "fs.azure.account.oauth2.client.id" -> "<application-id>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

Substitua

  • <application-id> com a ID de aplicativo (cliente) para o aplicativo do Azure Active Directory.
  • <scope-name> pelo nome do escopo de segredo do Databricks.
  • <service-credential-key-name> com o nome da chave que contém o segredo do cliente.
  • <directory-id> com a ID do Diretório (locatário) ID para o aplicativo do Azure Active Directory.
  • <container-name> pelo nome de um contêiner na conta de armazenamento do ADLS Gen2.
  • <storage-account-name> pelo nome da conta de armazenamento do ADLS Gen2.
  • <mount-name> com o nome do ponto de montagem pretendido no DBFS.