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 die Verwendung von cachebeschleunigten Workerinstanztypen. 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 Bytesspark.databricks.io.cache.maxMetaDataCache
: für zwischengespeicherte Metadaten reservierter Speicherplatz pro Knoten in Bytesspark.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.