Intelligenter Cache in Microsoft Fabric

Das intelligente Cachefeature funktioniert nahtlos hinter den Kulissen und speichert Daten zwischen, um die Ausführung von Apache Spark-Aufträgen in Microsoft Fabric zu beschleunigen, da sie aus Ihrem OneLake- oder Azure Data Lake Storage (ADLS)-Gen2-Speicher über Tastenkombinationen gelesen wird. Außerdem werden Änderungen an den zugrunde liegenden Dateien automatisch erkannt und die Dateien im Cache automatisch aktualisiert, sodass Sie die neuesten Daten erhalten. Wenn die Cachegröße ihren Grenzwert erreicht, gibt der Cache automatisch die am wenigsten gelesenen Daten frei, um Platz für neuere Daten zu schaffen. Dieses Feature senkt die Gesamtbetriebskosten, indem die Leistung bei nachfolgenden Lesevorgängen der im verfügbaren Cache gespeicherten Dateien bis zu 60% verbessert wird.

Wenn das Apache Spark-Modul in Microsoft Fabric eine Datei oder Tabelle aus Ihrem Lakehouse abfragt, ruft es den Remotespeicher auf, um die zugrunde liegenden Dateien zu lesen. Bei jeder Abfrage derselben Daten muss die Spark-Engine jedes Mal einen Aufruf an den Remote-Speicher machen. Dieser redundante Prozess fügt ihrer gesamten Verarbeitungszeit Latenz hinzu. Spark verfügt über eine Zwischenspeicherungsanforderung, die Sie manuell festlegen und freigeben müssen, um die Latenz zu minimieren und die Gesamtleistung zu verbessern. Diese Anforderung kann jedoch zu veralteten Daten führen, wenn sich die zugrunde liegenden Daten ändern.

Intelligenter Cache vereinfacht den Prozess, indem jeder Lesevorgang innerhalb des zugewiesenen Cachespeicherplatzes auf jedem Spark-Knoten automatisch zwischengespeichert wird, in dem Datendateien in SSD zwischengespeichert werden. Jede Anforderung für eine Datei überprüft, ob die Datei im lokalen Knotencache vorhanden ist und vergleicht das Tag aus dem Remotespeicher, um festzustellen, ob die Datei veraltet ist. Wenn die Datei nicht vorhanden ist oder die Datei veraltet ist, liest Spark die Datei vor und speichert sie im Cache. Wenn der Cache voll wird, wird die Datei mit dem ältesten Zeitpunkt des letzten Zugriffs aus dem Cache entfernt, um aktuellere Dateien zuzulassen.

Intelligenter Cache ist ein einzelner Cache pro Knoten. Wenn Sie einen mittelgroßen Knoten verwenden und zwei kleine Executor auf diesem einzelnen Knoten betreiben, teilen sich die beiden Executor denselben Cache. Diese Zwischenspeicherung auf Datendateiebene ermöglicht es auch, dass mehrere Abfragen denselben Cache verwenden, wenn sie auf dieselben Daten oder Datendateien zugreifen.

Funktionsweise

In Microsoft Fabric (Runtime 1.1 und 1.2) ist die intelligente Zwischenspeicherung standardmäßig für alle Spark-Pools in allen Arbeitsbereichen mit einer Cachegröße von 50% aktiviert. Die tatsächliche Größe des verfügbaren Speichers und der Cachegröße für jeden Knoten hängt von der Knotenfamilie und der Knotengröße ab.

Gründe für die Verwendung intelligenter Caches

Dieses Feature bietet Ihnen Vorteile, wenn:

  • Ihre Workload erfordert das mehrfache Lesen derselben Datei, und die Dateigröße passt in den Cache.

  • Ihre Arbeitslast verwendet Delta Lake-Tabellen, Parquet- oder CSV-Dateiformate.

Der Vorteil des intelligenten Caches wird nicht angezeigt, wenn:

  • Sie lesen eine Datei, die die Cachegröße überschreitet. Wenn ja, kann der Anfang der Dateien ausgelagert werden, sodass nachfolgende Abfragen die Daten erneut aus dem Fernspeicher abrufen müssen. In diesem Fall werden keine Vorteile des intelligenten Caches angezeigt, und Möglicherweise möchten Sie die Größe des Caches und/oder die Knotengröße erhöhen.

  • Ihre Workload erfordert große Mengen von Shuffle. Durch das Deaktivieren des intelligenten Caches wird verfügbarer Speicherplatz freigegeben, um zu verhindern, dass Ihr Auftrag aufgrund unzureichenden Speicherplatzes fehlschlägt.

Aktivieren und Deaktivieren des intelligenten Caches

Sie können den intelligenten Cache innerhalb einer Sitzung deaktivieren oder aktivieren, indem Sie den folgenden Code in Ihrem Notizbuch ausführen oder diese Konfiguration auf Arbeitsbereichs- oder Umgebungsebene festlegen.

spark.conf.set("spark.synapse.vegas.useCache", "false/true")