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. |
Värderad | 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 din beräkning. 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 bytespark.databricks.io.cache.maxMetaDataCache
: diskutrymme per nod reserverat för cachelagrade metadata i bytespark.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.