11.15 Spark性能優化(6)——提高並行度

Spark性能優化(6)——提高並行度

一、spark的並行度是什麼

spark並行度: spark作業中,各個stage的task的數量,也就代表了spark作業在各個階段stage的並行度,!

當分配完所能分配的最大資源了,然後,對應資源去調節程序的並行度,如果並行度沒有雨資源相匹配,那麼導致你分配下去的資源都浪費掉了。 同時,並行運行,還可以讓每個task要處理的數量變少(很簡單的原理。合理設置並行度,可以充分利用集群資源,減少每個task處理數據量,而增加性能加快運行速度)

Spark性能優化(6)——提高並行度

二、如何去提高並行度

(1)task數量,至少設置成與spark Application 的總cpu core 數量相同。 官方推薦,task數量,設置成spark Application 總 cpu core 數量的2 ~ 3 倍,比如:150個cpu core ,基本設置task數量為 300~500,。儘量讓cpu core不要空閒,同時儘量提升spark運行效率和速度。提升性能。

(2)設置一個Spark Application 的並行度

spark.default.parallelism 默認是沒有值的,如果設置了值,比如10,是在shuffle的過程才會起作用,(val rdd2 = rdd1.reduceByKey(+) //rdd2的分區數就是10,rdd1的分區數不受這個參數的影響)

new SparkConf().set(“spark.defalut.parallelism”,"500")

(3)如果讀取的數據在HDFS上,增加block數,默認情況下split與block是一對一的,而split又與RDD中的partition對應,所以增加了block數,也就提高了並行度。

(4)RDD.repartition,給RDD重新設置partition的數量

(5)reduceByKey的算子指定partition的數量

val rdd2 = rdd1.reduceByKey(_+_,10)
val rdd3 = rdd2.map.filter.reduceByKey(_+_)

(6)val rdd3 = rdd1.join(rdd2) : rdd3裡面partiiton的數量是由父RDD中最多的partition數量來決定,因此使用join算子的時候,增加父RDD中partition的數量。

(7)spark.sql.shuffle.partitions //spark sql中shuffle過程中partitions的數量

Spark性能優化(6)——提高並行度


分享到:


相關文章: