1)MapJoin
如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成CommonJoin,即:再Reduce阶段完成join。容易放生数据倾斜。可以使用MapJoin把小表全部加载到内存再map端进行join,避免reduce处理。
2)行列过滤
列处理:在SELECT中,只那需要的列,如果要有,尽量使用分区过滤,少用select * from。
行处理:在分区裁剪中,当使用外关联时,如果将副表的过滤条件卸载Where后面,那么就会先全表关联,之后再过滤
3)采用分桶技术
4)采用分区技术
5)合理设置Map数
6)小文件进行合并
7)合理设置Reduce数
Reduce个数并不是越多越好
8)合并参数(常用参数)
SET hive.merge.mapfiles = true; -- 默认true,在map-only任务结束时合并小文件
SET hive.merge.mapredfiles = true; -- 默认false,在map-reduce任务结束时合并小文件
SET hive.merge.size.per.task = 268435456; -- 默认256M
SET hive.merge.smallfiles.avgsize = 16777216; -- 当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/818/viewspace-3145229/ ,如需转载,请注明出处,否则将追究法律责任。