spark.sql.shuffle.partitions和spark.default.parallelism有什么区别?

问题描述 投票:45回答:1

spark.sql.shuffle.partitionsspark.default.parallelism有什么区别?

我试图在SparkSQL中设置它们,但第二阶段的任务编号总是200。

performance apache-spark hadoop apache-spark-sql bigdata
1个回答
59
投票

here的答案中,spark.sql.shuffle.partitions配置在为连接或聚合重排数据时使用的分区数。

spark.default.parallelismRDD中的默认分区数,如joinreduceByKeyparallelize等转换时未由用户明确设置。请注意,spark.default.parallelism似乎只适用于原始RDD,在使用数据帧时会被忽略。

如果您正在执行的任务不是连接或聚合,并且您正在使用数据框,那么设置这些将不会产生任何影响。但是,您可以通过在代码中调用df.repartition(numOfPartitions)(不要忘记将其分配给新的val)来自行设置分区数。


要更改代码中的设置,您只需执行以下操作:

sqlContext.setConf("spark.sql.shuffle.partitions", "300")
sqlContext.setConf("spark.default.parallelism", "300")

或者,您可以在使用spark-submit将作业提交到群集时进行更改:

./bin/spark-submit --conf spark.sql.shuffle.partitions=300 --conf spark.default.parallelism=300

0
投票

spark.default.parallelism是spark设置的默认分区数,默认为200.如果你想增加分区数,你可以应用属性spark.sql.shuffle.partitions来设置分区数。 spark配置或运行spark SQL时。

通常这个spark.sql.shuffle.partitions在我们遇到内存拥塞时被使用,我们在下面看到错误:spark error:java.lang.IllegalArgumentException:Size超过Integer.MAX_VALUE

所以设置你的可以为每个分区分配256 MB的分区,并且可以用来为你的进程设置分区。

如果分区数接近2000,则将其增加到2000以上。由于spark为分区<2000和> 2000应用了不同的逻辑,这将通过减少内存占用来提高代码性能,因为如果> 2000,数据默认值将被高度压缩。

© www.soinside.com 2019 - 2024. All rights reserved.