- sql 中缩减查询范围,即指定分区和字段
- where 中的条件尽量写在前面,减少后续的数据量
- sort by 代替 order by
- group by 替代 distinct
- group by map 端使用 combiner 对数据进行预先聚合
- group by 处理数据倾斜
- 多表 join 的时候,小表写在 join 前面
- 多表 join 的时候,关联字段尽量写成一样的,即 on a.id=b.id=c.id
- map join
- 分桶表 map join
- hive 针对数据倾斜的配置项
hive.skewjoin.key,hive.skewjoin.mapjoin.map.tasks
- 过滤空值或没有用的值,跟第一点很像
- 单独处理倾斜的key 对应的数据,采用随机前缀的方式将数据打散
- 关联值类型不同的要转换成类型统一的,转换方法:
cast(a.event_type as string)
- 优化 map 数量和 reduce 数量
- 启用数据压缩
- JVM 重用
- 并行执行和本地模式执行
- 严格模式,就是强制不允许用户执行3种有风险的 HiveSQL 语句:查询分区表时不限定分区列的语句;两表join产生了笛卡尔积的语句;用order by来排序但没有指定limit的语句。
- 采用合适的存储格式:textfile,sequencefile,rcfile,avro,orc,parqet