1. 程式人生 > >hadoop hive執行count(*)提示OutOfMemoryError: Java heap space

hadoop hive執行count(*)提示OutOfMemoryError: Java heap space

昨天在把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


找了很久的原因,做了以下嘗試

1.修改HADOOP_HEAP=4096  
  無效


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


3.在.bash_profile中增加JAVA_OPTS
  無效


解決方法:

在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(*) OK