HiveSQL脚本耗时长问题排查

发布时间 2023-12-22 10:46:30作者: 人不疯狂枉一生

1.背景

    底层引擎采用的是Tez,为了快速定位自己的脚本是哪一段性能较差,首先需要在脚本里面设置脚本名称,命令如下:

set tez.job.name=dws_contract_detail_info_s_d;

    这是我的一个例子,设置好名称后,开始执行脚本,等脚本执行完成后就可以开始排查问题。

2.定位步骤

(1)访问yarn的日志界面,然后点击finish,最后在检索上面设置的脚本名称。

 

图1

(2)点击history,查看日志,通过图3可以看到每一段SQL的耗时情况。

 

(3)点击DagName下面的名称,查看具体哪一段SQL,如图4。

 

 (4)查看每个操作的相关耗时情况,发现3个map有一个耗时明细比其他两个长,说明有数据倾斜的情况。

 (5)使用explain查看SQL执行计划,查看有几个阶段,是否有广播,扫描的数据量情况等。本次SQL在进行join时过滤条件有点问题。

 

(6)也可以点击图5的view进行详细日志查看。

 

 

3.结论

    添加防止数据倾斜的参数,并且优化了一下子查询。

SET hive.optimize.skewjoin=true;(MapReduce引擎)

SET tez.join.skewjoin=true;(Tez引擎)