iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
AI & Data

30天胡搞瞎搞學會pyspark系列 第 27

[ Day 27 ] - Pyspark | Performance - 寫在最後的效能議題 : 參數調校

  • 分享至 

  • xImage
  •  

Pyspark的效能調校將會分為四的主題說明

  1. 開發習慣
  2. 參數調校
  3. 資料傾斜(Skew)
  4. Shuffle
    全文參考學習
    https://umbertogriffo.gitbook.io/apache-spark-best-practices-and-tuning/

今天主要會從參數調校來做闡述,開始囉
我們就來講解一些常用的PySpark資源配置的參數吧,了解其參數原理便於我們依據實際的資料狀況進行配置。

1. num-executors

這邊指的是executor的數量,代表著並行的satge的數量(還記得Pyspark是分散式系統吧),但也不是越多越好,跟你Cluster的數量大有關係,通常會根據Cluster的數量去進行配置,詳細的配製方法可以參考這篇,雖然是對岸的文章,不過我認為對了解num-executors很有幫助。

2. executor-memory

這個參數就是決定每個executor分配的記憶體量,這個參數可以利用sparkConf的物件做設定,記憶體越大當然對程式的運作會越好,不過也要考慮到cluster的總量限制,假設我們群集資源為500core,一般1core配置4G記憶體,所以群集最大的記憶體資源只有2000G左右。
所以 num-executors x executor-memory<=2000G 通常我們也不會設定到maxinum,所以一般我們設定4G-8G之間。

他可以有2種設定的方式

  1. 給定一個固定的大小('spark.executor.memory','4g')
  2. 利用動態分配,也就是說他可以讓Pyspark根據工作量去分配給每個executor的記憶體大小('spark.dynamicAllocation','enabled')
from pyspark import SparkConf, SparkContext
conf = SparkConf().setAll([('spark.executor.memory','4g'),('spark.dynamicAllocation','enabled'),])
sc = SparkContext(conf=conf)

3. executor-cores

這個參數就是指你的executor的CPU core數量,更多core意味著可以執行更多平行運算。但是,過多的core可能會導致 CPU 調度問題。一個好的經驗法則是將其設定為computer上的核心數。

from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.set("spark.executor.cores", "2")

sc = SparkContext(conf=conf)

4. shuffle.partitions (大量資料適用)

defult = 200 修改分區通過spark.sql.shuffle.partitions控制分區數,默認為200,根據shuffle的量以及計算的複雜度適當提高這個值,例如500

from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.set('spark.sql.shuffle.partitions','500')

sc = SparkContext(conf=conf)

5. memory.storageFraction(大量資料適用)

調整讀取資料/寫入資料的使用資源分佈比例,可以幫助你調整資源的使用及釋放

from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.set('spark.memory.storageFraction','0.3')

sc = SparkContext(conf=conf)

結語

以上是一些關於pyspark的參數調整方式,可以用來調整最有效率的資源應用方式,當你在遇到大量資料時,無法順利的執行處理資料時使用,當有遇到資源不足的的問題時可以試著調整看看,或許你會發現新世界!

如果有任何不理解、錯誤或其他方法想分享的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱!

我是 Vivi,一位在雲端掙扎的資料工程師!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium,期待與您的相遇!】


上一篇
[ Day 26 ] - Pyspark | Performance - 寫在最後的效能議題 : 開發習慣
下一篇
[ Day 28 ] - Pyspark | Performance - 寫在最後的效能議題 : 資料傾斜(Skew)
系列文
30天胡搞瞎搞學會pyspark30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言