hadoop hive執行count(*)提示OutOfMemoryError: Java heap space
阿新 • • 發佈:2019-01-08
昨天在把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
無效
解決方法:
發現 Xmx128m,說明最大的被設定為128MB,問題就在這裡
既然HADOOP_MAPRED_HOME/conf/hadoop-env.sh中HADOOP_CLIENT_OPTS已經被加大為1024m,那為何hive執行job仍然OOM?
於是把這裡的HADOOP_CLIENT_OPTS改為1024重啟HDFS後,重新執行hive的 select count(*) OK
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