1. 程式人生 > 實用技巧 >hive 由於distcp導致執行sql慢

hive 由於distcp導致執行sql慢

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

借鑑:
| https://www.cnblogs.com/fbiswt/p/12455364.html