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 bajtachspark.databricks.io.cache.maxMetaDataCache
: miejsce na dysku na węzeł zarezerwowane dla buforowanych metadanych w bajtachspark.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.