文档章节

Hive解决数据倾斜问题(GC overhead limit exceeded)的有效办法。

h
 hushenmin
发布于 2016/05/20 14:11
字数 622
阅读 596
收藏 0

 

 

原因分析:在执行hive shell的时候map任务阶段执行到99%,而reduce节点只执行到33%人后就出现了上面的错误。

自我解释:

(1)上面的情况说明,在map阶段执行结束的时候,当垃圾回收器在回收map阶段所产生的对象,因为数据倾斜的原因所导致对象过大,所以不能顺利的回收map阶段所产生的垃圾。

(2)从具体的报错信息可以看出,stage-1已经执行了将近99%,也就是说,在map阶段执行结束的时候,如果在map阶段发生了聚合,虽然会提升效率,但是会使用更加多的内存,如果垃圾回收器压力很大,那么reduce task一直处于waiting状态,之所以这样,是因为container一直需要被回收却回收不了。

一般数据倾斜的解决思路:

增加map任务的堆内存大小并设置标记-清理垃圾回收器:

set mapreduce.map.java.opts=-Xmx3072m -XX:+UseConcMarkSweepGC;(注意: mapreduce.map.memory.mb=4096;必须小于这个值)

set hive.groupby.skewindata =true;(当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。)

sethive.optimize.skewjoin=true;(如果是join 过程出现倾斜应该设置为true)

如果上面的方法解决不了当前数据倾斜的问题就使用下面的方法:

hive.map.aggr=false;(禁用在map中会做部分聚集操作,这样map阶段使用的内存降低,但效率会降低,如果上面的方法能解决问题,不建议使用这种方法)

 

 

 

 

 

© 著作权归作者所有

h
粉丝 1
博文 3
码字总数 3790
作品 0
朝阳
架构师
私信 提问
OutOfMemoryError系列(2): GC overhead limit exceeded

这是本系列的第二篇文章, 相关文章列表: OutOfMemoryError系列(1): Java heap space OutOfMemoryError系列(2): GC overhead limit exceeded OutOfMemoryError系列(3): Permgen space O......

renfufei
2017/08/25
0
0
Eclipse 经常out of memory

这是.log文件、我读 不懂、、、、 !SESSION 2012-10-24 11:44:49.466 ----------------------------------------------- eclipse.buildId=M20120208-0800 java.version=1.7.0_03 java.vendo......

SamZel
2012/10/24
14.2K
3
java内存空间不够问题

本地部署时抛出异常java.lang.OutOfMemoryError:GC overhead limit exceeded导致服务起不来,查看日志发现加载了太多资源到内存,本地的性能也不好,gc时间消耗的较多。解决这种问题两种方法...

chworld
2015/10/19
10
0
An internal error occurred during: “Build Project”. GC overhead limit exceeded

在使用Eclipse的Build Project功能时,提示以下错误: An internal error occurred during: “Build Project”. GC overhead limit exceeded 如图: 搜索的一下,是属于java.lang.OutOfMemo...

幼稚园杀手
2016/03/31
197
0
Could not create content describer for org.eclipse.jst.jee.ee5webDD. Content type has been disabled. GC overhead limit exceeded

Could not create content describer for org.eclipse.jst.jee.ee5webDD. Content type has been disabled. GC overhead limit exceeded An internal error occurred during: "JSP Index Man......

天池番薯
2015/09/28
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部