hive报错(1)MoveTask/HIVE return code 1、2、3
今天在CDH上執行hive sql的時候報了一個錯
錯誤內容為:
????FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
錯誤語句:
????INSERT OVERWRITE DIRECTORY '{$dir}' select * from tmp_analyse_os where logdata='{$begin}'??
錯誤原因:
????hive源碼會檢查導出的路徑是否存在,如果不存在則報這個錯。這個錯只有在CDH上的hive才會報錯,apache已經修復了這個bug,其實CDH不是沒有修復這個bug,而是添加了一個配置文件,但配置文件默認是false(蛋疼)。
解決方法:
????在hive上添加一個配置即可。
<property> <name>hive.insert.into.multilevel.dirs</name> <value>true</value> </property>下面是源碼中關于文件權限繼承的開關代碼:
HiveConf.ConfVars.HIVE_WAREHOUSE_SUBDIR_INHERIT_PERMS);
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
產生問題的原因:
hive的查詢結果在在進行move操作時,需要進行文件權限的授權,多個文件的授權是并發進行的,hive中該源碼是在一個線程池中
執行的,該操作在多線程時線程同步有問題的該異常,這是hive的一個bug,目前截止目前的最新版本Apache Hive 2.1.1還沒有修復該問題;
可以通過關閉hive的文件權限繼承 hive.warehouse.subdir.inherit.perms=false 來規避該問題。
解決方法:
hive.warehouse.subdir.inherit.perms
return code 1?
原因:
? ? ??'Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask'? ? ?
? ? ? 報錯是抄的,多次實踐證明,執行hive sql ERROR 返回?return code 1 基本上是執行的HQL無法加入到對應的用戶隊列中。
解決方法 1:
? ? ? 執行HQL前,加入 set MapReduce.queue?= QUEUE_CRA; CRA(用戶名)
解決方法 2:
? ? ?? ? ?hdfs dfs命令對文件夾下的文件賦予權限。使其可以進行操作。
?
return code 2:
? ? ?原因 1:
? ? ? ? ?HQL產生較大的笛卡爾積,撐爆了HIVE 執行的最大線程載荷。
? ? ?解決方法:
? ? ? ? ?優化HQL.
? ? ?原因 2 :
Hive運行成功之后,當輸入select count(*) from XX或者插入數據時,居然碰到BUG。
2016-04-14 12:31:56,199 Stage-1 map = 0%,??reduce = 0%
Ended Job = job_1460599682683_0005 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 fromorg.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched:
Stage-Stage-1:??HDFS Read: 0HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 0 msec
這個問題只是HIVE單方面的問題,而用Hadoop ?Job日志查看,卻是YarnException: Unauthorized request to start container的問題。未經授權的請求,怎么會有這樣的問題呢。經過網上未解,說是各個節點的時間未同步的問題。
解決方法:
簡直是暈,不知道誰剛好把某個節點時間修改了。才導致了這樣的坑,居然都踩上了。于是把時間進行修改,進行系統時間同步,果然沒有再次出現。
return code 3:
? ? 主要原因是數據傾斜。
解決方法 1:? ?對數據大的表進行GROUP BY ,減少數據量。
解決方法 2:?
? ?set hive.auto.convert.join = false;? ? ? ?
? ? ? ??說明:是不是依據輸入文件的大小,將Join轉成普通的Map Join
? ? ? ??默認值: false
? ?set hive.ignore.mapjoin.hint = false;
? ? ? ??說明:?是否忽略mapjoin hint 即mapjoin標記
? ? ? ???默認值: true
? ?set hive.exec.parallel = true;? ? ?
? ? ? ? ??說明:是否并行提交任務
? ? ? ? ?默認值:false
總結
以上是生活随笔為你收集整理的hive报错(1)MoveTask/HIVE return code 1、2、3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: case when是不是只要满足第一个别
- 下一篇: HIVE 插入中文分区值的问题