在Databricks上使用緩存優化性能

Databricks使用磁盤緩存在節點的本地存儲中使用快速中間數據格式創建遠程Parquet數據文件的副本,從而加速數據讀取。每當需要從遠程位置獲取文件時,數據都會自動緩存。然後在本地執行對相同數據的連續讀取,從而顯著提高了讀取速度。緩存適用於所有Parquet數據文件(包括Delta Lake表)。

增量緩存重命名為磁盤緩存

Databricks上的磁盤緩存以前被稱為Delta緩存和DBIO緩存。磁盤緩存行為是Databricks的專有特性。這一名稱更改旨在解決它是三角洲湖協議的一部分的混淆。行為在此重命名後保持不變,並在下麵進行描述。

自動和手動緩存

Databricks磁盤緩存與Apache Spark緩存不同。Databricks建議對大多數操作使用自動磁盤緩存。

當磁盤緩存被啟用時,需要從遠程數據源獲取的數據會自動添加到緩存中。這個過程是完全透明的,不需要任何行動。但是,要預先將數據預加載到緩存中,可以使用緩存選擇命令(見緩存數據的子集).使用Spark緩存時,必須手動指定要緩存的表和查詢。

磁盤緩存包含遠程數據的本地副本。它可以提高大量查詢的性能,但不能用於存儲任意子查詢的結果。Spark緩存可以存儲任何子查詢數據的結果,以及以非Parquet格式(如CSV、JSON和ORC)存儲的數據。

磁盤緩存中的數據比Spark緩存中的數據具有更快的讀取和操作速度。這是因為磁盤緩存使用高效的解壓縮算法,並以最佳格式輸出數據,以便使用全階段代碼生成進行進一步處理。

與Spark緩存不同,磁盤緩存不使用係統內存。由於現代ssd的高速讀取速度,磁盤緩存可以完全駐留在磁盤上,而不會對其性能產生負麵影響。

總結

下表總結了磁盤和Apache Spark緩存之間的主要區別,以便您為您的工作流程選擇最佳的工具:

功能

磁盤高速緩存

Apache火花緩存

存儲為

工作節點上的本地文件。

內存中塊,但它取決於存儲級別。

應用於

存儲在S3、ABFS和其他文件係統上的任何Parquet表。

任何數據幀或RDD。

觸發

第一次讀取時自動執行(如果啟用了緩存)。

手動,需要代碼更改。

評估

懶洋洋地。

懶洋洋地。

力緩存

緩存選擇命令

.cache+任何操作來物化緩存和.persist

可用性

可以通過配置標誌啟用或禁用,在某些節點類型上默認啟用。

總是可用的。

驅逐

在LRU方式下自動或在任何文件更改時自動,在重新啟動集群時手動。

自動在LRU時尚,手動與unpersist

磁盤高速緩存一致性

當數據文件被創建、刪除、修改或覆蓋時,磁盤緩存會自動檢測並相應地更新其內容。您可以寫入、修改和刪除表數據,而不需要顯式地使緩存數據失效。任何過期的條目都將自動失效並從緩存中刪除。

使用磁盤緩存

使用磁盤緩存的推薦(也是最簡單的)方法是,在配置集群時選擇使用SSD卷的工作者類型。為磁盤緩存啟用和配置了此類工作者。

C5d、r5d和z1d係列worker被配置為磁盤緩存,但默認情況下沒有啟用。要啟用緩存,請參見啟用或禁用磁盤緩存

磁盤緩存配置為最多使用工作節點提供的本地ssd上可用空間的一半。有關配置選項,請參見配置磁盤緩存

緩存數據的子集

要顯式選擇要緩存的數據子集,請使用以下語法:

緩存選擇column_name[,column_name…]db_name)table_name在哪裏boolean_expression

要使磁盤緩存正常工作,不需要使用此命令(數據將在第一次訪問時自動緩存)。但是當您需要一致的查詢性能時,它會很有幫助。

有關示例和更多細節,請參見

配置磁盤緩存

Databricks建議您選擇緩存加速工作者實例類型為您的集群。這些實例會自動為磁盤緩存優化配置。

請注意

當一個worker被退役時,存儲在該worker上的Spark緩存將丟失。因此,如果啟用了自動伸縮,緩存就會有一些不穩定性。然後,Spark需要根據需要從源代碼重新讀取丟失的分區。

配置磁盤使用情況

要配置磁盤緩存如何使用工作節點的本地存儲,請指定以下內容火花配置創建集群過程中的設置:

  • spark.databricks.io.cache.maxDiskUsage:每個節點為緩存數據預留的磁盤空間(以字節為單位)

  • spark.databricks.io.cache.maxMetaDataCache:每個節點預留用於緩存元數據(以字節為單位)的磁盤空間

  • spark.databricks.io.cache.compression.enabled:是否以壓縮格式存儲緩存數據

示例配置:

spark.databricks.io.cache.maxDiskUsage 50克spark.databricks.io.cache.maxMetaDataCache 1克spark.databricks.io.cache.compression.enabled假

啟用或禁用磁盤緩存

啟用和禁用磁盤緩存。使用實例

火花相依“spark.databricks.io.cache.enabled”“真|假”

禁用緩存不會導致刪除本地存儲中已經存在的數據。相反,它阻止查詢向緩存中添加新數據和從緩存中讀取數據。