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).

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. Beteendet förblir oförändrat med det här namnbytet och beskrivs nedan.

Automatisk och manuell cachelagring

Azure Databricks-diskcachen skiljer sig från Apache Spark-cachelagring. Azure Databricks rekommenderar att du använder automatisk diskcachelagring för de flesta åtgärder.

När diskcachen är aktiverad läggs data som måste hämtas från en fjärrkälla automatiskt till i cacheminnet. Den här processen är helt transparent och kräver ingen åtgärd. Men om du vill förinläsa data i cacheminnet i förväg kan du använda CACHE SELECT kommandot (se Cachelagrar en delmängd av data). När du använder Spark-cachen måste du manuellt ange de tabeller och frågor som ska cachelagrats.

Diskcachen innehåller lokala kopior av fjärrdata. Det kan förbättra prestandan för en mängd olika frågor, men kan inte användas för att lagra resultat av godtyckliga underfrågor. Spark-cachen kan lagra resultatet av underfrågor och data som lagras i andra format än Parquet (till exempel CSV, JSON och ORC).

Data som lagras i diskcachen kan läsas och köras snabbare än data i Spark-cachen. Detta beror på att diskcachen använder effektiva dekomprimeringsalgoritmer och matar ut data i optimalt format för vidare bearbetning med hjälp av kodgenerering i hela fasen.

Till skillnad från Spark-cachen använder inte diskcachelagring systemminne. På grund av de höga läshastigheterna för moderna SSD:er kan diskcacheminnet vara helt diskbaserat utan negativ inverkan på dess prestanda.

Sammanfattning

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.
Framtvinga cacheminne CACHE SELECT kommando` .cache + alla åtgärder för att materialisera cachen och .persist.
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.

Cachelagrar en delmängd av data

Om du uttryckligen vill välja en delmängd av data som ska cachelagras använder du följande syntax:

CACHE SELECT column_name[, column_name, ...] FROM [db_name.]table_name [ WHERE boolean_expression ]

Du behöver inte använda det här kommandot för att diskcachen ska fungera korrekt (data cachelagras automatiskt när de först används). Men det kan vara användbart när du behöver konsekventa frågeprestanda.

Exempel och mer information finns i

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.