Pular para o conteúdo principal

Otimizar o desempenho com o armazenamento em cache no Databricks

Ler dados do armazenamento de objetos em cloud é mais lento do que ler do disco local. Sem cache, as queries e notebooks que leem repetidamente os mesmos arquivos de dados Parquet buscam-nos sempre do armazenamento de objetos em cloud.

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

nota

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

Práticas recomendadas​

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

Delta cache renomeado para cache de 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.

Comparar o cache em disco e o 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

Ativado por default em certos tipos de nós. Você o habilita ou desabilita com sinalizadores de configuração.

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.

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

Ativado por default em certos tipos de nós. Você o habilita ou desabilita com sinalizadores de configuração.

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 de 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.

Seleção de tipos de instância para usar o 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 no site local SSD fornecido com os nós worker. Para opções de configuração, consulte Configurar o cache de disco.

Configurar o cache de disco​

Databricks Recomenda que o senhor escolha tipos de instância worker acelerados por cache para o seu compute. Essas instâncias são automaticamente configuradas de forma otimizada para o cache de disco.

nota

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 o uso do disco​

Para configurar como o cache de disco usa o armazenamento local dos nós worker, especifique estas configuraçõ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 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:

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

Ativar ou desativar o cache de disco​

Para ver a configuração atual do cache em disco, faça a execução:

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

Para ativar e desativar o cache em disco, execute:

Scala
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.