并行化的spark.default.parallelism对于spark提交,RDD默认为2

时间:2016-02-13 19:17:01

标签: scala apache-spark

Spark独立集群,每个worker上有一个master和2个worker节点4 cpu core。所有员工共计8个核心。

通过spark-submit运行以下命令时(未设置spark.default.parallelism)

val myRDD = sc.parallelize(1 to 100000)
println("Partititon size - " + myRDD.partitions.size)
val totl = myRDD.reduce((x, y) => x + y)
println("Sum - " + totl)

它为分区大小返回值2.

通过连接到spark独立集群使用spark-shell时,相同的代码返回正确的分区大小8.

可能是什么原因?

感谢。

1 个答案:

答案 0 :(得分:4)

spark.default.parallelism默认为所有计算机上所有核心的数量。 parallelize api没有父RDD来确定分区数,因此它使用spark.default.parallelism

运行spark-submit时,您可能在本地运行它。尝试使用与执行spark-shell相同的启动配置提交spark-submit

从文档中拉出来:

spark.default.parallelism

对于reduceByKeyjoin等分布式shuffle操作,父RDD中的分区数最多。对于没有父RDD并行化的操作,它取决于集群管理器:

  

本地模式:本地计算机上的核心数

     

Mesos细粒度模式:8

     

其他:所有执行程序节点上的核心总数或2,以较大者为准

joinreduceByKey等转换返回的RDD中的默认分区数,以及未由用户设置时的并行化。