Conectar-se ao Armazenamento de Blobs do Azure com WASB (legado)
A Microsoft substituiu o driver de Blob de Armazenamento do Windows Azure (WASB) para o Armazenamento de Blobs do Azure em favor do driver de Sistema de Arquivos de Blob do Azure (ABFS); consulte Conectar-se ao Azure Data Lake Storage Gen2 e Blob Storage. A ABFS tem inúmeros benefícios em relação ao WASB; consulte a documentação do Azure no ABFS.
Este artigo fornece documentação para manter o código que usa o driver WASB. O Databricks recomenda o uso do ABFS para todas as conexões com o Armazenamento de Blobs do Azure.
Configurar credenciais WASB no Databricks
O driver WASB permite que você use uma chave de acesso de conta de armazenamento ou uma assinatura de acesso compartilhado (SAS). (Se você estiver lendo dados de uma conta de armazenamento público, não precisará configurar credenciais).
O 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 que contém.
Você pode passar credenciais:
- Escopo para o cluster na configuração do Spark
- Escopo para o bloco de anotações
- Anexado 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 aos do WASB. Use o ABFS para obter a melhor segurança e desempenho ao interagir com o Armazenamento de Blobs do Azure.
Para configurar credenciais de 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 com escopo de bloco de anotações, use spark.conf.set()
. As credenciais passadas no nível do bloco de anotações estão disponíveis para todos os usuários com acesso a esse bloco de anotações.
Definindo credenciais de Armazenamento de Blob do Azure com uma chave de acesso de conta de armazenamento
Uma chave de acesso da conta de armazenamento concede acesso total a todos os contêineres dentro de uma conta de armazenamento. Embora esse padrão seja útil para prototipagem, evite usá-lo na 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 ABFS. Para obter mais informações, consulte Ligar ao Armazenamento do Azure Data Lake Gen2 e ao Armazenamento Blob..
Definir credenciais do Armazenamento de Blob do Azure com uma Assinatura de Acesso Partilhado (SAS)
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 DataFrame
A API do Apache Spark DataFrame pode usar credenciais configuradas no nível do notebook ou do cluster. Todos os URIs de driver WASB especificam os nomes de conta de contêiner e armazenamento. O nome do diretório é opcional e pode especificar vários diretórios aninhados relativos 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 DataFrames e a referência Databricks Utilities (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 ABFS em vez de WASB, atualize seus URIs. Para obter mais informações, consulte Acessar o armazenamento do Azure
Acessar o Armazenamento de Blobs do Azure com SQL
As credenciais definidas na configuração de sessão de um bloco de anotações não são acessíveis aos blocos de anotações que executam o Spark SQL.
Depois que uma chave de acesso de conta ou uma SAS for configurada em sua configuração de cluster, você poderá 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 ABFS em vez de WASB, atualize seus URIs; consulte Armazenamento do Access Azure
Monte contêineres de Armazenamento de Blob do Azure no DBFS
Você pode montar um contêiner de Armazenamento de Blob do Azure ou uma pasta dentro de um contêiner para DBFS. Para obter recomendações do Databricks, consulte Montagem do armazenamento de objetos na nuvem no Azure Databricks.
Importante
- O armazenamento de Blob do Azure dá suporte a três tipos de blob: bloco, acréscimo e página. Você só pode montar blobs de bloco no DBFS.
- Todos os utilizadores têm acesso de leitura e escrita aos objetos nos contentores 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, você deve executar
dbutils.fs.refreshMounts()
nesse cluster em execução para disponibilizar o ponto de montagem recém-criado.
O DBFS usa a credencial que você fornece ao criar o ponto de montagem para acessar o contêiner de armazenamento de Blob montado. Se um contêiner de armazenamento de Blob for montado usando uma chave de acesso de 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 de armazenamento de Blob do Azure
A Databricks recomenda o uso de ABFS em vez de WASB. Para obter mais informações sobre montagem com ABFS, consulte: Mount ADLS Gen2 ou Blob Storage with ABFS.
Para montar um contêiner de armazenamento de Blob 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>")))
em que
<storage-account-name>
é o nome da sua conta de armazenamento de Blob do Azure.<container-name>
é o nome de um contêiner em sua conta de armazenamento de Blob do Azure.<mount-name>
é um caminho DBFS que representa onde o contêiner de armazenamento de Blob ou uma pasta dentro do contêiner (especificado emsource
) será montado no DBFS.<conf-key>
pode ser oufs.azure.account.key.<storage-account-name>.blob.core.windows.net
fs.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 secreto.
Acesse arquivos em seu contêiner como se 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>"