Prestaties optimaliseren met caching in Azure Databricks

Azure Databricks maakt gebruik van schijfcaching om gegevensleesbewerkingen te versnellen door kopieƫn te maken van externe Parquet-gegevensbestanden in de lokale opslag van knooppunten met behulp van een snelle tussenliggende gegevensindeling. De gegevens worden automatisch in de cache opgeslagen wanneer een bestand moet worden opgehaald van een externe locatie. Opeenvolgende leesbewerkingen van dezelfde gegevens worden vervolgens lokaal uitgevoerd, wat resulteert in een aanzienlijk verbeterde leessnelheid. De cache werkt voor alle Parquet-gegevensbestanden (inclusief Delta Lake-tabellen).

Notitie

In SQL Warehouses en Databricks Runtime 14.2 en hoger wordt de CACHE SELECT opdracht genegeerd. In plaats daarvan wordt een verbeterd algoritme voor schijfcaching gebruikt.

Delta-cache hernoemd naar schijfcache

Schijfcaching in Azure Databricks werd voorheen de Delta-cache en de DBIO-cache genoemd. Cachegedrag van schijven is een eigen Azure Databricks-functie. Deze naamwijziging probeert verwarring op te lossen die deel uitmaakte van het Delta Lake-protocol.

Schijfcache versus Spark-cache

De Azure Databricks-schijfcache verschilt van Apache Spark-caching. Azure Databricks raadt aan automatische schijfcaching te gebruiken.

De volgende tabel bevat een overzicht van de belangrijkste verschillen tussen schijf- en Apache Spark-caching, zodat u het beste hulpprogramma voor uw werkstroom kunt kiezen:

Functie schijfcache Apache Spark-cache
Opgeslagen als Lokale bestanden op een werkknooppunt. In-memory blokken, maar dit is afhankelijk van het opslagniveau.
Toegepast op Elke Parquet-tabel die is opgeslagen op ABFS en andere bestandssystemen. Elk DataFrame of RDD.
Geactiveerd Automatisch bij de eerste leesbewerking (als cache is ingeschakeld). Handmatig vereist codewijzigingen.
Geƫvalueerd Lui. Lui.
Beschikbaarheid Kan worden ingeschakeld of uitgeschakeld met configuratievlagmen, standaard ingeschakeld voor bepaalde knooppunttypen. Altijd beschikbaar.
Verwijderd Automatisch op LRU-wijze of bij een bestandswijziging, handmatig bij het opnieuw opstarten van een cluster. Automatisch op LRU-wijze, handmatig met unpersist.

Consistentie van schijfcache

De schijfcache detecteert automatisch wanneer gegevensbestanden worden gemaakt, verwijderd, gewijzigd of overschreven en werkt de inhoud dienovereenkomstig bij. U kunt tabelgegevens schrijven, wijzigen en verwijderen zonder dat u gegevens in de cache expliciet ongeldig hoeft te maken. Verouderde vermeldingen worden automatisch ongeldig gemaakt en verwijderd uit de cache.

Instantietypen selecteren om schijfcaching te gebruiken

De aanbevolen (en eenvoudigste) manier om schijfcaching te gebruiken, is door een werkroltype met SSD-volumes te kiezen wanneer u uw cluster configureert. Dergelijke werkrollen zijn ingeschakeld en geconfigureerd voor schijfcaching.

De schijfcache is geconfigureerd voor het gebruik van maximaal de helft van de ruimte die beschikbaar is op de lokale SCHIJVEN die bij de werkknooppunten worden geleverd. Zie De schijfcache configureren voor configuratieopties.

De schijfcache configureren

Azure Databricks raadt u aan om voor uw clusters versnelde werkroltypen te kiezen. Dergelijke exemplaren worden automatisch optimaal geconfigureerd voor de schijfcache.

Notitie

Wanneer een werkrol buiten gebruik wordt gesteld, gaat de Spark-cache die op die werkrol is opgeslagen verloren. Dus als automatisch schalen is ingeschakeld, is er enige instabiliteit met de cache. Spark moet vervolgens indien nodig ontbrekende partities opnieuw lezen uit de bron.

Schijfgebruik configureren

Als u wilt configureren hoe de schijfcache gebruikmaakt van de lokale opslag van de werkknooppunten, geeft u de volgende Spark-configuratie-instellingen op tijdens het maken van het cluster:

  • spark.databricks.io.cache.maxDiskUsage: schijfruimte per knooppunt gereserveerd voor gegevens in cache in bytes
  • spark.databricks.io.cache.maxMetaDataCache: schijfruimte per knooppunt gereserveerd voor metagegevens in cache in bytes
  • spark.databricks.io.cache.compression.enabled: moet de gegevens in de cache worden opgeslagen in gecomprimeerde indeling

Voorbeeldconfiguratie:

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

De schijfcache in- of uitschakelen

Als u de schijfcache wilt in- en uitschakelen, voert u het volgende uit:

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

Als u de cache uitschakelt, worden de gegevens die zich al in de lokale opslag bevinden, niet wegvallen. In plaats daarvan voorkomt u dat query's nieuwe gegevens aan de cache toevoegen en gegevens uit de cache lezen.