HQL 报 return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 错误解决方案
執(zhí)行一段HQL之后,報了如下錯誤
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTas此錯誤只能通過yarn 日志進(jìn)行查看,通過查看發(fā)現(xiàn)報OOM,解決OOM問題不能單純增加計算空間,比如MAP以及REDUCE計算空間。
我們首先看一下日志錯誤階段,
通過日志觀察實在STAGE2階段的map階段就報錯,并沒有到REDUCE階段。
那我們就可以來看看這段SQL explain 執(zhí)行計劃,計劃如下圖
發(fā)現(xiàn)第二階段是發(fā)生inner join,就是在join階段發(fā)生內(nèi)存溢出,99%概率必然是發(fā)生傾斜或者笛卡爾積導(dǎo)致map階段出現(xiàn)問題。
那我們該如何解決呢?是直接增加計算空間和并行度,我們要看一下SQL本身有沒有問題
這段SQL如下
從這段SQL,我們可以看出是兩張表內(nèi)關(guān)聯(lián),再通過對數(shù)據(jù)探查發(fā)現(xiàn),第一張表為小表,第二張表為大表,并且第二張表過濾后又加DISTICT,這塊會影響型能,但絕不是報錯主要原因,后期對關(guān)聯(lián)條件發(fā)現(xiàn)大表package大量重復(fù),這原因就很明顯,發(fā)生1對多現(xiàn)象,絕對發(fā)生了傾斜現(xiàn)象。
那我們完全可以從代碼層面進(jìn)行優(yōu)化。
優(yōu)化SQL如下
對整體去重只需要一個job,采用開窗函數(shù) row number over,并在最終希望獲取的package在小表中,采用left semi join。
這樣最終結(jié)果就跑成功了
遇到問題不要輕易就先通過設(shè)置參數(shù)進(jìn)行解決
- 首先先從代碼進(jìn)行優(yōu)化
- 其次再從設(shè)置參數(shù) 資源方面進(jìn)行解決
關(guān)注老姜
嗶哩賬號:老姜的數(shù)據(jù)江湖
微信公眾號:老姜的數(shù)據(jù)江湖
總結(jié)
以上是生活随笔為你收集整理的HQL 报 return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 错误解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive报错Execution Erro
- 下一篇: hive问题-return code 2