Spark SQL效能調優(Spark2.3.2)
阿新 • • 發佈:2018-12-19
對於某些工作負載,可以通過在記憶體中快取資料或開啟一些實驗選項來提高效能。
1.在記憶體中快取資料
Spark SQL可以通過呼叫spark.catalog.cacheTable("tableName")或dataFrame.cache()使用記憶體中的列式格式來快取表。然後,Spark SQL將僅掃描所需的列,並自動調整壓縮以最小化記憶體使用和GC壓力。您可以呼叫spark.catalog.uncacheTable("tableName")從記憶體中刪除表。
可以通過SparkSession使用SQL setConf上的方法或通過SQL命令列使用SET key=value來完成記憶體中快取的配置
2.其他配置選項
以下選項也可用於調整查詢執行的效能。由於更多優化會自動執行,因此在將來的版本中可能會棄用這些選項。
3.SQL查詢的Broadcast Hint
當表之間進行join時,Broadcast Hint會指導spark廣播某個具體的表,當Spark決定join方式的時,會優先使用
broadcast hash join(BHJ),即便是統計資訊(statistics,衡量表的大小)超過spark.sql.autoBroadcastJoinThreshold
配置的閾值(預設10M)。當join的兩張表確定時,Spark會廣播統計資訊(statistics)較小的那張表(小表)。注意,Spark並不是總是選擇BHJ的join方式,因為並不是所有的情況(比如全連線)都支援BHJ。當選擇廣播巢狀迴圈join時,我們仍然遵循提示(Broadcast Hint)。
import org.apache.spark.sql.functions.broadcast
broadcast(spark.table("src")).join(spark.table("records"), "key").show()