Optimera prestanda med cachelagring i Azure Databricks

Att läsa data från molnlagring är långsammare än att läsa från lokal disk. Utan cachelagring hämtar frågor och notebooks som läser samma Parquet-datafiler dem upprepade gånger från molnobjektlagring varje gång.

Azure Databricks använder diskcaching för att snabba upp dataläsningar. När en nod hämtar en Parquet-datafil från fjärrlagring lagrar den automatiskt en kopia på sin lokala lagring i ett snabbt mellanformat. Senare läsningar av samma data körs lokalt och är betydligt snabbare. Cachen fungerar för alla Parquet-datafiler, inklusive Delta Lake-tabeller.

Anmärkning

I SQL warehouses och Databricks Runtime 14.2 och senare ignoreras kommandot CACHE SELECT. En förbättrad algoritm för diskcachelagring används i stället.

Regelverk

Diskcachen hjälper mest med arbetsbelastningar som läser samma data många gånger, såsom upprepade eller iterativa frågor på samma tabeller. Azure Databricks aktiverar det automatiskt på arbetsnodstyper som stödjer det. För att hjälpa diskcachen att snabba upp läsningarna, följ dessa rutiner:

Deltacache har bytt namn till diskcache

Diskcachelagring i Azure Databricks kallades tidigare deltacache och DBIO-cache. Beteende för diskcachelagring är en egen Azure Databricks-funktion. Den här namnändringen syftar till att reda ut missförståndet att det ingick i Delta Lake-protokollet.

Jämför diskcachen och Spark-cachen

Azure Databricks-diskcachen skiljer sig från Apache Spark-cachelagring. Databricks rekommenderar att man använder automatisk diskcache.

I följande tabell sammanfattas de viktigaste skillnaderna mellan disk- och Apache Spark-cachelagring så att du kan välja det bästa verktyget för arbetsflödet:

Funktion diskcache cache för Apache Spark
Lagras som Lokala filer på en arbetsnod. Minnesinterna block, men det beror på lagringsnivå.
Tillämpas på Alla Parquet-tabeller som lagras på ABFS och andra filsystem. DataFrame eller RDD.
Utlöst Automatiskt vid den första läsningen (om cachen är aktiverad). Manuell hantering kräver kodändringar.
Utvärderad Slött. Slött.
Tillgänglighet Aktiverat som standard på vissa nodtyper. Du aktiverar eller inaktiverar det med konfigurationsflaggor. Alltid tillgänglig.
Utkastad Automatiskt på LRU-sätt eller vid filändringar, manuellt när du startar om ett kluster. Automatiskt på LRU-sätt, manuellt med unpersist.

I serverless-beräkning fungerar df.cache() annorlunda än Apache Spark-cachen i den här tabellen. Se Cache DataFrames med serverlös beräkning.

Diskcachekonsistens

Diskcacheminnet identifierar automatiskt när datafiler skapas, tas bort, ändras eller skrivs över och uppdaterar dess innehåll i enlighet med detta. Du kan skriva, ändra och ta bort tabelldata utan att uttryckligen behöva ogiltigförklara cachelagrade data. Inaktuella poster ogiltigförklaras automatiskt och avlägsnas från cacheminnet.

Val av instanstyper för diskcache

Det rekommenderade (och enklaste) sättet att använda diskcachelagring är att välja en arbetstyp med SSD-volymer när du konfigurerar klustret. Sådana workers är aktiverade och konfigurerade för diskcache.

Diskcachen är konfigurerad för att använda högst hälften av det tillgängliga utrymmet på de lokala SSD:erna som medföljer arbetsnoderna. För konfigurationsalternativ, se Konfigurera diskcachen.

Konfigurera diskcachen

Databricks rekommenderar att du väljer cache-accelererade arbetarnodstyper för ditt compute. Sådana instanser konfigureras automatiskt optimalt för diskcachen.

Anmärkning

När en worker tas ur drift går Spark-cachen som lagras på den workern förlorad. Så om autoskalning är aktiverat finns det viss instabilitet i cacheminnet. Spark skulle då behöva läsa om saknade partitioner från källan efter behov.

Konfigurera diskanvändning

För att konfigurera hur diskcachen använder arbetarnodernas lokala lagring, ange dessa Spark-konfigurationsinställningar vid klusterskapandet:

  • spark.databricks.io.cache.maxDiskUsage: diskutrymme per nod reserverat för cachelagrade data i byte
  • spark.databricks.io.cache.maxMetaDataCache: diskutrymme per nod reserverat för cachelagrade metadata i byte
  • spark.databricks.io.cache.compression.enabled: ska cachelagrade data lagras i komprimerat format

Exempelkonfiguration:

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

Aktivera eller inaktivera diskcacheminnet

För att se den aktuella inställningen för diskcachen, kör:

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

Om du vill aktivera och inaktivera diskcachen kör du:

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

Om cacheminnet inaktiveras tas inte data som redan finns i den lokala lagringen bort. I stället förhindrar det förfrågningar från att lägga till nya data i cacheminnet och läsa data från cacheminnet.