Hive 内存溢出问题


1. 问题描述

把hive部署到hadoop2.0 HA MR1集群中的时候,hive执行count(*)出错,日志为:

java.lang.Exception: java.lang.OutOfMemoryError: Java heap space

​    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:399)

Caused by: java.lang.OutOfMemoryError: Java heap space

2. 无效的解决方案

做了以下尝试

  1. 修改HADOOP_HEAP=4096

    无效

  2. 增加mapreduce中hadoop-env.sh的HADOOP_CLIENT_OPTS=1024

    无效

  3. 在.bash_profile中增加JAVA_OPTS

    无效

3. 有效的解决方案

在hive命令行中 !env; 查看hive所有的环境变量

  • 参数HADOOP_OPTS
HADOOP_OPTS=-Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/home/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/home/hadoop/freeware/hadoop-2.0.0-cdh4.2.1 -Dhadoop.id.str=aimcpro -Dhadoop.root.logger=INFO,console -Djava.library.path=/home/hadoop/freeware/hadoop-2.0.0-cdh4.2.1/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx128m -Dhadoop.security.logger=INFO,NullAppender

发现 Xmx128m,说明最大的被设置为128MB,问题就在这里

既然 HADOOP_MAPRED_HOME/conf/hadoop-env.sh中HADOOP_CLIENT_OPTS 已经被加大为 1024m,那为何 hive 执行 job 仍然OOM?

于是从 HADOOP_HDFS_HOME/etc/hadoop/hadoop-env.sh 中去查看 HADOOP_CLIENT_OPTS 仍然为128m, 说明hive在执行的时候仍然优先去读取 hadoop conf 目录中的配置

于是把这里的 HADOOP_CLIENT_OPTS 改为 1024 重启 HDFS 后,重新执行 hive 的 select count(*) ,

问题解决


文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
org.apache.hadoop.hbase.util.ByteStringer org.apache.hadoop.hbase.util.ByteStringer
1. 问题描述由于 maven 项目中使用的 protobuf-3.0.0 版本和 HBase 中使用的 protobuf-2.5.0 不一致,导致抛出异常 java.lang.NoClassDefFoundError:org.apache
2016-04-20
下一篇 
NoClassDefFoundError org/cloudera/htrace/Trace NoClassDefFoundError org/cloudera/htrace/Trace
Eclipse 中执行 HBase 程序时出现 java.lang.NoClassDefFoundError: org/cloudera/htrace/Trace 这是由于缺少 htrace-core.jar,该包在 Hbase 的 lib
2016-04-13
  目录