Hive报错FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask
Hive報(bào)錯(cuò)Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask
- 1、集群環(huán)境
- 2、錯(cuò)誤由來
- 3、錯(cuò)誤原因
- 4、錯(cuò)誤分析
- 5、解決辦法
1、集群環(huán)境
CDH集群,hive的引擎是mr。
2、錯(cuò)誤由來
今天在測試環(huán)境的集群里跑hive任務(wù),報(bào)錯(cuò)Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask。
3、錯(cuò)誤原因
這個(gè)錯(cuò)誤是因?yàn)閔ive的map join參數(shù)默認(rèn)是開啟的:
hive.auto.convert.join=true使用hive進(jìn)行map join時(shí), 節(jié)點(diǎn)內(nèi)存不夠就會(huì)報(bào)該類型錯(cuò)誤。
4、錯(cuò)誤分析
MapJoin是指在Map 端進(jìn)行join,其原理是broadcast join,即把小表作為一個(gè)完整的驅(qū)動(dòng)表來進(jìn)行join操作。通常情況下,要連接的各個(gè)表里面的數(shù)據(jù)會(huì)分布在不同的Map中進(jìn)行處理。即同一個(gè)Key對(duì)應(yīng)的Value可能存在不同的Map中。這樣就必須等到 Reduce中去連接。要使MapJoin能夠順利進(jìn)行,那就必須滿足這樣的條件:除了一份表的數(shù)據(jù)分布在不同的Map中外,其他連接的表的數(shù)據(jù)必須在每個(gè)Map中有完整的拷貝。Map Join會(huì)把小表全部讀入內(nèi)存中,在Map階段直接拿另外一個(gè)表的數(shù)據(jù)和內(nèi)存中表數(shù)據(jù)做匹配 (這時(shí)可以使用Distributed Cache將小表分發(fā)到各個(gè)節(jié)點(diǎn)上,以供Mapper加載使用),由于在map時(shí)進(jìn)行了join操作,省去了reduce運(yùn)行的效率也會(huì)高很多。
當(dāng)機(jī)器內(nèi)存不足時(shí),無法在Map端進(jìn)行join,即會(huì)報(bào)錯(cuò)。
5、解決辦法
-
1、可以關(guān)閉上面的map join 改為common join
shell命令行:set hive.auto.convert.join=false -
2、修改配置文件下的參數(shù)可以把map join 關(guān)閉,使用common join
hive_conf.xml
總結(jié)
以上是生活随笔為你收集整理的Hive报错FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hive错误之 Execution Er
- 下一篇: org.apache.hadoop.hi