一、【关于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 // sparkSQL中shuffle过程中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