MapReduce错误集-map端jvm堆空间不足

博客讲述了在执行MapReduce任务INSERT_ADD_BD_DW_GENERAL_PUSH时遇到的Java heap space错误,原因是map端的JVM堆空间配置不足。日志显示mapreduce.map.java.opts设置为1G,mapreduce.task.io.sort.mb设为512M,导致内存不足。针对大表数据,解决方案是将mapreduce.task.io.sort.mb增大到100。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务:INSERT_ADD_BD_DW_GENERAL_PUSH

脚本内容:

hive -v -e "
use db_ecar;
set hive.map.aggr.hash.percentmemory = 0.25;


INSERT INTO TABLE BD_DW_GENERAL_PUSH  
SELECT  t4.USER_ID
       ,t1.TERMINAL_ID
  ,t4.OPEN_ID
  ,substr(t1.LASTUPDATE_TIME,1,10)                      AS TIME_ID
  ,t3.CHANNEL_TYPE                                     AS PUSH_ID
  ,t1.CONTENT_TYPE                                     AS CONTENT_ID
  ,sum(case when t1.flag in (1,2) then 1 else 0 end )  AS PUSH_SUCC_NUM
  ,sum(case when t1.flag = 3 then 1 else 0 end )       AS PUSH_FAIL_NUM
  ,sum(case when t1.flag in (0,1,2,3,4) then 1 else 0 end) AS PUSH_NUM
  ,sum(case when t1.flag = 2 then 1 else 0 end )       AS RESPONSE_NUM
  ,sum(case when t1.flag = 2 then t1.LASTUPDATE_TIME - t1.PUSH_TIME else 0 end )  AS RESPONSE_TIME
  
FROM (
  SELECT * 
  FROM MYSQL1_EOC_PUSH_SEVER_RECORD
  WHERE YEAR = substr(date_sub('$data_date',1),1,4) 
    AND MONTH  = substr(date_sub('$data_date',1),6,2)
AND DAY = substr(date_sub('$data_date',1),9,2)
) t1
join BD_DW_BASIC_USER_INFO t4 on t1.TERMINAL_ID = t4.TERMINAL_ID
left join MYSQL1_EOC_PUSH_SCENES t3 on t1.SCENES_ID = t3.SCENES_ID
GROUP BY t4.USER_ID,t1.TERMINAL_ID,t4.OPEN_ID,substr(t1.LASTUPDATE_TIME,1,10),t3.CHANNEL_TYPE,t1.CONTENT_TYPE 
;  
"

报错日志:


错误分析:

  报错信息Java heap space,表示jvm堆空间不足。查询mapreduce.map.java.optsmap端的jvm堆空间为1G),mapreduce.task.io.sort.mbmap排序)为512M。剩余内存为512M,而表的数据比较大,这点内存不够。

 

解决方案:将mapreduce.task.io.sort.mb调为100。(注意100后面不需要加“M”)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值