Optimieren der Leistung per Zwischenspeicherung

Der Delta-Cache beschleunigt Datenlesezugriffe, indem Kopien von Remotedateien 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. Aufeinander folgende Lesefunktionen derselben Daten werden dann lokal ausgeführt, was zu einer erheblich verbesserten Lesegeschwindigkeit führt.

Der Delta-Cache funktioniert für alle Parquet-Dateien und ist nicht auf Delta Lake-Formatdateien beschränkt. Der Delta-Cache unterstützt das Lesen von Parquet-Dateien in DBFS, HDFS, Azure Blob Storage, Azure Data Lake Storage Gen1 und Azure Data Lake Storage Gen2. Andere Speicherformate wie CSV, JSON und ORC werden nicht unterstützt.

Delta- und Apache Spark-Zwischenspeicherung

In Azure Databricks stehen zwei Arten von Zwischenspeicherung zur Verfügung: Deltazwischenspeicherung und Spark-Zwischenspeicherung. Hier sind die Merkmale der einzelnen Typen:

  • Typ der gespeicherten Daten:Der Deltacache enthält lokale Kopien von Remotedaten. Sie kann die Leistung einer Vielzahl von Abfragen verbessern, aber nicht zum Speichern von Ergebnissen beliebiger Unterabfragen verwendet werden. Der Spark-Cache kann das Ergebnis aller Unterabfragedaten und Daten speichern, die in anderen Formaten als Parquet gespeichert sind (z. B. CSV, JSON und ORC).
  • Leistung:Die im Deltacache gespeicherten Daten können schneller gelesen und verarbeitet werden als die Daten im Spark-Cache. Dies liegt daran, dass der Deltacache effiziente Dekomprimierungsalgorithmen verwendet und Daten im optimalen Format für die weitere Verarbeitung mithilfe der gesamten Codegenerierung ausgibt.
  • Automatische und manuelle Steuerung:Wenn der Deltacache aktiviert ist, werden Daten, die aus einer Remotequelle abgerufen werden müssen, automatisch dem Cache hinzugefügt. Dieser Prozess ist vollständig transparent und erfordert keine Aktion. Um Daten jedoch vorab in den Cache zu laden, können Sie den Befehl verwenden CACHE SELECT (siehe CACHE SELECT). Wenn Sie den Spark-Cache verwenden, müssen Sie die zwischenzuspeichernden Tabellen und Abfragen manuell angeben.
  • Datenträger im Vergleich zu speicherbasiert:Der Deltacache wird auf dem lokalen Datenträger gespeichert, sodass der Arbeitsspeicher nicht aus anderen Vorgängen in Spark entfernt wird. Aufgrund der hohen Lesegeschwindigkeiten moderner SSDs kann der Delta-Cache vollständig datenträgerresident sein, ohne dass sich dies negativ auf die Leistung auswirkt. Im Gegensatz dazu verwendet der Spark-Cache Arbeitsspeicher.

Hinweis

Sie können die Deltazwischenspeicherung und Apache Spark gleichzeitig verwenden.

Zusammenfassung

In der folgenden Tabelle werden die wichtigsten Unterschiede zwischen Delta und Apache Spark Zwischenspeicherung zusammengefasst, sodass Sie das beste Tool für Ihren Workflow auswählen können:

Funktion Deltacache Apache Spark Cache
Gespeichert als Lokale Dateien auf einem Workerknoten. In-Memory-Blöcke, aber es hängt von der Speicherebene ab.
Angewendet auf Alle Parquet-Tabellen, die auf WASB und anderen Dateisystemen gespeichert sind. Beliebiger DataFrame oder RDD.
Ausgelöst Automatisch beim ersten Lesezugriff (wenn der Cache aktiviert ist). Erfordert manuell Codeänderungen.
Ausgewertet Faul. Faul.
Erzwingen des Caches CACHE SELECT-Befehl .cache + jede Aktion zum Materialisieren des Caches und .persist .
Verfügbarkeit Kann mit Konfigurationsflags aktiviert oder deaktiviert werden, die für bestimmte Knotentypen deaktiviert sind. Immer verfügbar.
Vertrieben Automatisch bei jeder Dateiänderung, manuell beim Neustart eines Clusters. Automatisch auf LRU-Weise, manuell mit unpersist .

Konsistenz mit Delta-Cache

Der Delta-Cache erkennt automatisch, wann Datendateien erstellt oder gelöscht werden, und aktualisiert den Inhalt entsprechend. Sie können Tabellendaten schreiben, ändern und löschen, ohne zwischengespeicherte Daten explizit ungültig machen zu müssen.

Der Deltacache erkennt automatisch Dateien, die nach dem Zwischenspeichern geändert oder überschrieben wurden. Veraltete Einträge werden automatisch für ungültig erklärt und aus dem Cache entfernt.

Verwenden der Deltazwischenspeicherung

Die empfohlene (und einfachste) Methode zum Verwenden der Deltazwischenspeicherung besteht darin, beim Konfigurieren des Clusters einen Workertyp vom Typ Delta Cache Accelerated Standard_E (oder Serie) zu Standard_L wählen. Solche Worker sind für die Deltazwischenspeicherung aktiviert und konfiguriert.

Der Delta-Cache ist so konfiguriert, dass maximal die Hälfte des verfügbaren Speicherplatzes auf den lokalen SSDs verwendet wird, die mit den Workerknoten bereitgestellt werden. Konfigurationsoptionen finden Sie unter Konfigurieren des Deltacaches.

Zwischenspeichern einer Teilmenge der Daten

Verwenden Sie die folgende Syntax, um explizit eine Teilmenge der Zwischenspeicherungsdaten auszuwählen:

