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

e4eetjau  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(739)

两者有什么区别 spark.sql.shuffle.partitions 以及 spark.default.parallelism ?
我试着把他们两个都安排好了 SparkSQL ,但第二阶段的任务号始终为200。

sc4hvdpw

sc4hvdpw1#

从这里的答案来看, spark.sql.shuffle.partitions 配置为联接或聚合洗牌数据时使用的分区数。 spark.default.parallelism 中的默认分区数 RDD 通过如下转换返回 join , reduceByKey ,和 parallelize 当用户未明确设置时。请注意 spark.default.parallelism 似乎只对生肉有用 RDD 在处理Dataframe时忽略。
如果您正在执行的任务不是联接或聚合,并且您正在使用Dataframe,那么设置这些将不会有任何效果。但是,您可以通过调用 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
ioekq8ef

ioekq8ef2#

parallelism是spark设置的默认分区数,默认为200。如果您想增加分区数,那么可以应用spark.sql.shuffle.partitions属性在spark配置中或在运行spark sql时设置分区数。
通常这个spark.sql.shuffle.partitions在内存阻塞时使用,我们看到下面的错误:sparkerror:java.lang.illegalargumentexception:大小超过integer.max\u值
因此,您可以将分区分配为每个分区256MB,您可以使用它为进程设置。
另外,如果分区数接近2000,则将其增加到2000以上。因为spark为分区<2000和>2000应用了不同的逻辑,这将通过减少内存占用来提高代码性能,因为如果>2000,数据默认值将被高度压缩。

相关问题