hive表关联查询,什么情况下会发生数据倾斜,应该如何解决?
**
hive表关联查询,什么情况下会发生数据倾斜,应该如何解决?
**
倾斜原因:
map输出数据按key Hash的分配到reduce中,由于key分布不均匀、业务数据本身的特性、建表时考虑不周等原因造成的reduce 上的数据量差异过大。
解决方案:
(1)参数调节:
hive.map.aggr = true
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中),最后完成最终的聚合操作。
(2)SQL 语句调节:
1)选用join key分布最均匀的表作为驱动表。做好列裁剪和filter操作,以达到两表做join 的时候,数据量相对变小的效果。
2)大小表Join:
使用map join让小的维度表(1000 条以下的记录条数)先进内存。在map端完成reduce.
3)大表Join大表:
把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于null 值关联不上,处理后并不影响最终结果。
4)count distinct大量相同特殊值:
count distinct 时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结果中加1。如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行union。
- 什么是数据倾斜?如何解决数据倾斜?
- [hadoop]什么是数据倾斜?如何解决数据倾斜?
- hadoop job解决大数据量关联时数据倾斜的一种办法
- Android 面试题笔记-------什么事ANR,如何避免这种情况的发生?
- 如何解决百万级数据查询优化
- json返回hibernate的结果会自动调用(get)查询出关联表的数据,解决方法
- hive数据倾斜原因和解决方法
- mybatis一对一关联查询无法查出关联对象的数据的解决
- Hibernate的缓存的原理(关联的数据查询出来如何缓存的)
- Win8桌面上的网上邻居右键属性没反应是什么情况如何解决
- 如何解决PHP查询大量数据内存耗尽的问题
- hive字段重复保存数据异常,大表与大表关联造成的数据倾斜
- sql 一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。
- Hive解决数据倾斜问题及Hive优化
- 新手投资应注意什么?如何避免骗局亏损情况发生
- 【译】什么情况下应该分解复杂的查询来提升性能
- LINQ TO SQL数据实体应该这样设计(解决多表关联问题)
- 如何应付表数据过大的查询问题?(如何尽量避免大表关联)
- 【译】什么情况下应该分解复杂的查询来提升性能
- mybatis中如何查询一对多的关联列表数据