CACHE SELECT column_name[, column_name, ...] FROM [db_name.]table_name [ WHERE boolean_expression ]

Sie müssen diesen Befehl nicht verwenden, damit der Deltacache ordnungsgemäß funktioniert (die Daten werden beim ersten Zugriff automatisch zwischengespeichert). Dies kann jedoch hilfreich sein, wenn Sie eine konsistente Abfrageleistung benötigen.

Beispiele und weitere Details finden Sie unter

Überwachen des Delta-Caches

Sie können den aktuellen Status des Deltacaches für jeden Executors auf der Registerkarte Storage der Spark-Benutzeroberfläche überprüfen.

Monitor Delta cache

In der ersten Tabelle sind die folgenden Metriken für jeden aktiven Executorknoten zusammengefasst:

  • Datenträgerverwendung:Die Gesamtgröße, die vom Delta-Cache-Manager zum Speichern von Parquet-Datenseiten verwendet wird.
  • Maximale Datenträgerauslastungsgrenze:Die maximale Größe des Datenträgers, der dem Delta-Cache-Manager zum Speichern von Parquet-Datenseiten zugeordnet werden kann.
  • Prozentuale Datenträgernutzung:Der Anteil des vom Delta-Cache-Manager verwendeten Speicherplatzes außerhalb der maximalen Größe, die zum Speichern von Parquet-Datenseiten zugeordnet werden kann. Wenn ein Knoten die Datenträgerauslastung von 100 % erreicht, verwirft der Cache-Manager die zuletzt verwendeten Cacheeinträge, um Speicherplatz für neue Daten zu schaffen.
  • Größe des Metadatencaches:Die Gesamtgröße, die zum Zwischenspeichern von Parquet-Metadaten (Dateifußzeilen) verwendet wird.
  • Maximale Größe des Metadatencaches:Die maximale Größe des Datenträgers, der dem Delta-Cache-Manager zum Zwischenspeichern von Parquet-Metadaten (Dateifußzeilen) zugeordnet werden kann.
  • Nutzung von Prozentmetadaten:Der Anteil des Speicherplatzes, der vom Delta-Cache-Manager verwendet wird, ausgehend von der maximalen Größe, die für Parquet-Metadaten (Dateifußzeilen) zugeordnet werden kann.
  • Aus E/A-Cache gelesene Daten (Cachetreffer):Die Gesamtgröße der Parquet-Daten, die für diesen Knoten aus dem E/A-Cache gelesen werden.
  • In E/A-Cache geschriebene Daten (Cachefehler):Die Gesamtgröße der Parquet-Daten, die in nicht gefunden und daher in den E/A-Cache für diesen Knoten geschrieben wurden.
  • Cachetrefferquote:Der Anteil der Parquet-Daten, die aus dem E/A-Cache aller für diesen Knoten gelesenen Parquet-Daten gelesen wurden.

In der zweiten Tabelle sind die folgenden Metriken für alle Knoten in der Clusterlaufzeit zusammengefasst, einschließlich der knoten, die derzeit nicht aktiv sind:

  • Aus externem Dateisystem gelesene Daten (Alle Formate):Die Gesamtgröße der Daten, die von einem beliebigen Format aus einem externen Dateisystem gelesen werden, d. h. nicht aus dem E/A-Cache.
  • Aus E/A-Cache gelesene Daten (Cachetreffer):Die Gesamtgröße der Aus dem E/A-Cache gelesenen Parquet-Daten in der gesamten Clusterlaufzeit.
  • In E/A-Cache geschriebene Daten (Cachefehler):Die Gesamtgröße der Parquet-Daten, die in nicht gefunden und folglich in den E/A-Cache der gesamten Clusterlaufzeit geschrieben wurden.
  • Cachetrefferquote:Der Anteil der gesamten Parquet-Daten, die aus dem E/A-Cache aller Parquet-Daten gelesen werden, die über die Clusterlaufzeit hinweg gelesen werden.
  • Geschätzte Größe wiederholt gelesener Daten:Die ungefähre Größe von Daten, die zweimal oder mehrmals gelesen werden. Diese Spalte wird nur angezeigt, wenn spark.databricks.io.cache.estimateRepeatedReadstrue ist.
  • Cache Metadata Manager Peak Disk Usage (Maximale Datenträgerauslastung des Cachemetadaten-Managers):Die maximale Gesamtgröße, die vom Delta-Cache-Manager zum Ausführen des E/A-Caches verwendet wird.

Konfigurieren des Deltacaches

Azure Databricks empfiehlt, workerinstanztypen mit Cachebeschleunigte für Ihre Cluster auszuwählen. Solche Instanzen werden automatisch optimal für den Deltacache konfiguriert.

Konfigurieren der Datenträgerverwendung

Um zu konfigurieren, wie der Deltacache den lokalen Speicher der Workerknoten verwendet, geben Sie während der Clustererstellung die folgenden Spark-Konfigurationseinstellungen an:

  • spark.databricks.io.cache.maxDiskUsage: Speicherplatz pro Knoten, der für zwischengespeicherte Daten in Bytes reserviert ist
  • spark.databricks.io.cache.maxMetaDataCache: Speicherplatz pro Knoten, der für zwischengespeicherte Metadaten in Bytes reserviert ist
  • spark.databricks.io.cache.compression.enabled: sollen die zwischengespeicherten Daten im komprimierten Format gespeichert werden

Beispielkonfiguration:

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

Aktivieren oder Deaktivieren des Deltacaches

Um den Deltacache zu aktivieren und zu deaktivieren, führen Sie Folgenden aus:

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

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