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



