1.Map优化
---作业会通过Input的目录产生一个或者多个map任务.set dfs.block.szie=128
---Map越多越好吗?是不是保证每个Map处理接近文件块大小?
---如何合并小文件,减少map数
set mapred.max.split.size=100000000;
set mapred.min.split.size.per.node=100000000;
set mapred.min.split.per.rack=1000000000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
适当增加map数
set mapred.map.tasts=10;
提高map端的聚合性能
set hive.map.aggr=true;
2.reduce的优化
--hive.exec.reducers.bytes.per.reducer;--reduce任务处理的数据量
--调整reduce的个数
set mapred.reduce.tasks=10
只有一个reduce的情况
没有group by ;order by ;笛卡尔集
3.做分区裁剪:partition
4.Mapjoin:--/*mapjoin(tablelist)*/,必须是小表,通常不超过1G,后者50万条记录
5.先做UNion all,在做join或者group by 等操作可以有效减少MR过程
6.join优化
6.1尽量是有那个同一个键进行连接ON 6.2大表放后面
7.并行执行
set hive.exec.parallel=true
8.数据倾斜:万能方法set .group by .skewindata=true