【Spark2参数调优】submit Spark sql脚本并行度调优

探讨SparkSQL中spark.default.parallelism参数的误区,及如何通过设置spark.sql.shuffle.partitions来有效控制并行度,提升任务执行效率。

  • 都说程序员不配享受生活,最近几个月一直在吃“两条线”,白天挖焦煤,晚上扒火车,真是比铁道游击队还苦逼!
疑问:关于spark.default.parallelism

我在做Spark sql submit脚本参数调优的时候曾寄希望于spark.default.parallelism这个参数,直到看到大量的core被闲置,才明白这个参数是无效的(对于spark sql来说)。

现象 :每个executor所分配的core小于active task的数量

在这里插入图片描述
搞这一行的都明白task并行度是提高t任务执行效率的关键,在长期的观测中,我发现ETL调度执行过程中存在3个core对应一个active task的现象,也就是说,对于Spark sql任务来说,spark.default.parallelism这个参数是无用的,那么该怎样控制Spark sql任务并行度呢?

解决:指定spark.sql.shuffle.partitions数量

没错,spark.sql.shuffle.partitions才是决定Spark sql执行并行度的关键,原因在于:

  • spark.default.parallelism这个参数是在处理RDD时才会起作用的,对Spark sql来说是无效的。
  • 针对Spark sql任务,则是专门提供了spark.sql.shuffle.partitions这样的参数来控制并行度。

举个例子:
spark2-submit xxxxxx --conf spark.sql.shuffle.partitions=1000 xxxxxxxxxx
这里就是设置了Spark sql任务并行度为1000,当然,我们也可以在Spark sql脚本中设定这一参数,像这样直接写入脚本中:
在这里插入图片描述
最终的结果当然很愉快,终于能随心所欲地控制任务执行并发了!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值