执行Hive sql 报FAILED:Execution Error,return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
在hive Beeline命令行使用insert into … select …向hive表插入数据时,报FAILED:Execution Error,return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask错误,具体如下所示:
然后查看hive服务日志,在日志中发现了Error:Java heap space信息,如下所示:
然后在hive命令行执行set mapred.map.child.java.opts;发现-Xmx的只为200m,而本次hive处理的数据大概有1.8亿,故怀疑是内存设置太小导致的堆内存溢出,通过将mapred.map.child.java.opts中-Xmx的值修改为2048m后,重新执行sql语句,任务运行成功。
修改mapred.map.child.java.opts参数有两种方法:
1)在hive命令行执行set mapred.map.child.java.opts=-Xmx2048m;
这种方法设置的参数只是在当前session中生效,一旦退出了当前hive命令行,下次再进入hive命令行后之前设置的该参数值不再生效
2)修改hive客户端目录下hive-site.xml配置文件中对应值,如果该配置中已存在mapred.map.child.java.opts配置项,则只需要修改对应的值即可;如果该配置中没有该配置项则需要加入对应的信息,如下:
<property>
<name>mapred.map.child.java.opts</name>
<value>-Xmx2048m</value>
</property>
这种方式修改的配置会在所有session中生效