spark sql性能如何提升

本文探讨了影响Spark SQL性能的关键因素,包括动态谓词下推、动态join策略选择和动态并行度调整。指出静态执行计划可能导致并行度不合适和join策略不当,提出Spark 3.0的AQE(Adaptive Query Execution)作为解决方案,以及手动指定Partitioning Hints以优化性能。同时,举例说明了动态谓词下推的重要性,并警告在某些情况下可能无法成功。请注意,这些特性主要适用于Spark 3.0及更高版本。
摘要由CSDN通过智能技术生成

背景

数仓写多最多的就是sql,作为一个资深的sql工程师,sql性能是很重要的。以我个人经验来说有几个影响sql性能的问题

  • 动态谓词下推
  • 动态join策略选择
  • 动态并行度

解释一下

hive或者是其他的,都是利用静态的tableA和tableB的统计数据(数据量),生成执行计划,然后直接执行
这将出现一些问题。

比如:

  • 并行度可能出现问题.
    按照执行计划给定的并行度(比较粗犷,比如200),这会导致两个极端,我的sql经过过滤之后,一共就1条数据,然后还傻乎乎的去启动200个任务,另外一个极端就是处理20亿数据,一共就给200个task。这种并行度就不太合适,需要一个动态调整的并行度的工具,在spark3.0出现了这个工具,叫做aqe,具体可以大家去官网看看。还有另外一种就是手工指定,也叫作Partitioning Hints
  • join策略也可能出现问题
    熟悉spark sql的话,了解spark的4中join策略,分别为broadcast,shuffle hash,merge sort,SHUFFLE_REPLICATE_NL
    因为静态生成的执行计划,是比较死板的,无法确定后续经过筛选之后数据量有多少,所以执行的策略可能就不太合适,比如还是上面那个例子,筛选之后就只剩你下1条,但是老版本的spark sql还是会傻乎乎的走性能最差的merge sort ,而不是走性能更好的broadcast或者是shuffle hash,如果大家对shuffle hash想
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值