hive 由於distcp導致執行sql慢
阿新 • • 發佈:2020-11-12
HDP version: 3.x
1、hive執行sql慢
- 執行sql
hive通過Tez引擎執行如下的sql語句:
insert overwrite select ....
整個執行過程消耗十分鐘左右,平時任務2-3分鐘可以完成,可以明顯看到,任務排程出現問題了。
- 分析
上述的sql語句對應兩個mapreduce,分別是查詢資料的和插入資料的mapreduce,執行插入資料是使用的distcp的方式。
通過對日誌的分析:
查詢資料(select) 消耗4分鐘左右。
插入資料(distcp) 消耗6分鐘,平時這個階段一分鐘左右就能完成,但是這次居然多消耗了五分鐘。
distcp其實在一分鐘之內,map已經執行到100%,但是執行的容器或者任務居然一直卡了五分鐘之久,如果是一個任務可能還是偶發性的,但是大量任務都出現這個問題,那說明叢集應該是異常了。
- 檢視distcp任務對應的mapreduce日誌資訊:
滿屏的非同步排程waitting。
接著往下看應用程式日誌
可以看到sockettimeout 異常,fa發生這個異常的執行緒是ATS事件。
- 解決
發生這種情況是因為來自ATSv2的嵌入式HBASE崩潰。
解決這個問題的方法需要重置ATsv2內嵌HBASE資料庫(當然也可能是外部的hbase叢集)
解決方式1:
我這邊的問題是單節點的hbase,regionserver由於記憶體分配太低,導致記憶體崩潰,程序退出
修改hbase-env.sh 增加對應的記憶體大小,重啟服務
解決方式2:
停止yarn
Ambari -> Yarn-Actions -> Stop
刪除Zookeeper上的ATSv2 Znode
rmr /atsv2-hbase-unsecure或rmr /atsv2-hbase-secure(如果是kerberized叢集)
刪除hbase的資料儲存目錄
hdfs dfs -mv /atsv2/hbase/tmp/
啟動yarn
Ambari - > Yarn-Actions- > Start