緩存數據
我們都知道一些計算中間的數據集可以進行緩存,緩存到內存中明顯要比磁盤中速度要快,Spark SQL可以通過調用spark.catalog.cacheTable(“tableName”)或者df.cache()來使用內存緩存表,然后spark會只掃描需要的列并自動壓縮來減少內存和GC使用,可以調用spark.catalog.uncacheTable(“tableName”)從內存中刪除該表。
1.1 緩存中的配置如下:
spark.sql.inMemoryColumnarStorage.compressedd(默認值為true),設置為true時spark sql會默認的為數據選擇壓縮方式。
Spark.sql.inMemoryColumnarStorage.batchSize(默認值為10000),意思是可以為列緩存設置最大批大小,設置的大可以提高內存利用率和壓縮,但是也有可能導致內存溢出。
1.2 緩存中的配置可以通過創建sparkSession時候進行配置,使用方法如下:
SQL查詢配置選項
數據傾斜
SQL查詢任務時數據傾斜會嚴重影響查詢速度,數據傾斜就是某個分區數據嚴重大于其他分區數據,整個任務執行速度是以執行最慢的分區決定,從一開始我們就應該避免數據傾斜的情況產生,如果真的產生了,可以通過將發生數據傾斜的任務拆分成多個任務。
前提是先進行如下配置:
這樣spark會動態的將傾斜任務進行拆分。
如果一個分區數據大于spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes(默認為256M)且大于spark.sql.adaptive.skewJoin.skewedPartitionFactor(因子默認是5)×中位值分區大小,那么就認為該分區產生了數據傾斜。
總 結
在實際使用中,如果遇到需要多次使用的數據集,為了提高效率,我們可以將這些中間數據集緩存到內存中。
如果數據量比較大的時候我們可以根據實際情況進行相應的一些優化項的設置,數據傾斜非常影響數據的查詢速度,最好的辦法就是避免數據傾斜的產生,這就需要我們指定合理的分區策略,如果真產生了數據傾斜我們可以通過上面的方法進行適當的優化。
end
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129644.html
摘要:過程中,各個節點上的相同都會先寫入本地磁盤文件中,然后其他節點需要通過網絡傳輸拉取各個節點上的磁盤文件中的相同。因此在過程中,可能會發生大量的磁盤文件讀寫的操作,以及數據的網絡傳輸操作。Spark系列面試題 Spark面試題(一) Spark面試題(二) Spark面試題(三) Spark面試題(四) Spark面試題(五)——數據傾斜調優 Spark面試題(...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20