Optimieren der Leistung mit Caching in Azure Databricks

Azure Databricks verwendet Datenträgercaching, um Datenlesevorgänge zu beschleunigen, indem Kopien von Remote-Parquetdaten-Dateien im lokalen Speicher von Knoten mithilfe eines schnellen Zwischendatenformats erstellt werden. Die Daten werden automatisch zwischengespeichert, wenn eine Datei von einem Remotespeicherort abgerufen werden muss. Anschließend werden die gleichen Daten lokal gelesen, was zu einer deutlich verbesserten Lesegeschwindigkeit führt. Der Zwischenspeicher funktioniert für alle Datendateien (einschließlich Delta Lake-Tabellen).

Hinweis

In SQL-Warehouses und Databricks Runtime 14.2 und höher wird der Befehl CACHE SELECT ignoriert. Stattdessen wird ein erweiterter Datenträgerzwischenspeicherungsalgorithmus verwendet.

Delta-Cache in Disk-Cache umbenannt

Das Zwischenspeichern von Datenträgern in Azure Databricks wurde früher als Delta-Cache und DBIO-Cache bezeichnet. Das Zwischenspeichern von Datenträgern-Verhalten ist ein proprietäres Azure Databricks-Feature. Diese Namensänderung soll die Verwirrung beseitigen, dass sie Teil des Delta-Lake-Protokolls war.

Datenträgercache verglichen mit Spark-Cache

Der Azure Databricks-Datenträgercache unterscheidet sich von der Apache Spark-Zwischenspeicherung. Azure Databricks empfiehlt die Verwendung des automatischen Datenträgercachings.

Die folgende Tabelle fasst die wichtigsten Unterschiede zwischen Datenträger- und Apache Spark-Caching zusammen, damit Sie das beste Tool für Ihren Workflow wählen können:

Funktion Datenträgercache Apache Spark-Cache
Gespeichert als Lokale Dateien auf einem Workerknoten. In-Memory-Blöcke, aber abhängig von der Speicherebene.
Angewendet auf Alle Parquet-Tabellen, die auf ABFS und anderen Dateisystemen gespeichert sind. Jeder DataFrame oder RDD.
Ausgelöst Automatisch beim ersten Lesen (wenn der Cache aktiviert ist). Manuell, erfordert Änderungen am Code.
Ausgewertet Verzögert. Verzögert.
Verfügbarkeit Kann mit Konfigurationsflags aktiviert oder deaktiviert werden, ist für bestimmte Knotentypen standardmäßig deaktiviert. Immer verfügbar.
Evicted (Entfernt) Automatisch nach dem LRU-Prinzip oder bei jeder Dateiänderung, manuell beim Neustart eines Clusters. Automatisch nach dem LRU-Prinzip, manuell mit unpersist.

Datenträgercachekonsistenz

Der Datenträgercache erkennt automatisch, wenn Datendateien erstellt. gelöscht, modifiziert oder überschrieben werden, und aktualisiert seinen Inhalt entsprechend. Sie können Tabellendaten schreiben, ändern und löschen, ohne dass zwischengespeicherte Daten explizit ungültig gemacht werden müssen. Veraltete Einträge werden automatisch invalidiert und aus dem Cache entfernt.

Auswahl der Instanztypen für das Disk-Zwischenspeichern

Der empfohlene (und einfachste) Weg, Datenträgercaching zu verwenden, ist die Auswahl eines Workertyps mit SSD-Volumes, wenn Sie Ihr Cluster konfigurieren. Solche Worker sind für Datenträgercaching aktiviert und konfiguriert.

Der Datenträgercache ist so konfiguriert, dass er höchstens die Hälfte des auf den lokalen SSDs der Workerknoten verfügbaren Speicherplatzes nutzt. Konfigurationsoptionen finden Sie unter Konfigurieren des Datenträgercaches.

Konfigurieren des Datenträgercaches

Azure Databricks empfiehlt, dass Sie für Ihre Cluster cachebeschleunigte Workerinstanztypen wählen. Solche Instanzen werden automatisch optimal für den Datenträgercache konfiguriert.

Hinweis

Wenn ein Worker deaktiviert wird, geht der Spark-Cache, der auf diesem Worker gespeichert ist, verloren. So kommt es bei aktivierter automatischer Skalierung zu einer gewissen Instabilität des Caches. Spark müsste dann bei Bedarf fehlende Partitionen aus der Quelle neu einlesen.

Konfigurieren der Datenträgerverwendung

Um zu konfigurieren, wie der Datenträgercache den lokalen Speicher der Workerknoten verwendet, geben Sie während der Cluster-Erstellung die folgenden Einstellungen für die Spark-Konfiguration an:

  • spark.databricks.io.cache.maxDiskUsage: für zwischengespeicherte Daten reservierter Speicherplatz pro Knoten in Bytes
  • spark.databricks.io.cache.maxMetaDataCache: für zwischengespeicherte Metadaten reservierter Speicherplatz pro Knoten in Bytes
  • spark.databricks.io.cache.compression.enabled: ob die zwischengespeicherten Daten in einem komprimierten Format gespeichert werden sollen

Beispielkonfiguration:

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

Aktivieren oder Deaktivieren des Datenträgercaches

Um den Datenträgercache zu aktivieren und zu deaktivieren, führen Sie Folgenden aus:

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

Die Deaktivierung des Caches führt nicht zum Löschen der Daten, die sich bereits im lokalen Speicher befinden. Stattdessen wird verhindert, dass Abfragen neue Daten zum Cache hinzufügen und Daten aus dem Cache lesen.