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.
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:
- Escolha um tipo de instância de worker que suporte cache em disco. Consulte Selecionando tipos de instância para usar cache em disco.
- Use o cache em disco em vez do cache do Apache Spark para leituras repetidas de dados Parquet e Delta Lake. Consulte Comparar o cache em disco e o cache do Spark.
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 |
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.
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 bytesspark.databricks.io.cache.maxMetaDataCache: espaço em disco por nó reservado para metadados em cache em bytesspark.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
Ativar ou desativar o cache de disco
Para ver a configuração atual do cache em disco, faça a execução:
spark.conf.get("spark.databricks.io.cache.enabled")
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.