1.count(distinct)
当某key的值过多时,处理此key的reduce非常耗时,因为只有一个reduce任务
解决办法:将值为空的情况单独处理,如过滤空值的行,在最后结果中加1
2.不同类型关联产生数据倾斜
如int类型和string类型做join操作时,reduce非常耗时,只有一个reduce
解决办法:把int类型转换成string类型
3.开启数据倾斜负载均衡
set hive.groupby.skewindata=true
处理过程:生成两个MRJob,先随机分发处理,再通过key group by 来分发处理
4.控制空值分布
对于异常值如果不需要的话,可以一开始就通过where过滤掉
再将为空的key转变成字符串加随机数或者纯随机数,将因空值造成的倾斜分不到多个reducer中
5.结合实际环境设置合理的map和reduce数量
6.输出合并小文件
--默认true,在map-only任务结束时合并小文件
set hive.merge.mapfiles=true;
--默认false,在map-reduce任务结束时合并小文件
set hive.merge.maprefiles=true;
--默认256M 单位b;
set hive.merge.size.per.task=268435456
7.开启map端combiner(前提是不影响最终业务逻辑)
set hive.map.aggr=true;
8.中间结果压缩
设置map端输出,中间结果压缩。
版权声明:本文为abc5254065原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。