【问题标题】:What is the difference between spark.sql.shuffle.partitions and spark.default.parallelism?spark.sql.shuffle.partitions 和 spark.default.parallelism 有什么区别?
【发布时间】:2018-01-24 01:00:03
【问题描述】:

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

我已经尝试将它们都设置在SparkSQL中,但是第二阶段的任务号总是200。

【问题讨论】:

    标签: performance apache-spark hadoop apache-spark-sql


    【解决方案1】:

    根据答案herespark.sql.shuffle.partitions 配置了在为联接或聚合打乱数据时使用的分区数。

    spark.default.parallelismRDDs 中的默认分区数,当用户未明确设置时,由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
    

    【讨论】:

    • 关于这个数字应该是什么的任何建议......?
    • @CpILL:这取决于您的情况,可以在这里找到更多信息和有用的链接:stackoverflow.com/questions/35800795/…。特别是,Sparkdocumentation on tuning 建议集群中每个 CPU 内核执行 2-3 个任务。
    • 您可以通过节点上的可用内存决定的默认分区数,您可以提供给执行程序。所以这里是简单的公式没有。 of partition =(available RAM in MB)/256 表示每个分区 256MB。
    • 这里有点困惑。 spark.sql.shuffle.partitions 配置用于连接或聚合的分区。然后你说 spark.default.parallelism 用于像 join、reduceByKey 这样的转换。那些连接或聚合不也一样吗?
    • @Shaido 即使我应用这个 --conf spark.sql.shuffle.partitions=300 ,我仍然看到很多阶段正在生成并且其中大多数没有记录,这导致Jave堆OOM异常,这种情况如何处理?
    【解决方案2】:

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

    通常这个 spark.sql.shuffle.partitions 当我们有内存拥塞并且我们看到以下错误时使用它: 火花错误:java.lang.IllegalArgumentException:大小超过 Integer.MAX_VALUE

    因此,将您可以分配的分区设置为每个分区 256 MB,您可以使用它来设置您的进程。

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

    【讨论】:

    • 嗨。有点晚了,但是当分区数高于 2000 时,您是否有任何关于 spark 不同行为的资料(如果可能,请使用 2.1.0 :D)?我什么都找不到。
    • 我之前看到过这个,我能找到的唯一参考是源本身,这里:github.com/apache/spark/blob/…
    猜你喜欢
    • 2021-04-06
    • 2018-11-29
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    相关资源
    最近更新 更多