HiveSQL脚本耗时长问题排查
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引擎)