Spark性能調優總結

  1、Spark調優背景

目前Zeppelin已經上線一段時間,Spark作爲底層SQL執行引擎,需要進行整體性能調優,來提高SQL查詢效率。本文主要給出調優的結論,因爲涉及參數很多,故沒有很細粒度調優,但整體調優方向是可以得出的。

環境:服務器600+,spark 2.0.2,Hadoop 2.6.0

2、調優結果

調優隨機選取線上9條SQL,表橫軸是調優測試項目,測試在集羣空閒情況下進行,後一個的測試都是疊加前面測試參數。從數據可參數經過調優,理想環境下性能可提高50%到300%

3、 下面爲調優分享PPT

1)一圖概覽

這裏寫圖片描述

2) Spark集羣優化——數據本地性

這裏寫圖片描述

3)Spark集羣優化——存儲格式選擇

這裏寫圖片描述

4)Spark參數優化——計算資源

這裏寫圖片描述

5) Spark參數優化——並行度

這裏寫圖片描述

6)Spark參數優化——offheap內存

這裏寫圖片描述

7)Spark參數優化——大小表join

這裏寫圖片描述

8)Spark參數優化——其他

這裏寫圖片描述

9) Spark參數優化——shuffle過程

這裏寫圖片描述

10)Spark代碼優化——RDD複用

這裏寫圖片描述

11)Spark代碼優化——選擇合適算子

這裏寫圖片描述

12) Spark代碼優化——shuffle算子並行度調優

這裏寫圖片描述

13)Spark代碼優化——數據傾斜

這裏寫圖片描述

14)Spark代碼優化——優化數據結構

這裏寫圖片描述

15)Spark代碼優化——使用DateSet API

這裏寫圖片描述

16)Spark代碼優化——使用DateSet API

這裏寫圖片描述

17) 目前Spark的瓶頸——內存

這裏寫圖片描述

18) 目前Spark的瓶頸——內存

這裏寫圖片描述

3、總結

調優參數雖名目多樣,但最終目的是提高CPU利用率,降低帶寬IO,提高緩存命中率,減少數據落盤。 
不同數據量的最優參數都不相同,調優目的是讓參數適應數據的量級以最大程度利用資源,經調優發現並不是所有參數有效,有的參數的效果也不明顯,最後折中推薦如下調優參數以適應絕大多數SQL情況,個別SQL需要用戶單獨調參優化。(以下參數主要用於Spark Thriftserver,僅供參考)

參數含義默認值調優值
spark.sql.shuffle.partitions併發度200800
spark.executor.overhead.memoryexecutor堆外內存512m1.5g
spark.executor.memoryexecutor堆內存1g9g
spark.executor.coresexecutor擁有的core數13
spark.locality.wait.process進程內等待時間33
spark.locality.wait.node節點內等待時間38
spark.locality.wait.rack機架內等待時間35
spark.rpc.askTimeoutrpc超時時間101000
spark.sql.autoBroadcastJoinThreshold小表需要broadcast的大小閾值1048576033554432
spark.sql.hive.convertCTAS創建表是否使用默認格式falsetrue
spark.sql.sources.default默認數據源格式parquetorc
spark.sql.files.openCostInBytes小文件合併閾值41943046291456
spark.sql.orc.filterPushdownorc格式表是否謂詞下推falsetrue
spark.shuffle.sort.bypassMergeThresholdshuffle read task閾值,小於該值則shuffle write過程不進行排序200600
spark.shuffle.io.retryWait每次重試拉取數據的等待間隔530
spark.shuffle.io.maxRetries拉取數據重試次數310

如果覺得文章有什麼值得討論的歡迎來討論,如果覺得文章不錯,也希望點個贊作爲對我的支持。

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