hive报错Java heap space

11 篇文章 1 订阅

hive 出错Error: Java heap space

 

默认io.sort.mb为100.但是在hql执行的时候hive log提示Java heap space.

找了很久的原因,尝试如下:

1.在mapred-site.xml中增加mapreduce.task.io.sort.mb参数

<property>
        <name>mapreduce.task.io.sort.mb</name>
        <value>10</value>
</property>

结果:没用

 

2.在core-site.xml中增加io.sort.mb参数,并设置为1

<property> 
  <name>io.sort.mb</name>  #指定了排序使用的内存,大的内存可以加快 job 的处理速度。
  <value>1</value>  
</property>

结果:没用

 

3.在hive 命令行中手动设置io.sort.mb参数

hive> set io.sort.mb=10;

结果:成功(后来尝试发现<=80均不会报错,即使设置为100看虚拟内存也应该够用,很奇怪)

 

后来尝试在系统参数设置中直接把 io.sort.mb改掉,发现不管是该core-site.xml还是mapred-site.xml都没用,应该是在某一个默认参数设置中修改,但是还么有找到。

补充一点:我的hadoop是2.0.0-cdh4.2.1,mapreduce是hadoop2.0.0-mr1-cdh4.2.1(MRv1)

---------------------

追加一下调查结果:

HADOOP_HOME=/home/hadoop/hadoop-2.0.0-cdh4.2.1

HADOOP_MR1_HOME=/home/hadoop/hadoop-2.0.0-mr1-cdh4.2.1

在hadoop dfs配置(HADOOP_HOME/etc/hadoop)中修改io.sort.mb参数无效,但是在同一个目录的mapred-site.xml修改后,hive查看io.sort.mb生效了。也就是说,即使hadoop2.0采用MR1的时候,虽然mapreduce在启动的时候不是在这个目录,但在start-dfs.sh执行的时候也会从这个目录去读取mapreduce的参数。

 

解决方法:把HADOOP_HOME/etc/hadoop/mapred-site.xml mv成其他名称如 mapred-site.xml.bak。然后在HIVE_CONF_DIR中修改mapred-site.xml中对应的io.sort.mb参数即可。

相应的,在hadoop-env.sh中,把HADOOP_HEAP增大。

 

 

 

 

 

其实就是那个参数

把mapreduce.task.io.sort.mb调低,起码要低于mapreduce.map.memory.mb,也要低于mapreduce.map.memory.mb中可能通过Xmx配置的java heap。

 

我是改成了50兆

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值