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.
可能是什么原因?
感谢。
答案 0 :(得分:4)
spark.default.parallelism
默认为所有计算机上所有核心的数量。 parallelize api没有父RDD来确定分区数,因此它使用spark.default.parallelism
。
运行spark-submit
时,您可能在本地运行它。尝试使用与执行spark-shell相同的启动配置提交spark-submit
。
从文档中拉出来:
spark.default.parallelism
对于reduceByKey
和join
等分布式shuffle操作,父RDD中的分区数最多。对于没有父RDD并行化的操作,它取决于集群管理器:
本地模式:本地计算机上的核心数
Mesos细粒度模式:8
其他:所有执行程序节点上的核心总数或2,以较大者为准
由join
,reduceByKey
等转换返回的RDD中的默认分区数,以及未由用户设置时的并行化。