1)数据倾斜根本原因:由于数据分布不均匀,导致map端读取的数据分布不均匀(数据长尾分布),从而使得map处理的数据量差异过大。

(2)解决思路:Hive是分阶段执行的,map处理数据量的差异取决于上一个stage的reduce输出,所以解决的根本方法就是如何将数据均匀的分布到各个reduce中

(3)出现数据倾斜的主要操作:

(a)join:使用join时,一个表较小,但是key值集中,使得数据在分发到各个reduce中的时候,某一个或几个reduce的数据远大于平均值

(b)join:大表与大表join时,分桶的判断字段0值或空值太多,而这些数据都会到一个reduce中处理,速度很慢

(c)group by:group by的维度太少,某值的数量太多(如性别sex,只有男和女,group by时只有两个维度,每个维度的数据量都很大),从而导致处理某个值数据的reduce处理非常耗时

(d)count distinct:某特殊值较多,数据将会在一个reduce中处理,处理此特殊值的reduce耗时

(4)原因概况:

(a)key值分布不均匀

(b)数据自身问题

(c)SQL语句问题

(5)数据倾斜表现:任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大。

单一reduce的记录数与平均记录数差异过大,通常可能达到3倍甚至更多。 最长时长远大于平均时长。

(6)数据倾斜解决方法:

(a)参数调节:hive.map.aggr = true 在map端部分聚合

(b)参数调节:hive.groupby.skewindata=true 数据倾斜时负载均衡

(c)sql语句调节:join时选择key值分布较均匀的表作为驱动表,同时做好列裁剪和分区裁剪,以减少数据量

(d)sql语句调节:大小表join时,小表先进内存

(e)sql语句调节:大表join大表时,把key值为空的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于null值关联不上,因此处理后不影响最终结果

原文链接:https://blog.csdn.net/Asher117/article/details/108979660

最新文章

  1. Gvr SDK for Unity 分析(一)
  2. .NET 框架基本原理透析⑴
  3. inline-block使标签间出现空白
  4. 迪士尼黑科技:爬墙机器人 VertiGo
  5. Fun with layers
  6. 腾讯海量数据处理平台TDW
  7. Spring Boot——开发新一代Spring应用
  8. iOS8数字键盘加左下角完成button
  9. Angular - - $rootScope.Scope
  10. Java设计模式:代理模式(一)
  11. HBase BlockCache
  12. [Mac] How do I move a window whose title bar is off-screen?
  13. db2 应用的最常见状态(转)
  14. cool--music
  15. Word中如何从某一页重新开始页码
  16. Android UI组件----用相对布局RelativeLayout做一个登陆界面
  17. HTML的框架结构
  18. 【转】AOE机制的DSL及其实际运用
  19. js中如何判断一个字符串包含另外一个字符串?
  20. RESTful的一个样例

热门文章

  1. 《Makefile常用函数》
  2. 操作系统实战45讲笔记- 05 CPU工作模式:程序执行的三种模式
  3. jenkin创建任务
  4. oracle学习之索引的介绍
  5. sublime4 支持中文
  6. k8s centos 79,用kuboard-spray装成功。低版本的。安装docker-ce,安装epel源
  7. git切换到某个tag
  8. CDO学习1 CDO简介
  9. Ubuntu查看系统服务
  10. css浮动效果造成父元素高度为0,解决