Prestaties optimaliseren met caching in Azure Databricks

Het lezen van data uit cloudobjectopslag is trager dan lezen van lokale schijf. Zonder caching halen queries en notitieboeken die dezelfde Parquet-databestanden lezen ze elke keer opnieuw op uit cloudobjectopslag.

Azure Databricks gebruikt schijfcaching om het lezen van data te versnellen. Wanneer een node een Parquet-databestand ophaalt van externe opslag, slaat het automatisch een kopie op zijn lokale opslag op in een snel tussentijds formaat. Latere uitlezingen van dezelfde gegevens draaien lokaal en zijn aanzienlijk sneller. De cache werkt voor alle Parquet-databestanden, inclusief Delta Lake-tabellen.

Opmerking

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.

Aanbevolen procedures

De schijfcache helpt het meest bij workloads die dezelfde data meerdere keren lezen, zoals herhaalde of iteratieve zoekopdrachten op dezelfde tabellen. Azure Databricks schakelt het automatisch in op werkerinstantietypes die het ondersteunen. Om de schijfcache te helpen het lezen te versnellen, volg deze praktijken:

Delta-cache hernoemd naar schijfcache

Schijfcache in Azure Databricks werd voorheen de Delta-cache en de DBIO-cache genoemd. Cachegedrag van schijven is een propriëtaire Azure Databricks-functie. Deze naamwijziging probeert verwarring weg te nemen dat het deel uitmaakte van het Delta Lake-protocol.

Vergelijk de schijfcache en de Spark-cache

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

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. Blokkeert in het geheugen, maar dit is afhankelijk van het opslagniveau.
Toegepast op Elke op ABFS en andere bestandssystemen opgeslagen Parquet-tabel. Elke DataFrame of RDD.
Getriggerd Automatisch bij de eerste keer lezen (als cache is ingeschakeld). Hiervoor zijn handmatige codewijzigingen vereist.
Geëvalueerd Luiweg. Op luie wijze.
Beschikbaarheid Standaard ingeschakeld bij bepaalde nodetypes. Je schakelt het in of uit met configuratievlaggen. Altijd beschikbaar.
Uitgezet 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 de 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 die schijfcaching 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 workers 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 SSD's die bij de werkknooppunten worden geleverd. Zie De schijfcache configureren voor configuratieopties.

De schijfcache configureren

Databricks raadt aan om cache-accelereerde worker-instantietypes te kiezen voor je compute. Dergelijke instanties worden automatisch optimaal geconfigureerd voor de schijfcache.

Opmerking

Wanneer een worker buiten gebruik wordt gesteld, gaat de Spark-cache die op die worker 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

Om te configureren hoe de schijfcache de lokale opslag van de werkknopen gebruikt, specificeer deze Spark-configuratie-instellingen tijdens het aanmaken van de 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: moeten 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

Om de huidige instelling voor de schijfcache te zien, voer uit:

spark.conf.get("spark.databricks.io.cache.enabled")

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, leidt dit niet tot het verwijderen van de gegevens die al in de lokale opslag staan. In plaats daarvan voorkomt het dat query's nieuwe gegevens aan de cache toevoegen en gegevens uit de cache lezen.