Otimizar o desempenho com cache no Azure Databricks

Ler dados a partir do armazenamento de objetos na cloud é mais lento do que ler a partir do disco local. Sem cache, consultas e notebooks que leem os mesmos ficheiros de dados Parquet obtêm-nos repetidamente do armazenamento de objetos na nuvem todas as vezes.

O Azure Databricks utiliza cache de disco para acelerar as leituras de dados. Quando um nó recupera um ficheiro de dados Parquet a partir de armazenamento remoto, armazena automaticamente uma cópia no seu armazenamento local num formato intermédio rápido. As leituras posteriores dos mesmos dados são feitas localmente e são significativamente mais rápidas. A cache funciona para todos os ficheiros de dados Parquet, incluindo as tabelas Delta Lake.

Nota

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

Melhores práticas

A cache de disco ajuda sobretudo com cargas de trabalho que leem os mesmos dados várias vezes, como consultas repetidas ou iterativas nas mesmas tabelas. O Azure Databricks ativa-o automaticamente nos tipos de instância worker que o suportam. Para ajudar a cache do disco a acelerar as leituras, siga estas práticas:

A cache delta foi mudada a designação para cache de disco

O cache de disco no Azure Databricks era anteriormente conhecido como cache Delta e cache DBIO. O comportamento de cache de disco é um recurso proprietário do Azure Databricks. Esta mudança de nome procura resolver a confusão de que fosse parte do protocolo Delta Lake.

Compare a cache do disco e a cache do Spark

O cache de disco do Azure Databricks difere do cache do Apache Spark. A Databricks recomenda a utilização da cache automática de disco.

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

Funcionalidade 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 em ABFS e outros sistemas de arquivos. Qualquer DataFrame ou RDD.
Desencadeado Automaticamente, na primeira leitura (se o cache estiver habilitado). Manualmente, requer alterações ao código.
Avaliado Preguiçosamente. Preguiçosamente.
Disponibilidade Ativado por defeito em certos tipos de nós. Podes ativá-lo ou desativá-lo com flags de configuração. Sempre disponível.
Expulso Automaticamente na forma LRU ou em qualquer alteração de arquivo, manualmente ao reiniciar um cluster. Automaticamente à moda LRU, manualmente com unpersist.

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

Consistência do cache de disco

A cache de disco deteta automaticamente quando os ficheiros de dados são criados, eliminados, modificados ou substituídos e atualiza o respetivo conteúdo em conformidade. Você pode gravar, modificar e excluir dados da tabela sem a necessidade de invalidar explicitamente os dados armazenados em cache. Quaisquer entradas obsoletas são automaticamente invalidadas e removidas do cache.

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

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

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

Configurar o cache de disco

A Databricks recomenda que escolha tipos de instância de trabalho com aceleração de cache para a sua computação. Essas instâncias são configuradas automaticamente de forma ideal para o cache de disco.

Nota

Quando um worker é desativado, a cache do Spark armazenada nesse worker é perdida. Portanto, se o dimensionamento automático estiver habilitado, haverá alguma instabilidade com o cache. O Spark precisaria então reler partições ausentes da fonte de dados, conforme necessário.

Configurar o uso do disco

Para configurar como a cache do disco utiliza o armazenamento local dos nós de trabalho, especifique estas definições de configuração do Spark 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 armazenados 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 desativar a cache de disco

Para ver a definição atual da 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]")

A desativação do cache não resulta na eliminação dos dados que já estão no armazenamento local. Em vez disso, impede que as consultas adicionem novos dados ao cache e leiam dados do cache.