優化性能和緩存數據磚
磚使用磁盤緩存來加快創建遠程鋪數據的副本文件讀取的數據節點的本地存儲中間數據格式使用快。數據緩存自動當一個文件從遠程獲取。連續讀取相同的數據然後在本地執行,從而顯著提高閱讀速度。緩存適用於所有鋪數據文件(包括三角洲湖表)。
自動和手動緩存
磚磁盤緩存不同於Apache火花緩存。磚建議使用自動磁盤緩存對於大多數操作。
當啟用了磁盤高速緩存,數據需要從遠程數據源獲取自動添加到緩存中。這個過程是完全透明,不需要任何行動。然而,事先預加載數據到緩存,您可以使用緩存選擇
命令(見緩存數據的一個子集)。當你使用火花緩存,您必須手動指定緩存表和查詢。
遠程數據的磁盤高速緩存包含本地副本。它可以提高廣泛的查詢的性能,但不能用於存儲任意子查詢的結果。火花緩存可以存儲任何子查詢的結果數據和數據存儲在拚花以外的其他格式(如CSV、JSON和獸人)。
磁盤緩存中存儲的數據可以讀取和操作速度比火花緩存中的數據。這是因為磁盤緩存使用高效的壓縮算法和最優輸出數據格式使用舞台代碼生成進行進一步的處理。
與火花緩存,磁盤緩存不使用係統內存。由於現代ssd的閱讀速度,較高的磁盤緩存可以完全於磁盤上沒有對其性能產生負麵影響。
總結
下表總結了關鍵差異磁盤和Apache火花緩存,這樣你可以選擇最好的工具來你的工作流程:
功能 |
磁盤高速緩存 |
Apache火花緩存 |
---|---|---|
存儲為 |
一個工人節點上本地文件。 |
內存塊,但這取決於存儲水平。 |
應用於 |
任何拚花表存儲在S3,沛富和其他文件係統。 |
任何DataFrame或抽樣。 |
觸發 |
自動,第一次讀到(如果啟用了緩存)。 |
手動,需要更改代碼。 |
評估 |
懶洋洋地。 |
懶洋洋地。 |
力緩存 |
|
|
可用性 |
與配置旗幟,可以啟用或禁用默認啟用特定節點類型。 |
總是可用的。 |
驅逐 |
自動在LRU時尚或任何文件變化,手動重新啟動集群。 |
自動在LRU時尚,手動 |
使用磁盤緩存
推薦使用磁盤緩存(簡單的)方法是選擇一個工人類型與SSD卷當你配置集群。這些工人是磁盤緩存啟用和配置。
磁盤緩存配置為使用最多一半的可用空間在本地工人提供的ssd節點。配置選項,請參閱配置磁盤高速緩存。
緩存數據的一個子集
顯式地選擇一個子集的數據緩存,使用下麵的語法:
緩存選擇column_name(,column_name,…]從(db_name)table_name(在哪裏boolean_expression]
您不需要使用該命令磁盤高速緩存的正常工作(數據將首次訪問時自動緩存)。但是它是很有用的,當你需要一致的查詢性能。
例子和更多的細節,請參閱
磚運行時7。x,上圖:緩存選擇
配置磁盤高速緩存
磚建議你選擇cache-accelerated工人實例類型為您的集群。這種情況下會自動配置優化磁盤高速緩存。
請注意
當工人退役,火花緩存存儲在職工失去。如果啟用了自動定量,有一些不穩定的緩存。火花會根據需要從源代碼需要重讀丟失的分區。
配置磁盤使用情況
配置磁盤緩存如何使用工作節點的本地存儲,指定以下火花配置設置集群創建期間:
spark.databricks.io.cache.maxDiskUsage
:每個節點的磁盤空間用於緩存數據字節spark.databricks.io.cache.maxMetaDataCache
:每個節點的磁盤空間用於緩存元數據字節spark.databricks.io.cache.compression.enabled
:緩存的數據應該存儲在壓縮格式
示例配置:
spark.databricks.io.cache.maxDiskUsage50gspark.databricks.io.cache.maxMetaDataCache1gspark.databricks.io.cache.compression.enabled假