1. 问题描述
在hive中两张表进行join操作时有时会出现如下错误:
Total MapReduce jobs = 4
2014-10-22 05:45:06 Starting to launch local task to process map join; maximum memory = 1065484288
2014-10-22 05:45:42 Processing rows: 200000 Hashtable size: 199999 Memory usage: 82761296 percentage: 0.078
出现错误的原因是 任务在进行join操作时转换mapjoin将小表放进内存导致内存溢出。
2. 解决办法:
解决办法由两种,一个是将自动mapjoin 转换关闭,另外一个是将内存调大:
2.1. 关闭自动mapjoin 转换
修改配置文件 关闭mapjoin
vim hive-site.xml
<property>
<name>hive.auto.convert.join</name>
<value>false</value>
</property>
2.2. 将内存增大
hive.mapjoin.smalltable.filesize 默认值是25MB
修改内存大小
set mapreduce.map.memory.mb=2049;
set mapreduce.reduce.memory.mb=20495;
set hive.auto.convert.join=true;