大数据

 找回密码
 立即注册
搜索
热搜: AWS Hadoop Tableau
查看: 30860|回复: 0
打印 上一主题 下一主题

Hive单表分区数过多执行查询报错

[复制链接]

15

主题

15

帖子

287

积分

版主

Rank: 7Rank: 7Rank: 7

积分
287
跳转到指定楼层
楼主
发表于 2015-5-11 18:46:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Zeng 于 2015-5-11 18:48 编辑

java.lang.OutOfMemoryError: Java heap space

参考OOM occurs when query spans to a large number of partitions

原因
实际上分区数越多查询越慢,应控制分区数在5000以下。
1、hive会在执行查询时先将元数据中的分区信息加载到内存中,包括PARTITIONS、PARTITION_KEY_VALS、PARTITION_PARAMS等表的数据,如果分区数过多,这些表中的数据量也越大,hiveserver2默认的堆内存只有256M,因此heap不足。
2、如果hive-site.xml配置mapred.reduce.tasks数目较多(默认为-1,即slave个数),会导致每个查询job产生更多的map过程,同时分区数较多,加大了单个mapred加载的分区数据量。而在mapred-site.xml中的配置占用内存过低也会导致查询执行过程中报错,可适当调整:mapred.child.java.opts=-Xmx512m -XX:+UseConcMarkSweepGC

解决方案
按照其他规则分区,降低目标表分区数,修改hive-env.sh,加入配置:export HADOOP_HEAPSIZE=2048

[1] Hive问题记录:http://my.oschina.net/cwalet/blog/266493


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表