Spark Sql 性能調優

對於某些工作負載,可以通過在內存中緩存數據或打開一些實驗選項來提高性能。

在內存中緩存數據

Spark SQL可以通過調用spark.catalog.cacheTable(“tableName”)或使用內存中的列式格式來緩存表.dataFrame.cache()。然後,Spark SQL將僅掃描所需的列,並自動調整壓縮以最小化內存使用和GC壓力。可以調用spark.catalog.uncacheTable(“tableName”)從內存中刪除表。

spark.sql.inMemoryColumnarStorage.compressed 設置爲true時,Spark SQL將根據數據統計信息自動爲每列選擇壓縮編解碼器。
spark.sql.inMemoryColumnarStorage.batchSize 10000 控制柱狀緩存的批次大小。較大的批處理大小可以提高內存利用率和壓縮率,但在緩存數據時會產生OOM風險。
其他配置選項

以下選項也可用於調整查詢執行的性能。由於會自動執行更多優化,因此可能會在將來的版本中棄用這些選項。
物業名稱 默認 含義

spark.sql.files.maxPartitionBytes 134217728(128 MB) 讀取文件時打包到單個分區的最大字節數。
spark.sql.files.openCostInBytes 4194304(4 MB) 可以在同一時間掃描通過字節數測量的打開文件的估計成本。將多個文件放入分區時使用。最好過度估計,然後使用較小文件的分區將比具有較大文件的分區(首先安排的分區)更快。
spark.sql.broadcastTimeout 300 廣播連接中廣播等待時間的超時(以秒爲單位)
spark.sql.autoBroadcastJoinThreshold 10485760(10 MB) 配置在執行連接時將廣播到所有工作節點的表的最大大小(以字節爲單位)。通過將此值設置爲-1,可以禁用廣播。請注意,目前只有ANALYZE TABLE COMPUTE STATISTICS noscan運行該命令的Hive Metastore表支持統計信息 。
spark.sql.shuffle.partitions 200 配置爲連接或聚合數據移動數據時要使用的分區數。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章