Otimizar o desempenho com o armazenamento em cache no Databricks

O Databricks utiliza o armazenamento em cache em disco para acelerar a leitura de dados, criando cópias de arquivos de dados Parquet remotos no armazenamento local dos nós usando um formato de dados intermediário rápido.Os dados são armazenados em cache automaticamente sempre que um arquivo precisa ser obtido de um local remoto. Leituras sucessivas dos mesmos dados são então realizadas localmente, o que resulta em uma velocidade de leitura significativamente maior. O cache funciona para todos os arquivos de dados Parquet (incluindo tabelas Delta Lake).

Observação

No SQL warehouse e em Databricks Runtime 14.2 e acima, o comando CACHE SELECT é ignorado. Em vez disso, é usado um algoritmo de cache de disco aprimorado.

Cache delta renomeado para cache em disco

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

Cache de disco vs. cache do Spark

O cache de disco do Databricks é diferente do cache do Apache Spark. A Databricks recomenda o uso de cache de disco automático.

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:

Recurso

cache em disco

Cache do Apache Spark

Armazenado como

Arquivos locais em um nó do worker.

Blocos na memória, mas isso depende do nível de armazenamento.

Aplicado a

Qualquer tabela de Parquet armazenada em S3, ABFS e outros sistemas de arquivos.

Qualquer DataFrame ou RDD.

Acionado

Automaticamente, na primeira leitura (se o cache estiver habilitado).

Manualmente, requer alterações de código.

Avaliado

Ociosamente.

Ociosamente.

Disponibilidade

A ativação ou desativação pode ser controlada por meio de configurações, sendo ativada por padrão em certos tipos de nós.

Sempre disponível.

Excluído

Automaticamente no estilo LRU ou em qualquer alteração de arquivo, manualmente ao reiniciar um cluster.

Automaticamente no modo LRU, manualmente com unpersist.

Consistência do cache em disco

O cache em disco realiza uma detecção automática de novos arquivos de dados, exclusões, modificações ou substituições e faz as atualizações necessárias.Você pode escrever, modificar e excluir dados da tabela sem necessidade de invalidar explicitamente os dados em cache. Todas as entradas obsoletas são automaticamente invalidadas e eliminadas do cache.

Selecionando tipos de instância para usar cache de disco

A maneira recomendada (e mais fácil) de usar o cache em disco é escolher um tipo de trabalho com volumes SSD ao configurar o cluster. Esses trabalhadores são habilitados e configurados para cache em 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 worker . Para opções de configuração, consulte Configurar o cache de disco.

Configurar o cache em disco

Databricks recomenda que você escolha tipos de instância de trabalho com aceleração de cache para seus clusters. Essas instâncias são configuradas automaticamente de maneira ideal para o cache de disco.

Observação

Quando um trabalhador é descomissionado, o cache Spark armazenado nesse worker é perdido. Portanto, se a escalabilidade automática estiver ativada, pode haver alguma instabilidade no cache. O Spark precisaria então reler partições ausentes do código-fonte, conforme necessário.

Configurar uso do disco

Para configurar como o cache de disco usa o armazenamento local dos nós worker , especifique as seguintes definições de configuração do Spark durante a criação clusters :

  • spark.databricks.io.cache.maxDiskUsage: espaço em disco por nó reservado para dados em cache em bytes

  • spark.databricks.io.cache.maxMetaDataCache: espaço em disco por nó reservado para metadados em cache em bytes

  • spark.databricks.io.cache.compression.enabled: os dados armazenados em cache devem ser armazenados em formato comprimido

Configuração de exemplo:

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

Habilite ou desabilite o cache em disco

Para ativar e desativar o cache em disco, execute:

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

Desativar o cache não implica na exclusão dos dados já armazenados no armazenamento local.Em vez disso, ele impede que as consultas adicionem novos dados ao cache e leiam dados do cache.