大数据
标题:
Hive单表分区数过多执行查询报错
[打印本页]
作者:
Zeng
时间:
2015-5-11 18:46
标题:
Hive单表分区数过多执行查询报错
本帖最后由 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
欢迎光临 大数据 (http://www.bigbase.cn/)
Powered by Discuz! X3.2