天天看点

hive语句执行时报Java heap space解决办法

在脚本里加上参数设置

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

这句话的意思是执行Map前进行小文件合并

内存不足分为三种情况来看

1.发生在map阶段

一般存在MapJoin

通过设置参数set hive.auto.convert.join = false转成reduce端的Common Join

2.发生在shuffle阶段

由于map的输出较大,但shuffle阶段选择的是拷贝map输出到内存导致。

降低单个shuffle能够消耗的内存占reduce所有内存的比例(set mapreduce.reduce.shuffle.memory.limit.percent=0.10),使得shuffle阶段拷贝map输出时选择落磁盘

3.发生在reduce阶段

单个reduce处理数据量过大

通过设置参数mapred.reduce.tasks 或mapreduce.job.reduces 修改reduce个数分散压力

如果存在数据倾斜的情况,单纯修改reduce个数没有用

继续阅读