当前位置: 首页 > 工具软件 > Mr.2 > 使用案例 >

使用hive报 return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask解决方法

彭令秋
2023-12-01

1.情况

  • 两表join 其他时间数据正常插入。唯独插入7月1日数据时 , 报错:
    • join 语句
insert overwrite table A
partition (log_date= '20210701')
select a.id,a.name,b.age from employees e left join b on a.id=b.id
where a.log_date= '20210701' and b.log_date= '20210701'
  • 报错如下:

INFO  : Total MapReduce CPU Time Spent: -1 msec

INFO  : Stage-Stage-1:  HDFS Read: 2872700580746 HDFS Write: 13674470480571 FAIL

INFO  : MapReduce Jobs Launched: 

ERROR : FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

ERROR : Ended Job = job_1626955970433_229281 with errors

com.bilibili.dispatcher.lib.exception.DispatcherException: execute failed

2021-07-23 18:33:44 249 attempt to execute on HIVE_SERVER failed [USER_ERROR:EXECUTE_FAILED:1004] 

2.分析

  • 为什么唯独7月1号数据异常?是不是这天数据量过大?
    • 不可能过大,过大最多导致执行慢
  • 两表join时,shuffer过程中导致导致同一同一分区可以过大 导致reduceTaks 数据分布不均匀?
    • 方案1 : mapjoin 不行 mapJoin 做多建议表的大小为2G 但是单表过大
    • 方法2 : 设置 reduceJoin将超过阈值的key 写入文件 再启用一个mapJob

3.解决

# join的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.skewjoin.key=10 0000;
# 如果是join过程出现倾斜应该设置为true

set hive.optimize.skewjoin=true;
 类似资料: