Optimera prestanda med cachelagring

Delta-cachen påskyndar dataläsningar genom att skapa kopior av fjärrfiler i nodernas lokala lagring med hjälp av 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 betydligt bättre läshastighet.

Delta-cachen fungerar för alla Parquet-filer och är inte begränsad till Delta Lake-formatfiler . Delta-cachen stöder läsning av Parquet-filer i DBFS, HDFS, Azure Blob Storage, Azure Data Lake Storage Gen1 och Azure Data Lake Storage Gen2. Det stöder inte andra lagringsformat som CSV, JSON och ORC.

Delta- och Apache Spark-cachelagring

Det finns två typer av cachelagring i Azure Databricks: Delta-cachelagring och Spark-cachelagring. Här är egenskaperna för varje typ:

  • Typ av lagrade data: Delta-cachen innehåller lokala kopior av fjärrdata. Det kan förbättra prestanda 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).
  • Prestanda: Data som lagras i Delta-cachen kan läsas och användas snabbare än data i Spark-cachen. Det beror på att Delta-cachen använder effektiva dekomprimeringsalgoritmer och matar ut data i optimalt format för vidare bearbetning med hjälp av kodgenerering i hela steg.
  • Automatisk kontra manuell kontroll: När Delta-cachen ä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-cacheminnet måste du manuellt ange de tabeller och frågor som ska cachelagrats.
  • Disk jämfört med minnesbaserad: Delta-cachen lagras på den lokala disken, så att minnet inte tas bort från andra åtgärder i Spark. På grund av de höga läshastigheterna för moderna SSD:ar kan Delta-cachen vara helt diskbaserad utan negativ inverkan på dess prestanda. Spark-cachen använder däremot minne.

Anteckning

Du kan använda Delta-cachelagring och Apache Spark-cachelagring samtidigt.

Sammanfattning

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

Funktion Deltacache Apache Spark-cache
Lagras som Lokala filer på en arbetsnod. Minnesinterna block, men det beror på lagringsnivå.
Tillämpad på Alla Parquet-tabeller som lagras på WASB och andra filsystem. Valfri DataFrame eller RDD.
Utlöste Automatiskt vid den första läsningen (om cachen är aktiverad). Manuellt kräver kodändringar.
Utvärderas Lättjefullt. Lättjefullt.
Framtvinga cache Kommandot CACHE SELECT .cache + alla åtgärder för att materialisera cacheminnet och .persist.
Tillgänglighet Kan aktiveras eller inaktiveras med konfigurationsflaggor, inaktiverade på vissa nodtyper. Alltid tillgänglig.
Vräkta Automatiskt i LRU-format eller vid filändringar, manuellt när du startar om ett kluster. Automatiskt på LRU-sätt, manuellt med unpersist.

Konsekvens i Delta-cachelagring

Delta-cachen identifierar automatiskt när datafiler skapas eller tas bort 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.

Delta-cachen identifierar automatiskt filer som har ändrats eller skrivits över när de har cachelagrats. Alla inaktuella poster ogiltigförklaras och avlägsnas automatiskt från cachen.

Använda Delta-cachelagring

Det rekommenderade (och enklaste) sättet att använda Delta-cachelagring är att välja en deltacacheaccelererad arbetstyp när du konfigurerar klustret. Sådana arbetare är aktiverade och konfigurerade för Delta-cachelagring.

Delta-cachen ä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 Delta-cachen.

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 Delta-cachen 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

Övervaka Delta-cachen

Du kan kontrollera det aktuella tillståndet för Delta-cachen för var och en av utförarna på fliken Storage i Spark-användargränssnittet.

Monitor Delta cache

Den första tabellen sammanfattar följande mått för var och en av de aktiva körnoderna:

  • Diskanvändning: Den totala storleken som används av Delta-cachehanteraren för lagring av Parquet-datasidor.
  • Maximal diskanvändningsgräns: Den maximala storleken på disken som kan allokeras till Delta-cachehanteraren för lagring av Parquet-datasidor.
  • Procent diskanvändning: Den del av diskutrymmet som används av Delta-cachehanteraren av den maximala storlek som kan allokeras för lagring av Parquet-datasidor. När en nod når 100 % diskanvändning tar cachehanteraren bort de senast använda cacheposterna för att skapa utrymme för nya data.
  • Storlek på metadatacache: Den totala storleken som används för cachelagring av Parquet-metadata (filsidfötter).
  • Maximal storleksgräns för metadatacache: Den maximala storleken på disken som kan allokeras till Delta-cachehanteraren för cachelagring av Parquet-metadata (filsidfötter).
  • Procentuell metadataanvändning: Den del av diskutrymmet som används av Delta-cachehanteraren av den maximala storlek som kan allokeras för Parquet-metadata (filsidfötter).
  • Dataläsning från I/O-cache (cacheträffar): Den totala storleken på Parquet-data som lästs från I/O-cachen för den här noden.
  • Data som skrivits till IO Cache (Cache Misses): Den totala storleken på Parquet-data hittades inte i och skrivs därför till I/O-cachen för den här noden.
  • Cacheträffsförhållande: Bråkdelen av Parquet-data som lästs från I/O-cachen av alla Parquet-data som lästs för den här noden.

Den andra tabellen sammanfattar följande mått för alla noder i klusterkörningen, inklusive noder som för närvarande inte är aktiva:

  • Dataläsning från externt filsystem (alla format): Den totala storleken på dataläsning av valfritt format från ett externt filsystem, dvs. inte från I/O-cachen.
  • Dataläsning från I/O-cache (cacheträffar): Den totala storleken på Parquet-data som lästs från I/O-cachen över klusterkörningen.
  • Data som skrivits till IO Cache (CacheMisses): Den totala storleken på Parquet-data som inte hittades i och därför skrivs till I/O-cachen över klusterkörningen.
  • Cacheträffsförhållande: Bråkdelen av totalt antal Parquet-data som lästs från I/O-cachen av alla Parquet-data som lästs över klusterkörningen.
  • Uppskattad storlek på data som lästs upprepade gånger: Den ungefärliga storleken på data läse två eller flera gånger. Den här kolumnen visas bara om spark.databricks.io.cache.estimateRepeatedReads är true.
  • Högsta diskanvändning i Cache Metadata Manager: Den högsta totala storleken som används av Delta-cachehanteraren för att köra I/O-cachen.

Konfigurera Delta-cachen

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

Anteckning

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 Delta-cachen 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 Delta-cachen

Om du vill aktivera och inaktivera Delta-cachen 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 cachen.