hivesql的参数优化

1.GC Overhead Limit Exceeded error

Hadoop任务可能引起OOM错误的原因有很多。一般情况下,首先检查是否重设了hadoop参数:mapred.child.java.opts,一般设为-Xmx2000m,即使用2G的最大堆内存。
Hive中可能引起OOM的原因及相关的修复设定如下表所示:

原因:map aggregation
map aggregation使用哈希表存储group by/distinct key和他们的aggregation结果。
aggregate结果字段过多,或group by/distinct key的散度过大,可能导致内存占用过多。
修复:
减小hive.map.aggr.hash.percentmemory设定(默认为0.5,即使用50%的child堆内存)。

原因:join
join需要cache所有相同join key的非驱动表的记录
修复:
检查是否把大表设定为驱动表(大表写在join的最右边)。
如果已经设定正确的驱动表,减小hive.join.emit.interval设定(默认为1000,即每1000行的join结果集输出一次)。

原因:map join
map join需要cache全部小表的所有数据
修复:
检查小表是否足够小。如果小表超过1G,考虑不要使用map join。

--加了以下参数解决了问题

set mapreduce.map.java.opts=-Xmx3072m;
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=16;
set hive.exec.compress.output=true;
set hive.map.aggr.hash.percentmemory=0.3;
set hive.join.emit.interval=600;
set hive.auto.convert.join = false;


2.mapreduce.job.reduce.slowstart.completedmaps

参数调整

将产生Map较多的任务参数mapreduce.job.reduce.slowstart.completedmaps设置为1.0。避免Map和Reduce过多的任务出现Map未执行完,Reduce任务先开始执行,过多任务并行时所需资源相互等待的窘境。这是客户端参数it

不利影响

  • 当集群负载比较空闲时,少数任务中Map接近执行完毕,而Reduce任务不启动致使的container闲置,集群资源浪费。若Map任务处理数据出现不平均的状况,这种状况会更加严重。
  • 从集群资源负载监控会出现Map和Reduce任务出现两个波峰,中间出现波谷(Cpu空闲)。



posted @ 2022-03-21 20:56  酷酷的狐狸  阅读(201)  评论(0编辑  收藏  举报