Conectar-se ao Armazenamento de Blobs do Azure com o WASB (herdado)
A Microsoft preteriu o driver do WASB (Azure Storage Blob do Windows) para o Armazenamento de Blobs do Azure e passou a usar o driver do ABFS (Sistema de Arquivos de Blobs do Azure). Confira Conectar-se ao Azure Data Lake Storage Gen2 e ao Armazenamento de Blobs. O ABFS tem inúmeros benefícios em relação ao WASB. Confira a documentação do Azure no ABFS.
Este artigo fornece documentação para manter o código que usa o driver do WASB. A Databricks recomenda o uso do ABFS para todas as conexões com o Armazenamento de Blobs do Azure.
Configurar credenciais do WASB no Databricks
O driver do WASB permite que você use uma chave de acesso de conta de armazenamento ou uma SAS (Assinatura de Acesso Compartilhado). (Se você estiver lendo dados de uma conta de armazenamento pública, não precisará configurar credenciais).
A Databricks recomenda o uso de segredos sempre que você precisar passar credenciais no Azure Databricks. Os segredos estão disponíveis para todos os usuários com acesso ao escopo secreto.
Você pode passar credenciais:
- Com escopo para o cluster na configuração do Spark
- Com escopo para o notebook
- Anexados a um diretório montado
O Databricks recomenda atualizar todas as suas conexões para usar o ABFS para acessar o Armazenamento de Blobs do Azure, que fornece padrões de acesso semelhantes ao WASB. Use o ABFS para obter a melhor segurança e desempenho ao interagir com o Armazenamento de Blobs do Azure.
Para configurar as credenciais do cluster, defina as propriedades de configuração do Spark ao criar o cluster. As credenciais definidas no nível do cluster estão disponíveis para todos os usuários com acesso a esse cluster.
Para configurar credenciais no escopo do notebook, use spark.conf.set()
. As credenciais passadas no nível do notebook estão disponíveis para todos os usuários com acesso a esse notebook.
Configurar credenciais do Armazenamento de Blobs do Azure com uma chave de acesso da conta de armazenamento
Uma chave de acesso da conta de armazenamento concede acesso completo a todos os contêineres em uma conta de armazenamento. Embora esse padrão seja útil para a prototipagem, evite usá-lo em produção para reduzir os riscos associados à concessão de acesso irrestrito aos dados de produção.
spark.conf.set(
"fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
"<storage-account-access-key>"
)
Você pode atualizar URIs de chave de conta para usar o ABFS. Para obter mais informações, consulte Como conectar-se ao Azure Data Lake Storage Gen2 e ao Armazenamento de Blobs.
Configurar as credenciais do Armazenamento de Blobs do Azure com uma SAS (Assinatura de Acesso Compartilhado)
Você pode usar tokens SAS para configurar o acesso limitado a um único contêiner em uma conta de armazenamento que expira em um momento específico.
spark.conf.set(
"fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
"<sas-token-for-container>"
)
Acessar o Armazenamento de Blobs do Azure usando a API de DataFrame
A API de DataFrame do Apache Spark pode usar credenciais configuradas no nível do notebook ou do cluster. Todas as URIs do driver do WASB especificam os nomes de conta de armazenamento e contêiner. O nome do diretório é opcional e pode especificar vários diretórios aninhados em relação ao contêiner.
wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>
Os exemplos de código a seguir mostram como você pode usar a API de DataFrames e as referências dos Utilitários do Databricks (dbutils) para interagir com um diretório nomeado dentro de um contêiner.
df = spark.read.format("parquet").load("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")
dbutils.fs.ls("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")
Para atualizar o ABFS em vez do WASB, atualize seus URIs. Para obter mais informações, confira Acessar o Armazenamento do Azure
Acessar o Armazenamento de Blobs do Azure com o SQL
As credenciais definidas na configuração de sessão de um notebook não estão acessíveis para notebooks que executam o Spark SQL.
Depois que uma chave de acesso da conta ou uma SAS é definida na configuração do cluster, você pode usar consultas padrão do Spark SQL com o Armazenamento de Blobs do Azure:
-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/";
Para atualizar o ABFS em vez do WASB, atualize seus URIs. Consulte Acessar o Armazenamento do Azure
Montar contêineres do Armazenamento de Blobs do Azure para o DBFS
Você pode montar um contêiner do Armazenamento de Blobs do Azure ou uma pasta dentro de um contêiner para o DBFS. Para obter recomendações do Databricks, confira Montagem do armazenamento de objetos de nuvem no Azure Databricks.
Importante
- O Armazenamento de Blobs do Azure dá suporte a três tipos de blobs: blocos, anexos e páginas. Você só pode montar blobs de blocos no DBFS.
- Todos os usuários têm acesso de leitura e gravação aos objetos nos contêineres do Armazenamento de Blobs montados no DBFS.
- Depois que um ponto de montagem é criado 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 disponível.
O DBFS usa a credencial que você fornece ao criar o ponto de montagem para acessar o contêiner do Armazenamento de Blobs montado. Se um contêiner do Armazenamento de Blobs for montado usando uma chave de acesso da conta de armazenamento, o DBFS usará tokens SAS temporários derivados da chave da conta de armazenamento quando acessar esse ponto de montagem.
Montar um contêiner do Armazenamento de Blobs do Azure
A Databricks recomenda o uso do ABFS em vez do WASB. Para obter mais informações sobre como montar com o ABFS, confira Montar o ADLS Gen2 ou o Armazenamento de Blobs com o ABFS.
Para montar um contêiner do Armazenamento de Blobs ou uma pasta dentro de um contêiner, use o seguinte comando:
Python
dbutils.fs.mount( source = "wasbs://<container-name>@<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://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>", mountPoint = "/mnt/<mount-name>", extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))
onde
<storage-account-name>
é o nome da sua conta de Armazenamento de Blobs do Azure.<container-name>
é o nome de um contêiner em seu Armazenamento de Blobs do Azure.<mount-name>
é um caminho DBFS que representa onde será montado, no DBFS, o contêiner de Armazenamento de Blobs ou uma pasta dentro do contêiner (especificada emsource
).<conf-key>
pode serfs.azure.account.key.<storage-account-name>.blob.core.windows.net
oufs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net
.dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
obtém a chave que foi armazenada como um segredo em um escopo de segredo.
Acesse os arquivos no seu contêiner como se eles fossem arquivos locais, por exemplo:
Python
# python df = spark.read.format("text").load("/mnt/<mount-name>/...") df = spark.read.format("text").load("dbfs:/<mount-name>/...")
Scala
// scala val df = spark.read.format("text").load("/mnt/<mount-name>/...") val df = spark.read.format("text").load("dbfs:/<mount-name>/...")
SQL
-- SQL CREATE DATABASE <db-name> LOCATION "/mnt/<mount-name>"