Otimizar o desempenho com cache no Azure Databricks
O Azure Databricks usa o cache de disco para acelerar as leituras de dados criando cópias de arquivos de dados remotos do Parquet no armazenamento local dos nós usando um formato de dados intermediário rápido. Os dados são automaticamente colocados em cache sempre que um ficheiro tem de ser obtido a partir de um local remoto. As leituras sucessivas dos mesmos dados são, em seguida, realizadas localmente, o que resulta numa melhoria significativa da velocidade de leitura. O cache funciona para todos os arquivos de dados do Parquet (incluindo 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.
Cache delta renomeado 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 fazia parte do protocolo Delta Lake.
Cache de disco vs. cache de faísca
O cache de disco do Azure Databricks difere do cache do Apache Spark. O Azure 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:
Caraterística | 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. |
Aplicada a | Qualquer tabela Parquet armazenada em 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 | Preguiçosamente. | Preguiçosamente. |
Disponibilidade | Pode ser ativado ou desativado com sinalizadores de configuração, ativado por padrão em determinados tipos de nós. | Sempre disponível. |
Despejado | Automaticamente na forma LRU ou em qualquer alteração de arquivo, manualmente ao reiniciar um cluster. | Automaticamente à moda LRU, manualmente com unpersist . |
Consistência do cache de disco
O cache de disco deteta automaticamente quando os arquivos de dados são criados, excluídos, modificados ou substituídos e atualiza seu conteúdo de acordo. Você pode gravar, modificar e excluir dados da tabela sem a necessidade de invalidar explicitamente os dados armazenados em cache. Todas as 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 trabalhadores 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 o cache de disco.
Configurar o cache de disco
O Azure Databricks recomenda que você escolha tipos de instância de trabalho acelerados por cache para sua computação. Essas instâncias são configuradas automaticamente de forma ideal para o cache de disco.
Nota
Quando um trabalhador é descomissionado, o cache do Spark armazenado nesse trabalhador é perdido. Portanto, se o dimensionamento automático estiver habilitado, haverá alguma instabilidade com o 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 de trabalho, especifique as seguintes 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 bytesspark.databricks.io.cache.maxMetaDataCache
: Espaço em disco por nó reservado para metadados armazenados em cache em bytesspark.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 desabilitar o cache de disco
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.