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).
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.
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.
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 Parquet armazenada no GCS e em 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 |
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
O cache em disco funciona em default com todos os tipos de instância que têm SSDlocal.
Nos tipos de instância que suportam o cache de disco, o site Databricks ativa automaticamente o cache de disco nesse clustering e configura os tamanhos de cache apropriados para esse tipo de instância.
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
O uso do disco de cache é definido automaticamente nos tipos de instância com SSD local. A Databricks recomenda que o senhor não defina explicitamente o uso do disco de cache.
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 do worker, especifique as seguintes definições de configuração doSpark 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
O cache em disco funciona em default com todos os tipos de instância que têm SSDlocal.
Para ver a configuração atual do cache de disco, execute o seguinte comando:
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.