码迷,mamicode.com
首页 > 其他好文 > 详细

深入理解hadoop数据倾斜

时间:2018-07-14 13:04:56      阅读:475      评论:0      收藏:0      [点我收藏+]

标签:sem   semi   就是   back   方式   节点   mil   进程   压缩   

深入理解hadoop之数据倾斜


 1、什么是数据倾斜

  我们在用map /reduce程序执行时,有时候会发现reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完。这种现象就是因为key分布不均匀、散度不够导致的,也就是我们所说的数据倾斜。


 

2、数据倾斜产生的原因

  在hive上执行join,group by,count distinct等操作的时候可能会发现ruduce阶段卡在99.99%,一直99.99%不能结束,查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成;这里进一步查看进程日志或者WEBUI会发现:有一个多几个reduce卡住;各种container报错OOM,读写的数据量极大,至少远远超过其它正常的reduce ,伴随着数据倾斜,会出现任务被kill等各种诡异的表现。一般情况下Hive的数据倾斜,都发生在Sql中Group和On上,而且和数据逻辑绑定比较深。


 

3、数据倾斜解决的办法

  1)hive.groupby.skewindata变量,这个变量是用于控制负载均衡的。当数据出现倾斜时,如果该变量设置为true,那么Hive会自动进行负载均衡。

  2)mapjoin方式 
        3)count distinct的操作,先转成group,再count 
        4)hive.groupby.skewindata=true 
        5)left semi jioin的使用 
        6)设置map端输出、中间结果压缩

深入理解hadoop数据倾斜

标签:sem   semi   就是   back   方式   节点   mil   进程   压缩   

原文地址:https://www.cnblogs.com/bigdata-stone/p/9309153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!