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引擎)