使用 Azure Databricks 上的快取將效能優化

Azure Databricks 會使用磁碟快取來加速數據讀取,方法是使用快速中繼數據格式在節點的本機記憶體中建立遠端 Parquet 數據檔複本。 每當系統必須從遠端位置擷取檔案時,便會自動快取資料。 後續讀取相同資料時便會在本機執行,而大幅提升讀取速度。 快取適用於所有 Parquet 資料檔(包括 Delta Lake 數據表)。

注意

在 SQL 倉儲和 Databricks Runtime 14.2 和更新版本中, CACHE SELECT 會忽略命令。 會改用增強的磁碟快取演算法。

已重新命名為磁碟快取的差異快取

Azure Databricks 上的磁碟快取先前稱為 Delta 快取和 DBIO 快取。 磁碟快取行為是專屬的 Azure Databricks 功能。 此名稱變更會尋求解決它是 Delta Lake 通訊協定一部分的混淆。

磁碟快取與Spark快取

Azure Databricks 磁盘快取與 Apache Spark 快取不同。 Azure Databricks 建議使用自動磁碟快取。

下表摘要說明磁碟與 Apache Spark 快取之間的主要差異,以便您為工作流程選擇最佳工具:

功能 磁碟快取 Apache Spark 快取
儲存為 背景工作節點上的本機檔案。 記憶體內部區塊,但它取決於儲存層級。
套用至 儲存在 ABFS 和其他文件系統上的任何 Parquet 資料表。 任何 DataFrame 或 RDD。
觸發 自動在第一次讀取時(如果已啟用快取)。 手動需要變更程序代碼。
評價 懶洋洋 地。 懶洋洋 地。
可用性 可以使用組態旗標來啟用或停用,預設在特定節點類型上啟用。 永遠可以使用。
驅逐 以 LRU 方式自動或在重新啟動叢集時手動變更任何檔案。 以 LRU 方式自動,使用 手動方式 unpersist

磁碟快取一致性

磁碟快取會自動偵測何時建立、刪除、修改或覆寫數據檔,並據以更新其內容。 您可以撰寫、修改和刪除數據表數據,而不需要明確使快取的數據失效。 任何過時的專案都會自動失效,並從快取收回。

選取實例類型以使用磁碟快取

建議使用磁碟快取的建議方式是當您設定叢集時,選擇具有 SSD 磁碟區的背景工作類型。 這類背景工作角色會啟用並設定磁碟快取。

磁碟快取已設定為在提供給背景工作節點的本機 SSD 上使用最多一半的空間。 如需設定選項,請參閱 設定磁碟快取

設定磁碟快取

Azure Databricks 建議您為計算選擇快取加速的背景工作實例類型。 這類實例會自動針對磁碟快取進行最佳設定。

注意

當背景工作角色解除委任時,儲存在該背景工作角色上的Spark快取會遺失。 因此,如果啟用自動調整功能,快取會有一些不穩定。 接著,Spark 必須視需要從來源重新讀取遺漏的數據分割。

設定磁碟使用量

若要設定磁碟快取如何使用背景工作節點的本機記憶體,請在叢集建立期間指定下列 Spark 組態 設定:

  • spark.databricks.io.cache.maxDiskUsage:每個節點保留給以位元組為單位快取數據的磁碟空間
  • spark.databricks.io.cache.maxMetaDataCache:每個節點保留給以位元組為單位快取元數據的磁碟空間
  • spark.databricks.io.cache.compression.enabled:快取的數據應該以壓縮格式儲存

設定範例:

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

啟用或停用磁碟快取

若要啟用和停用磁碟快取,請執行:

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

停用快取並不會導致卸除已在本機記憶體中的數據。 相反地,它會防止查詢將新數據新增至快取,以及從快取讀取數據。