hive执行join语句时 报错Map local work exhausted memory
导致该错误的原因是localtask出现了内存溢出。
由于开启了hive.auto.convert.join,但是实际小表大小是hive.mapjoin.smalltable.filesize(默认25M,小表不会超过25M)。由于使用的是orc压缩,解压缩后可能大小到了250M,存放到内存大小可能就会超过1G。
解决办法:
1、调大localtask的内存
set hive.mapred.local.mem=4096
,
默认1G,调大到4G
2、直接关闭表的autojoin,将hive.auto.convert.join设置成false
总得来说出现这个问题就是由于使用了hive.auto.convert.join,对小表进行广播,但是原表是orc的,存放到内存可能膨胀到大于localtask的堆内存大小,导致sql执行失败。