hive高级篇-企业级调优
前言
大家基础的hive已经学完,发现hive启用的mr框架,如果没有设置好执行计划或者对map语句进行合理的设置,那么会导致语句执行的速度过于缓慢,所以很有必要对hive调优进行学习了解
一、设置分区
静态分区时可以使用insert load。 动态分区只能使用insert。
二、hql语句调优
2.1 避免全表扫描
只选择需要的列和分区
2.2 GroupBy
set hive.map.aggr = true; set hive.groupby.mapaggr.checkinterval = 100000; set hive.groupby.skewindata = true; //有数据倾斜时开启负载均衡 开启两个mr 先进行预聚合
2.3 Vectorization
在进行scan filter aggregation开启批量扫描
2.4 多重模式
如果对一张表进行多此的扫描 那么可以先from
2.5 in/exist
left semi join替换in exist,因为这种语法不被支持
2.6 CBO
CBO优化是对执行计划进行筛选,选择最优计划进行执行 包含了谓词下推 比如先执行where进行数据的筛选再执行join操作
2.7 Mapjoin
inner join有效 把小表进行广播
2.8 SMB Join
两张大表进行分桶 set hive.optimize.bucketmapjoin = true; set hive.optimize.bucketmapjoin.sortedmerge = true; set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat 再 进行join
2.9开启严格模式
禁止笛卡尔积和全表扫描
3.数据倾斜
3.1 key
单个和多个key导致的数据倾斜可以开启预聚合 或者增加key的数量,不要倍数的增加。(对单个key无效)
3.2 mapjoin
因为没有了join阶段
4.job优化
4.1 map
增加map数 合并小文件 开启combine合并小文件
4.2 reduce
增加reduce数量 开启并型模式
4.3不走mr
fetch模式 local模式
4.4jvm复用
|