报错信息:
- Hive Runtime Error: Map local work exhausted memory
原因:
- localtask出现了内存溢出
- 开启了自动转换为mapjoin参数:hive.auto.convert.join=true,对小表进行广播
- 小表的最大文件大小(hive.mapjoin.smalltable.filesize=25000000),即25M,解压缩等原因存放到内存大小可能就会超过1G()。
解决:
- 方法一
- 调大localtask的内存(默认1G,调大到4G)
- set hive.mapred.local.mem=4096,
- 方法二
- 直接关闭表的autojoin
- set hive.auto.convert.join=false;
拓展
- mapjoin架构
- 本质:将小表放入分布式缓存,与大表的每个部分进行Join
- 好处:在Map阶段进行表之间的连接。而不需要进入到Reduce阶段才进行连接。这样就节省了在Shuffle阶段时要进行的大量数据传输