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

spark2 submit Spark sql脚本并行度调优

        • 疑问:关于spark.default.parallelism
        • 现象 :每个executor所分配的core小于active task的数量
        • 解决:指定spark.sql.shuffle.partitions数量

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

疑问:关于spark.default.parallelism

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

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

【Spark2参数调优】submit Spark sql脚本并行度调优_第1张图片
搞这一行的都明白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脚本中设定这一参数,像这样直接写入脚本中:
【Spark2参数调优】submit Spark sql脚本并行度调优_第2张图片
最终的结果当然很愉快,终于能随心所欲地控制任务执行并发了!

你可能感兴趣的:(Spark,sql参数调优)