Udostępnij za pośrednictwem


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

Usługa Azure Databricks używa buforowania dysków w celu przyspieszenia odczytu danych przez utworzenie kopii zdalnych plików danych Parquet w magazynie lokalnym węzłów przy użyciu szybkiego pośredniego formatu danych. Dane są buforowane automatycznie za każdym razem, gdy plik musi zostać pobrany z lokalizacji zdalnej. Kolejne odczyty tych samych danych są następnie wykonywane lokalnie, co skutkuje znacznie większą szybkością odczytu. Pamięć podręczna działa dla wszystkich plików danych Parquet (w tym tabel usługi Delta Lake).

Uwaga

W usługach SQL Warehouse i Databricks Runtime 14.2 lub nowszych CACHE SELECT polecenie jest ignorowane. Zamiast tego jest używany rozszerzony algorytm buforowania dysku.

Zmieniono nazwę pamięci podręcznej różnicowej na pamięć podręczną dysku

Buforowanie dysków 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 rozwiązanie nieporozumień, które było częścią protokołu Delta Lake.

Pamięć podręczna dysku a pamięć podręczna platformy Spark

Pamięć podręczna dysku usługi Azure Databricks różni się od buforowania platformy Apache Spark. Usługa Azure Databricks zaleca używanie automatycznego buforowania dysków.

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

Funkcja pamięć podręczna dysku Pamięć podręczna platformy Apache Spark
Przechowywane jako Pliki lokalne w węźle roboczym. Bloki w pamięci, ale zależą od poziomu magazynu.
Ma zastosowanie do Każda tabela Parquet przechowywana w systemach plików ABFS i innych systemach plików. Dowolna ramka danych lub RDD.
Wyzwolone Automatycznie podczas pierwszego odczytu (jeśli pamięć podręczna jest włączona). Ręcznie wymaga zmian kodu.
Oceniane Leniwie. Leniwie.
Dostępność Można włączyć lub wyłączyć z flagami konfiguracji, które są domyślnie włączone w niektórych typach węzłów. Zawsze dostępne.
Eksmitowany Automatycznie w trybie LRU lub w dowolnej 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 zastępowane i aktualizuje odpowiednio jego 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 eksmitowane 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 procesu roboczego z woluminami SSD podczas konfigurowania klastra. Takie procesy 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 procesu roboczego. Aby uzyskać informacje o opcjach konfiguracji, zobacz Konfigurowanie pamięci podręcznej dysku.

Konfigurowanie pamięci podręcznej dysku

Usługa Azure Databricks zaleca wybranie typów wystąpień procesu roboczego przyspieszonego w pamięci podręcznej dla obliczeń. Takie wystąpienia są automatycznie konfigurowane optymalnie dla pamięci podręcznej dysku.

Uwaga

Gdy proces roboczy zostanie zlikwidowany, pamięć podręczna Platformy Spark przechowywana w tym pracowniku 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 użycia dysku

Aby skonfigurować sposób użycia pamięci podręcznej dysku do lokalnego magazynu węzłów roboczych, określ następujące ustawienia konfiguracji platformy 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: jeśli 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łączanie lub wyłączanie pamięci podręcznej dysku

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.