0
回答
Hive写入动态分区报heap space error
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

背景:之前写了一个sql实现拉链表,取前两周的数据和新一天的数据,在写入的时候指定日期为动态分区。

具体描述如下:表A和B的分区相同,partition by d string, type string. 取表A的前14天的数据和表B的最新一天数据做拉链操作,再回写到A。执行过程是按照type拆分成多个任务执行,目前运行了9天,也就是每个任务在写入的时候需要动态写九个分区。在写入分区的时候有加distribute by d,对于数据量较少的任务,reducer只有1个,对于数据量较多的任务reducer有多个。reducer个数为1的,有一个type执行会失败,而其他的不会。

网上有提到如果一个task向多个分区同时写入数据,那么会为每个分区开一个256M的缓存区,如果分区很多,那么就会OOM了。

配置如下:

set mapreduce.reduce.memory.mb=16384;
set mapred.child.reduce.java.opts=-Xmx3600M;
set mapreduce.reduce.java.opts=-Xmx3600M;

后来我指定了reducer的个数为15,因为正好是15天,就没有出现问题了。

问题:不解的是为什么reducer数为1的任务,有的会执行成功,有的会执行失败

举报
Gavin_Chou
发帖于3个月前 0回/39阅
顶部