【Spark】|【Spark性能调优】|【设置并行度】|【Spark多配置优先级】|【总结】

一、【关于Spark并行度】


1. 什么是Spark的并行度?

并行度其实就是指的是spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度

2. 官方推荐task的个数?

官方推荐,task数量,设置成spark Application 总cpu core数量的2~3倍 。比如:150个cpu core ,基本设置 task数量为 300~ 500。
【由于task实际处理运行时间不同,不同时结束,当部分task运行完后,空余的cpu core可以用来处理其他task 】

3. new SparkConf().set("spark.defalut.parallelism", "10")

spark.defalut.parallelism】 默认是没有值的,如果设置了值比如说10,是【在shuffle的过程才会起作用】:
  val rdd2 = rdd1.reduceByKey(_+_)   // rdd2的分区数就是 10,rdd1的分区数不受这个参数的影响      

4. spark.sql.shuffle.partitions   //  sparkSQLshuffle过程中partitions的数量,默认值是200

 设置方式(代码): spark.sqlContext.setConf("spark.sql.shuffle.partitions","10")

5. 如果读取的数据在HDFS上,增加block数,默认情况下split与block是一对一的,而split又与RDD中的partition对应,所以增加了block数,也就提高了并行度。

6. RDD.repartition,给RDD重新设置partition的数量 [repartitions 或者 coalesce]

7. reduceByKey的算子指定partition的数量

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

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

8. val rdd3 = rdd1.join(rdd2) rdd3里面partiiton的数量是由父RDD中最多的partition数量来决定,因此使用join算子的时候,增加父RDD中partition的数量。

二、【Spark并行度设置方式】

A)代码中设置:

// RDD shuffle分区数  官方建议每个CPU内核,处理2-3任务。
new SparkConf().set("spark.defalut.parallelism", "10")
// spark sql中shuffle过程中partitions的数量,默认值是200
spark.sqlContext.setConf("spark.sql.shuffle.partitions","500")

B) spark-submit指定:

spark-submit --conf spark.sql.shuffle.partitions=20  --conf  spark.default.parallelism=20


C)配置文件中设置(spark_home/conf/spark-default.conf):

 spark.master                                 spark://master:7077
 spark.default.parallelism               10
 spark.driver.memory                     2g
 spark.serializer                             org.apache.spark.serializer.KryoSerializer
 spark.sql.shuffle.partitions       50B)提交作业时设置:

D)在Spark SQL脚本中指定并行度

å¨è¿éæå¥å¾çæè¿°

【注意】

【1】spark.default.parallelism 只有在处理RDD时才会起作用,对Spark SQL的无效。| 无默认值,设置后才会生效 |设置并行数为CPU内核个数的2~3倍
【2、spark.sql.shuffle.partitions 则是对Spark SQL专用的设置 | 默认值200 

三、【多个Spark配置的优先级】

代码中SparkConf的设置(最高的优先级)   spark-submit --选项  > spark-defaults.conf配置 > spark-env.sh配置 > 默认值

 

【有价值博客】        
Spark性能调优:合理设置并行度
https://blog.csdn.net/leen0304/article/details/78674073
Spark配置参数详解
https://www.cnblogs.com/yangcx666/p/8723826.html
[源码剖析]Spark读取配置.md 

https://github.com/weibin0516/spark-sourcecodes-analysis/blob/master/spark-core/%5B%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%5DSpark%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE.md
Spark源码剖析 spark-sourcecodes-analysis:
https://github.com/weibin0516/spark-sourcecodes-analysis

你可能感兴趣的:(Spark,Spark,性能调优,task并行度,配置读取优先级)