赞
踩
一、数据倾斜的定义
数据倾斜是指在并行进行数据处理的时候,由于单个partition的数据显著多余其他部分,分布不均匀,导致大量数据集中分布到一台或者某几台计算节点上,使得该部分的处理速度远低于平均计算速度,成为整个数据集处理的瓶颈,从而影响整体计算性能。
二、几种数据倾斜的解决方案
1、空值引发的数据倾斜
在数据采集时,判断导致数据倾斜的key是不是提前过滤掉了。在inner join,也就是使用内连接时,hive默认过滤掉了空值,但对于left join等等,会保留左边有的值。空KEY过滤的使用场景:1.非inner join;2. 不需要字段为Null的。
两种过滤方式:
(1) insert overwrite table jointable select n.* from (select * from nullidtable where id is not null) n left join bigtable o on n.id = o.id;//先过滤掉空值,再进行join
(2)有时虽然某个 key 为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在 join 的结果中,此时我们可以表 a 中 key 为空的字段赋一个随机的值,使得数据随机均匀地分不到不同的 reducer 上。
insert overwrite table jointable select n.* from nullidtable n full join bigtable o on nvl(n.id,ra
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。