Criando um Mount Point no DataBricks a partir de containers do Blob Storage

O Databricks pode ser definido como a plataforma mais sofisticada para análise e processamento de Big Data e Machine Learning totalmente baseada em cloud. A empresa Databricks foi fundada pelos criadores do Apache Spark (um dos principais componentes do ecossistema Hadoop) e oferece performance até cem vezes maior do que a do tradicional MapReduce, além de facilidade de uso por meio de suas interfaces gráficas simples e intuitivas, flexibilidade de codificação que permite linguagens, como Java, Scala, Python, R e SQL. O DataBricks também tem capacidade de processamento analítico de dados em tempo real (Spark Streaming).

 

Ingestão de dados

O Azure DataBricks é a implementação PaaS do DataBricks na Nuvem da Microsoft que, por meio da cooperação de suas equipes de engenharia, oferece uma plataforma otimizada e totalmente integrada com componentes, como Blob Storage, Data Lake Store, SQL Data Warehouse, CosmosDB, Event Hubs, Data Factory e uma lista crescente de outros serviços.

A seguir, mostrarei exemplos de como criar um Mount Point apontando para dados contidos em um Blob Storage Container por meio do Databricks File System – DBFS.

A seguir consta a sintaxe padrão:

Python

dbutils.fs.mount(
  source = "wasbs://<your-container-name>@<your-storage-account-name>.blob.core.windows.net",
  mount_point = "/mnt/<mount-name>",
  extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})

Scala

dbutils.fs.mount(
  source = "wasbs://<your-container-name>@<your-storage-account-name>.blob.core.windows.net/<your-directory-name>",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))

Vamos ao exemplo prático. Em um Storage Account chamado [novacarga], criei um container chamado [assinaturas] e carreguei, por meio do AzCopy, um arquivo chamado [Assinaturas100MM.csv] contendo cem milhões de registros, que somam 7.23 GB de tamanho. Esse arquivo contém dados fictícios de contratos de internet banda larga e TV por assinatura.

O próximo passo é substituir os elementos da sintaxe padrão por parâmetros obtidos a partir das credenciais de acesso do Storage Account. Farei isso primeiro na linguagem Scala.

  • <your-container-name> – Nome do container (pasta)
  • <your-storage-account-name> – Nome da Storage Account
  • <mount-name> – Este será o nome do caminho do meu Mount Point, o qual definirei como [PontoDeMontagem]
  • <conf-key> – pode ser: fs.azure.account.key.novacarga.blob.core.windows.net

Obs.: Neste exemplo, a cláusula [extraConfigs] está sendo simplificada para priorizar a didática. Na prática, em vez de passar parâmetros abertos de credenciais, é recomendado usar os Secrets para garantir a segurança de acesso. Dessa forma, os parâmetros de segurança não ficam disponíveis nos scripts e notebooks.  

A partir desse ponto, é possível acessar os arquivos do container Blob Storage como se fossem arquivos alocados localmente no Cluster do DataBricks.

val Assinaturas = (spark.read
                        .option("header", "true")
                        .option("mode", "DROPMALFORMED")
                        .csv("/mnt/PontoDeMontagem/Assinaturas100MM.csv"))

 

Conclusão

A integração do DataBricks com serviços do Azure, como o Blobs Storage, é um recurso de enorme valor, uma vez que esses serviços permitem, entre outras coisas, armazenamento de grandes quantidades de informação em objetos estruturados, não estruturados, imagens, vídeos, áudios e dados binários, ativos que frequentemente são usados em modelos de Machine Learning e Advance Analytics.

É importante esclarecer que os Mount Points devem ser criados sempre que você desejar permitir que todos os usuários de um workspace do Databricks tenham acesso aos containers do Blob Storage.  Uma vez definido um Mount Point em um cluster, os usuários desse cluster poderão acessá-lo imediatamente. Para acessar esse ponto de montagem a partir de outro cluster, os usuários deverão executar o dbutils.fs.refreshMounts() no cluster corrente para disponibilizar o ponto de montagem recém-criado para uso.

 

Referências

https://docs.databricks.com/spark/latest/data-sources/azure/azure-storage.html

https://docs.databricks.com/spark/latest/data-sources/azure/azure-datalake-gen2.html

https://docs.microsoft.com/pt-br/azure/storage/blobs/data-lake-storage-use-databricks-spark


Autor:

Luis Renato é Paulista, especialista em Bancos de Dados, Advanced Analytics e Inteligência Artificial, cursou Engenharia na Universidade São Judas Tadeu, pós-graduação em Gestão de T I pela Universidade Paulista e MBA em Economia: Business Analytics e Big Data na Fundação Getúlio Vargas (FGV). Iniciou a carreira como DBA em um grande banco, obteve a 1º certificação técnica em 1998, ano em que também começou a ministrar treinamentos oficiais Microsoft. Foi palestrante de eventos técnicos como TechEd, DevDays, DBForum, Condex, Ai+Tour e outros.