Spark3每个job之间任务间隔过长

公司的跑批引擎从impala改成Spark3已经有一个多月了。
不得不说,跑批稳定了好多。资源控制有相对稳定了很多。Spark3比CDH的hive on spark2.4.0要快不少。AQE和CBO真的挺强的。但是使用中发现了一个很奇怪的事情。这个问题在网上搜过,并没有实际解决。

当然我的这个帖子只是记录问题以及解决问题,具体原理没有深挖(太忙了没时间深挖)。

我这边有个很简单的SQL。

我有7个表 A,B,C,D,E,F,G

每个表的分区是省会,比如 河南、吉林、北京...等等

select * from 
A LEFT JOIN B
ON A.id=B.id and A.region=B.region
LEFT JOIN C
ON B.id=C.id and B.region=C.region
........

很简单的SQL,正常来(忽略数据量)说应该很快执行完。但是执行的时候却发现

Spark3每个job之间任务间隔过长_第1张图片

 每个job执行都很快,但是每个job执行完,会间隔好几分钟。再执行下一个。

因为网络原因,没办法看到详细 stage的log日志。这可难为坏我了。

查看执行计划太长了。实在是看不下去。

全部任务执行下来跑了俩多小时。

实在无奈,先看看如何优化吧。调整参数AQE啊啥的。没效果。

那么只能从SQL上进行优化了。这时候又犯了难了。这丫的也不算数据倾斜啊。

然后按照正常的思路进行异常排查。发现了问题

我有15个省会大区。

当我执行

select * from A where region in('henan','beijing'....各大区)
left join B
.....

他就不会出现每个job之间的间隔。

Spark3每个job之间任务间隔过长_第2张图片

 因为可能未来涉及到增加省会大区。我直接改成

select * from A where region <> 1
left join B
.....

逻辑上执行效果和指定省会大区一样的。

最终优化后的SQL,从执行两个半小时,变成了5分钟跑完。

你可能感兴趣的:(Spark,hive,hadoop,大数据,spark)