Otimize o desempenho com armazenamento em cache no Azure Databricks

Ler dados do armazenamento de objetos na nuvem é mais lento do que ler do disco local. Sem cache, consultas e notebooks que leem repetidamente os mesmos arquivos de dados Parquet os recuperam do armazenamento de objetos na nuvem sempre que os leem.

Azure Databricks usa cache de disco para acelerar as leituras de dados. Quando um nó busca um arquivo de dados Parquet do armazenamento remoto, ele armazena automaticamente uma cópia em seu armazenamento local em um formato intermediário rápido. Leituras posteriores dos mesmos dados são executadas localmente e são significativamente mais rápidas. O cache funciona para todos os arquivos de dados Parquet, incluindo tabelas Delta Lake.

Observação

Nos SQL Warehouses e no Databricks Runtime 14.2 e superior, o comando CACHE SELECT é ignorado. Em vez disso, é usado um algoritmo de cache de disco aprimorado.

Práticas Recomendadas

O cache de disco ajuda principalmente com cargas de trabalho que leem os mesmos dados muitas vezes, como consultas repetidas ou iterativas nas mesmas tabelas. O Azure Databricks habilita isso automaticamente em tipos de instância worker que o suportam. Para ajudar o cache do disco a acelerar as leituras, siga estas práticas:

Cache delta renomeado para cache de disco

O cache de disco no Azure Databricks anteriormente era chamado de cache Delta e cache DBIO. O comportamento do cache de disco é um recurso proprietário do Azure Databricks. Essa alteração de nome busca resolver a confusão de que isso fazia parte do protocolo Delta Lake.

Compare o cache do disco com o cache do Spark

O cache de disco do Azure Databricks difere do armazenamento em cache do Apache Spark. O Databricks recomenda o uso de cache automático de disco.

A seguinte tabela resume as principais diferenças entre cache em disco e cache do Apache Spark para que você possa escolher a melhor ferramenta para seu fluxo de trabalho:

Recurso Cache de disco Cache do Apache Spark
Armazenado como Arquivos locais em um nó de trabalho. Blocos na memória, mas depende do nível de armazenamento.
Aplicado a Qualquer tabela Parquet armazenada no ABFS (Azure Blob File System) e em outros sistemas de arquivos. Qualquer DataFrame ou RDD.
Disparado Automaticamente, na primeira leitura (se o cache estiver habilitado). Manualmente, exige alterações no código.
Avaliado Preguiçosamente. Preguiçosamente.
Disponibilidade Ativado por padrão em certos tipos de nós. Você habilita ou desativa com flags de configuração. Sempre disponível.
Removido Automaticamente no modo LRU ou em qualquer alteração de arquivo, manualmente ao reiniciar um cluster. Automaticamente no modo LRU, manualmente com unpersist.

Em computação serverless, df.cache() funciona de forma diferente do cache do Apache Spark nesta tabela. Consulte Armazenar DataFrames em cache na computação sem servidor.

Consistência do cache de disco

O cache de disco detecta automaticamente quando os arquivos de dados são criados, excluídos, modificados ou substituídos e atualiza seu conteúdo adequadamente. Você pode gravar, modificar e excluir dados de tabela sem a necessidade de invalidar explicitamente os dados armazenados em cache. Todas as entradas obsoletas são automaticamente invalidadas e removidas do cache.

Selecionar tipos de instância para usar o cache de disco

A maneira recomendada (e mais fácil) de usar o armazenamento em cache de disco é escolher um tipo de worker com volumes SSD ao configurar o cluster. Esses workers são habilitados e configurados para o armazenamento em cache de disco.

O cache de disco está configurado para usar no máximo a metade do espaço disponível nos SSDs locais fornecidos com os nós de trabalho. Para obter opções de configuração, veja Configurar o cache de disco.

Configurar o cache de disco

O Databricks recomenda que você escolha tipos de instância de worker com aceleração por cache para sua computação. Essas instâncias são configuradas automaticamente de maneira ideal para o cache de disco.

Observação

Quando uma função de trabalho é desativada, o cache do Spark armazenado nela é perdido. Portanto, se o dimensionamento automático estiver habilitado, haverá alguma instabilidade com o cache. O Spark precisaria reler as partições ausentes da fonte conforme necessário.

Configurar o uso do disco

Para configurar como o cache de disco usa o armazenamento local dos nós de trabalho, especifique estas configurações de Spark configuration durante a criação do cluster:

  • spark.databricks.io.cache.maxDiskUsage: espaço em disco por nó reservado para dados armazenados em cache em bytes
  • spark.databricks.io.cache.maxMetaDataCache: espaço em disco por nó reservado para metadados armazenados em cache em bytes
  • spark.databricks.io.cache.compression.enabled: os dados em cache devem ser armazenados em formato compactado

Exemplo de configuração:

spark.databricks.io.cache.maxDiskUsage 50g
spark.databricks.io.cache.maxMetaDataCache 1g
spark.databricks.io.cache.compression.enabled false

Habilitar ou desabilitar o cache de disco

Para ver a configuração atual do cache do disco, execute:

spark.conf.get("spark.databricks.io.cache.enabled")

Para habilitar e desabilitar o cache de disco, execute:

spark.conf.set("spark.databricks.io.cache.enabled", "[true | false]")

Desabilitar o cache não resulta em descartar os dados que já estejam no armazenamento local. Em vez disso, ele impede que as consultas adicionem novos dados ao cache e leiam dados do cache.