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