Azure Databricks'te önbelleğe alma ile performansı iyileştirme

Bulut nesne depolamasından veri okumak, yerel diskten okumaya göre daha yavaştır. Önbellekleme olmadan, aynı Parquet veri dosyalarını okuyan sorgular ve defterler, bunları her seferinde bulut nesne depolamadan tekrar tekrar alır.

Azure Databricks, veri okumalarını hızlandırmak için disk önbellekleme kullanır. Bir düğüm, uzak depolamadan bir Parquet veri dosyası çektiğinde, otomatik olarak bir kopyayı yerel depolamasında hızlı bir ara formatta saklar. Aynı verinin sonraki okumaları yerel olarak yürütülür ve önemli ölçüde daha hızlıdır. Önbellek, Delta Lake tabloları dahil olmak üzere tüm Parquet veri dosyaları için çalışır.

Not

SQL ambarlarında ve Databricks Runtime 14.2 ve üstünde CACHE SELECT komut yoksayılır. Bunun yerine gelişmiş bir disk önbelleğe alma algoritması kullanılır.

Önerilen yöntemler

Disk önbelleği, aynı verileri defalarca okuyan iş yüklerinde, örneğin aynı tablolarda tekrarlayan veya yinelemeli sorgularda en çok yardımcı olur. Azure Databricks, bunu destekleyen worker instance tiplerinde bunu otomatik olarak etkinleştirir. Disk önbelleğinin okumaları hızlandırmasına yardımcı olmak için şu uygulamaları takip edin:

Delta önbelleği disk önbelleği olarak yeniden adlandırıldı

Azure Databricks'te disk önbelleği, daha önce Delta önbelleği ve DBIO önbelleği olarak adlandırılırdı. Disk önbelleğe alma davranışı, özel bir Azure Databricks özelliğidir. Bu ad değişikliği, Delta Lake protokolünün bir parçası olduğu yönündeki karışıklığı gidermeyi amaçlar.

Disk önbelleği ile Spark önbelleğini karşılaştırın

Azure Databricks disk önbelleği Apache Spark önbelleğinden farklıdır. Databricks otomatik disk önbelleklemenin kullanılmasını önerir.

Aşağıdaki tabloda, iş akışınız için en iyi aracı seçebilmeniz için disk ile Apache Spark önbelleğe alma arasındaki temel farklar özetlenir:

Özellik disk önbelleği Apache Spark önbelleği
Şöyle depolanır İşçi düğümündeki yerel dosyalar. Bellek içi bloklar, ancak bu depolama düzeyine bağlıdır.
Uygulandığı yer ABFS ve diğer dosya sistemlerinde depolanan herhangi bir Parquet tablosu. Herhangi bir DataFrame veya RDD.
Tetiklenmiş otomatik olarak, ilk okumada (önbellek etkinse). Manuel olarak, kod değişiklikleri gerektirir.
Değerlendirildi Lazily. Lazily.
Kullanılabilirlik Bazı düğüm tiplerinde varsayılan olarak etkinleştirilmiştir. Bunu yapılandırma bayraklarıyla etkinleştirebilir veya devre dışı bırakabilirsiniz. Her zaman kullanılabilir.
Çıkarıldı LRU düzeninde veya herhangi bir dosya değişikliğinde otomatik olarak, küme yeniden başlatılırken ise el ile. Otomatik olarak LRU biçiminde, manuel olarak unpersist ile.

Sunucusuz hesaplamada, df.cache() bu tablodaki Apache Spark önbelleğinden farklı çalışır. Bkz. Sunucusuz hesaplamada Cache DataFrames.

Disk önbelleği tutarlılığı

Disk önbelleği veri dosyalarının ne zaman oluşturulduğunu, silindiğini, değiştirildiğini veya üzerine yazıldığını otomatik olarak algılar ve içeriğini buna göre güncelleştirir. Önbelleğe alınan verileri açıkça geçersiz kılmanıza gerek kalmadan tablo verilerini yazabilir, değiştirebilir ve silebilirsiniz. Eski girdiler otomatik olarak geçersiz kılınır ve önbellekten çıkarılır.

Disk önbelleğini kullanmak için örnek türlerini seçme

Disk önbelleğini kullanmanın önerilen (ve en kolay) yolu, kümenizi yapılandırırken SSD birimlerine sahip bir çalışan türü seçmektir. Bu tür çalışanlar disk önbelleğe alma için etkinleştirilmiş ve yapılandırılmıştır.

Disk önbelleği, çalışan düğümleriyle birlikte sağlanan yerel SSD'lerde kullanılabilir alanın en fazla yarısını kullanacak şekilde yapılandırılır. Yapılandırma seçenekleri için bkz. Disk önbelleğini yapılandırma.

Disk önbelleğini yapılandırma

Databricks, hesaplamanız için önbellek hızlandırılmış işçi örnek türlerini seçmenizi önerir. Bu tür örnekler disk önbelleği için otomatik olarak en uygun şekilde yapılandırılır.

Not

Bir worker kullanımdan kaldırıldığında, söz konusu worker'da depolanan Spark önbelleği kaybolur. Bu nedenle otomatik ölçeklendirme etkinleştirildiyse önbellekte bazı kararsızlıklar olabilir. Daha sonra Spark'ın kaynaktan eksik bölümleri gerektiğinde yeniden okuması gerekir.

Disk kullanımını yapılandırma

Disk önbelleğinin işçi düğümlerinin yerel depolamasını nasıl kullandığını yapılandırmak için, küme oluşturma sırasında şu Spark yapılandırma ayarlarını belirtin:

  • spark.databricks.io.cache.maxDiskUsage: Bayt cinsinden önbelleğe alınan veriler için ayrılmış düğüm başına disk alanı
  • spark.databricks.io.cache.maxMetaDataCache: Bayt cinsinden önbelleğe alınmış meta veriler için ayrılmış düğüm başına disk alanı
  • spark.databricks.io.cache.compression.enabled: önbelleğe alınan veriler sıkıştırılmış biçimde depolanmalı mı

Örnek yapılandırma:

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

Disk önbelleğini etkinleştir veya devre dışı bırak

Disk önbelleğinin mevcut ayarını görmek için şunu çalıştırın:

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

Disk önbelleğini etkinleştirmek ve devre dışı bırakmak için şunu çalıştırın:

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

Önbelleğin devre dışı bırakılması, yerel depolamada zaten bulunan verilerin silinmesine neden olmaz. Bunun yerine, sorguların önbelleğe yeni veri eklemesini ve önbellekten veri okumasını engeller.