Optymalizowanie wydajności za pomocą buforowania w usłudze Azure Databricks

Odczyt danych z pamięci obiektowej w chmurze jest wolniejszy niż odczyt z lokalnego dysku. Bez buforowania zapytania i notatniki czytające te same pliki danych Parquet pobierają je za każdym razem z magazynu obiektów w chmurze.

Azure Databricks wykorzystuje pamięć podręczną dyskową do przyspieszenia odczytów danych. Gdy węzeł pobiera plik danych Parquet ze zdalnej pamięci, automatycznie przechowuje kopię w pamięci lokalnej w szybkim formacie pośrednim. Późniejsze odczyty tych samych danych są wykonywane lokalnie i są znacznie szybsze. Pamięć podręczna działa dla wszystkich plików danych Parquet, w tym tabel Delta Lake.

Notatka

W magazynach SQL i Databricks Runtime 14.2 lub nowszych polecenie CACHE SELECT jest ignorowane. Zamiast tego jest używany ulepszony algorytm buforowania dysku.

Najlepsze praktyki

Pamięć podręczna dysku najbardziej pomaga przy obciążeniach, które wielokrotnie odczytują te same dane, na przykład powtarzające się lub iteracyjne zapytania na tych samych tabelach. Azure Databricks automatycznie to włącza na typach instancji worker, które go obsługują. Aby przyspieszyć odczyty pamięci podręcznej dysku, stosuj następujące praktyki:

Zmieniono nazwę Delta cache na pamięć podręczną dysku

Buforowanie dyskowe w usłudze Azure Databricks było wcześniej nazywane pamięcią podręczną delta i pamięcią podręczną DBIO. Zachowanie buforowania dysku to zastrzeżona funkcja usługi Azure Databricks. Ta zmiana nazwy ma na celu wyeliminowanie nieporozumień co do tego, że była ona częścią protokołu Delta Lake.

Porównaj pamięć podręczną dysku i pamięć podręczną Spark

Pamięć podręczna dysku usługi Azure Databricks różni się od buforowania platformy Apache Spark. Databricks zaleca automatyczne buforowanie dysku.

W poniższej tabeli przedstawiono podsumowanie najważniejszych różnic między buforowaniem na dysku i buforowaniem w Apache Spark, dzięki czemu można wybrać najlepsze narzędzie dla przepływu pracy:

Funkcja pamięć podręczna dysku Pamięć podręczna Apache Spark
Przechowywane jako Pliki lokalne w węźle roboczym. Bloki są w pamięci, ale to zależy od poziomu przechowywania.
Ma zastosowanie do Każda tabela Parquet przechowywana w systemach plików ABFS i innych systemach plików. Dowolna ramka danych lub RDD.
Wyzwolono Automatycznie podczas pierwszego odczytu (jeśli pamięć podręczna jest włączona). Ręcznie: wymaga zmian w kodzie.
Oceniono Leniwie. Leniwie.
Dostępność Domyślnie włączone na niektórych typach węzłów. Włączasz lub wyłączasz to za pomocą flag konfiguracyjnych. Zawsze dostępne.
Usunięty Automatycznie w trybie LRU lub przy każdej zmianie pliku, ręcznie podczas ponownego uruchamiania klastra. Automatycznie w sposób LRU, ręcznie za pomocą polecenia unpersist.

Spójność pamięci podręcznej dysku

Pamięć podręczna dysku automatycznie wykrywa, kiedy pliki danych są tworzone, usuwane, modyfikowane lub nadpisywane i aktualizuje odpowiednio jej zawartość. Dane tabeli można zapisywać, modyfikować i usuwać bez konieczności jawnego unieważnienia danych w pamięci podręcznej. Wszystkie nieaktualne wpisy są automatycznie unieważniane i usuwane z pamięci podręcznej.

Wybieranie typów wystąpień do użycia buforowania dysku

Zalecanym (i najprostszym) sposobem użycia buforowania dysku jest wybranie typu węzła roboczego z woluminami SSD podczas konfigurowania klastra. Takie elementy robocze są włączone i skonfigurowane do buforowania dysku.

Pamięć podręczna dysku jest skonfigurowana do używania co najwyżej połowy miejsca dostępnego na lokalnych dyskach SSD dostarczanych z węzłami roboczymi. Aby uzyskać informacje o opcjach konfiguracji, zobacz Konfigurowanie pamięci podręcznej dysku.

Konfigurowanie pamięci podręcznej dysku

Databricks zaleca wybieranie typów instancji roboczych z akceleracją pamięci podręcznej do obliczeń. Takie instancje są automatycznie konfigurowane optymalnie dla pamięci podręcznej dysku.

Notatka

Gdy węzeł roboczy zostanie zlikwidowany, pamięć podręczna Spark przechowywana na tym węźle roboczym zostanie utracona. Jeśli więc skalowanie automatyczne jest włączone, istnieje pewna niestabilność w pamięci podręcznej. Platforma Spark musiałaby następnie ponownie odczytać brakujące partycje ze źródła zgodnie z potrzebami.

Konfigurowanie wykorzystania dysku

Aby skonfigurować sposób, w jaki pamięć podręczna dyskowa wykorzystuje lokalną pamięć masową węzłów roboczych, określ następujące ustawienia konfiguracji Spark podczas tworzenia klastra:

  • spark.databricks.io.cache.maxDiskUsage: miejsce na dysku na węzeł zarezerwowane dla buforowanych danych w bajtach
  • spark.databricks.io.cache.maxMetaDataCache: miejsce na dysku na węzeł zarezerwowane dla buforowanych metadanych w bajtach
  • spark.databricks.io.cache.compression.enabled: czy buforowane dane powinny być przechowywane w formacie skompresowanym

Przykładowa konfiguracja:

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

Włącz lub wyłącz pamięć podręczną dysku

Aby zobaczyć aktualne ustawienie pamięci podręcznej dysku, uruchom następująco:

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

Aby włączyć i wyłączyć pamięć podręczną dysku, uruchom polecenie:

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

Wyłączenie pamięci podręcznej nie powoduje usunięcia danych, które są już w magazynie lokalnym. Zamiast tego zapobiega ona dodawaniu nowych danych do pamięci podręcznej i odczytywaniu danych z pamięci podręcznej.