spark并行度(parallelism)和分区(partition)未生效的问题

Spark的性能关键在于内存计算和并行计算,其中并行度与HDFS的Block数量、数据库分区设置、`spark.default.parallelism`以及`spark.sql.shuffle.partitions`相关。默认并行度通常设置为executor数量的2到3倍,但仅在shuffle操作时生效,如reduceByKey或SQL中的join、group。未shuffle的SQL语句不会受影响。合理设置并行度有助于解决数据倾斜问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark的并行度对spark的性能是又很大的影响的,spark任务能快速计算主要就是因为内存计算和并行计算。
对于并行计算,我们就要涉及到并行度的问题,那并行度跟什么有关系呢?

  1. 源数据
  • hdfs文件
    读取hdfs文件的时候是跟block块相关的,有几个 block就有几个分区去执行任务。
  • 数据库
    数据库是可以设置分区读取数据的(见文章:spark分区读取数据库
    在此设置几个分区读取数据库,就会产生几个分区执行后续的任务。
  1. spark.default.parallelism
    设置rdd默认的并行度,这个参数要是不设置的话默认是200。
    正常设置的大小为spark任务申请的总core的2到3倍,即num-excutor*excuor_cores*(2 or 3)
    但是这个参数不会在rdd计算的时候就会生效,比如rdd.map(x => x.mkString(,))
    只有遇到shuffle的时候才会生效,比如rdd.reduceByKey(_+_)
  2. spark.sql.shuffle.partitions,这个时候就不会生效。
    设置sparksql默认的并行度,可以一定程度解决数据倾斜的问题。
    但是跟parallelism类似,也是要遇到shuffle的时候才会生效,比如join、group…
    如果只是遇到未shuffl的sql语句,是不会生效的。
spark并行度shuffle并行度Spark中两个重要的概念。 spark并行度是指在Spark作业中同时执行的任务数量。它由spark.default.parallelism参数控制,默认值为CPU核心数。可以通过设置该参数来调整并行度,以便更好地利用集群资源。 shuffle并行度是指在进行shuffle操作时,数据被划分为多个分区并在不同的节点上进行处理的能力。它由spark.sql.shuffle.partitions参数控制,默认值为200。可以通过设置该参数来调整shuffle操作的并行度,以便更好地平衡负载提高性能。 spark.sql.shuffle.partitionsspark.default.parallelism的区别在于它们的作用范围影响对象。spark.default.parallelism是全局参数,影响整个Spark应用程序的并行度。而spark.sql.shuffle.partitions是针对Spark SQL中的shuffle操作的参数,只影响与shuffle相关的操作的并行度。 设置spark.sql.shuffle.partitionsspark.default.parallelism的值可以根据具体的需求进行调整。一般来说,可以根据数据量、集群规模任务复杂度等因素来决定并行度的设置。较大的并行度可以提高作业的执行速度,但也会增加资源消耗。较小的并行度可以减少资源消耗,但可能导致作业执行时间较长。 总结起来,spark并行度是指整个Spark应用程序的任务并行度,而shuffle并行度是指shuffle操作的并行度。可以通过调整spark.default.parallelismspark.sql.shuffle.partitions的值来优化Spark作业的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值