hivejoin过程中热点数据倾斜的一种解决方案

一、数据倾斜状况 

大表join小表,默认使用mapjoin。大表内存1.2G,小表5M,通过省份关联,大表中部分省份数据是热点数据,map阶段数据倾斜,个别task执行时长远远大于其他task。

二、问题分析

热点省份数据大量分到同一个task中执行,maptask单个任务处理数据256M,只有17个maptask任务。map任务太少导致相同key分到同一个任务中。考虑增加maptask数量分散热点数据。

三、参数调整

--单个maptask处理数据量,3.2M

set mapred.max.split.size=3200000;

--单个reducetask处理数据量,12.8M
set hive.exec.reducers.bytes.per.reducer=12800000;

hivesql结尾加上distribute by rand(),可以调整reduce阶段输出的文件数量和平均分布文件大小(加上之前我的文件是15个,最大13G,最小240M;加上之后变成文件103个,每个大小在660M左右),如果想指定存储文件数量可以用distribute by cast( rand() * num as int) ,num数值是多少,存储文件数量就是多少。

四、测试情况

各阶段执行时长   单个task处理数据量     各阶段数量
map:2m55s        6.4M                   map数量192
reduce:7m        6.4M                   reduce数量205
                                            
map:11m5s        6.4M                   map数量192
reduce:12m47s    64M                    reduce数量21
                            
map:2m51s        6.4M                   map数量192
reduce:3m        12.8M                  reduce数量103
                
map:2m14s        6.4M                   map数量192
reduce:3m43s     25.6M                  reduce数量52
                
map:4m3s         12.8M                  map数量93
reduce:4m26s     12.8M                  reduce数量103


map:1m49s         3.2M                  map数量394
reduce:2m25s     12.8M                  reduce数量103

五、结果分析

根据测试结果可以得出结论,当map数量越多时,map阶段执行的越快,map阶段数量固定时,reduce数量从小到大执行时长会先变短后变长。选择合适的map数量和reduce数量可以明细提高任务执行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值