Pyspark的效能調校將會分為四的主題說明
今天主要會從參數調校來做闡述,開始囉
我們就來講解一些常用的PySpark資源配置的參數吧,了解其參數原理便於我們依據實際的資料狀況進行配置。
這邊指的是executor的數量,代表著並行的satge的數量(還記得Pyspark是分散式系統吧),但也不是越多越好,跟你Cluster的數量大有關係,通常會根據Cluster的數量去進行配置,詳細的配製方法可以參考這篇,雖然是對岸的文章,不過我認為對了解num-executors很有幫助。
這個參數就是決定每個executor分配的記憶體量,這個參數可以利用sparkConf的物件做設定,記憶體越大當然對程式的運作會越好,不過也要考慮到cluster的總量限制,假設我們群集資源為500core,一般1core配置4G記憶體,所以群集最大的記憶體資源只有2000G左右。
所以 num-executors x executor-memory<=2000G
通常我們也不會設定到maxinum,所以一般我們設定4G-8G之間。
他可以有2種設定的方式
('spark.executor.memory','4g')
('spark.dynamicAllocation','enabled')
from pyspark import SparkConf, SparkContext
conf = SparkConf().setAll([('spark.executor.memory','4g'),('spark.dynamicAllocation','enabled'),])
sc = SparkContext(conf=conf)
這個參數就是指你的executor的CPU core數量,更多core意味著可以執行更多平行運算。但是,過多的core可能會導致 CPU 調度問題。一個好的經驗法則是將其設定為computer上的核心數。
from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.set("spark.executor.cores", "2")
sc = SparkContext(conf=conf)
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)
調整讀取資料/寫入資料的使用資源分佈比例,可以幫助你調整資源的使用及釋放
from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.set('spark.memory.storageFraction','0.3')
sc = SparkContext(conf=conf)
以上是一些關於pyspark的參數調整方式,可以用來調整最有效率的資源應用方式,當你在遇到大量資料時,無法順利的執行處理資料時使用,當有遇到資源不足的的問題時可以試著調整看看,或許你會發現新世界!
如果有任何不理解、錯誤或其他方法想分享的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱!
我是 Vivi,一位在雲端掙扎的資料工程師!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium,期待與您的相遇!】