Hive优化

本文主要介绍了如何通过SQL查询优化、列处理、减少job数量、表设计、参数设置(如合并小文件、使用Combiner、压缩、调整map和reduce数)来提升Hive查询的效率,降低资源消耗。
摘要由CSDN通过智能技术生成
1)SQL
a)⾏列过滤
列处理:在 SELECT 中,只拿需要的列,如果有,尽量使⽤分区过滤,少⽤ SELECT * 。
11 ⾏处理:在分区剪裁中,当使⽤外关联时,如果将副表的过滤条件写在 Where 后⾯, 那么就
会先全表关联,之后再过滤。
b)减少job数(例如相同的on条件的join放在⼀起作为⼀个任务)。
c)⼩表Join⼤表的时候要把⼩表放前⾯,原因是在Join操作的Reduce阶段,位于Join操作符左边的
表的内容会被加载进内存,将条⽬少的表放在左边,可以减少数据量,可以有效减少发⽣OOM错误的⼏率。
d)使⽤group by 代替 count distinct 完成计算。
e)优先过滤后再进⾏ Join 操作,最⼤限度的减少参与 join 的数据量
2)建表
a)创建分区表或者分桶表,避免全表查询
b)创建表是采⽤列式存储,例如orc或者parquet
3)参数
a)merge输出合并⼩⽂件
SET Hive.merge.mapfiles = true; -- 默认 true,在 map-only 任务结束时合并⼩⽂件
SET Hive.merge.mapredfiles = true; -- 默认 false,在 map-reduce 任务结 束时合并⼩⽂件
b)在 Map 执⾏前合并⼩⽂件,减少 Map 数:CombineHiveInputFormat 具有对⼩⽂件 进⾏合并
的功能(系统默认的格式)。HiveInputFormat 没有对⼩⽂件合并功能。
c)开启 map 端 combiner(不影响最终业务逻辑)
set Hive.map.aggr=true;
d)压缩(选择快的)
set Hive.exec.compress.intermediate=true --启⽤中间数据压缩 set
mapreduce.map.output.compress=true --启⽤最终数据压缩 set
mapreduce.map.outout.compress.codec=…; --设置压缩⽅式
e)合理设置 map数
mapred.min.split.size: 指的是数据的最⼩分割单元⼤⼩;
min 的默认值是 1B mapred.max.split.size: 指的是数据的最⼤分割单元⼤⼩;
max 的默认值是 256MB 通过调整 max 可以起到调整 map 数的作⽤,减⼩ max 可以增加
map 数,增⼤ max 可 以减少 map 数。 需要提醒的是,直接调整 mapred.map.tasks 这个参
数是没有效果的。
f)合理设置 Reduce 数 过多的启动和初始化 Reduce 也会消耗时间和资源;
另外,有多少个 Reduce,就会有多少个输出⽂件,
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值