Optimera prestanda med cachelagring i Azure Databricks

Azure Databricks använder diskcachelagring för att påskynda dataläsningar genom att skapa kopior av fjärranslutna Parquet-datafiler i nodernas lokala lagring med ett snabbt mellanliggande dataformat. Data cachelagras automatiskt när en fil måste hämtas från en fjärrplats. Efterföljande läsningar av samma data utförs sedan lokalt, vilket ger en betydligt bättre läshastighet. Cacheminnet fungerar för alla Parquet-datafiler (inklusive Delta Lake-tabeller).

Kommentar

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

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 lösa förvirringen att det var en del av Delta Lake-protokollet.

Diskcache jämfört med Spark-cache

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

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 Apache Spark-cache
Lagras som Lokala filer på en arbetsnod. Minnesinterna block, men det beror på lagringsnivå.
Används 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). Manuellt kräver kodändringar.
Utvärderas Lättjefullt. Lättjefullt.
Tillgänglighet Kan aktiveras eller inaktiveras med konfigurationsflaggor som är aktiverade som standard på vissa nodtyper. Alltid tillgänglig.
Vräkta 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.

Diskcachekonsekvens

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.

Välja instanstyper för att använda diskcachelagring

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 arbetare är aktiverade och konfigurerade för diskcachelagring.

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. Konfigurationsalternativ finns i Konfigurera diskcachen.

Konfigurera diskcachen

Azure Databricks rekommenderar att du väljer cacheaccelererade arbetsinstanstyper för dina kluster. Sådana instanser konfigureras automatiskt optimalt för diskcachen.

Kommentar

När en arbetare inaktiveras går Spark-cachen som lagras på den arbetaren 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

Om du vill konfigurera hur diskcachen använder arbetsnodernas lokala lagring anger du följande Spark-konfigurationsinställningar när klustret skapas:

  • 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

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 att frågor lägger till nya data i cacheminnet och läser data från cacheminnet.