这篇文章主要为大家展示了“Hive 优化的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“Hive 优化的方法有哪些”这篇文章吧。
一、整体架构优化
现在 hive 的整体框架如下,计算引擎不仅仅支持 Map/Reduce,并且还支持 Tez、Spark 等。根据不同的计算引擎又可以使用不同的资源调度和存储系统。
整体架构优化点:
1、根据不同业务需求进行日期分区,并执行类型动态分区。
相关参数设置:
0.14 中默认 hive.exec.dynamic.partition=ture
2、为了减少磁盘存储空间以及 I / O 次数,对数据进行压缩
相关参数设置:
job 输出文件按照 BLOCK 以 Gzip 方式进行压缩。
1
2
3
mapreduce.output.fileoutputformat.compress=true
mapreduce.output.fileoutputformat.compress.type=BLOCK
mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec
map 输出结果也以 Gzip 进行压缩。
1
2
mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec
对 hive 输出结果和中间结果进行压缩。
1
2
hive.exec.compress.output=true
hive.exec.compress.intermediate=true
3、hive 中间表以 SequenceFile 保存,可以节约序列化和反序列化的时间
相关参数设置:
hive.query.result.fileformat=SequenceFile
4、yarn 优化,在此不再展开,后面专门介绍。
二、MR 阶段优化
hive 操作符有:
执行流程为:
reduce 切割算法:
相关参数设置,默认为:
hive.exec.reducers.max=999
hive.exec.reducers.bytes.per.reducer=1G
reduce task num=min{reducers.max,input.size/bytes.per.reducer},可以根据实际需求来调整 reduce 的个数。
三、JOB 优化
1、本地执行
默认关闭了本地执行模式,小数据可以使用本地执行模式,加快执行速度。
相关参数设置:
hive.exec.mode.local.auto=true
默认本地执行的条件是,hive.exec.mode.local.auto.inputbytes.max=128MB,hive.exec.mode.local.auto.tasks.max=4,reduce task 最多 1 个。性能测试:
数据量(万) 操作 正常执行时间(秒 ) 本地执行时间(秒)
170 group by 36 16
80 count 34 6
2、mapjoin
默认 mapjoin 是打开的,hive.auto.convert.join.noconditionaltask.size=10MB
装载到内存的表必须是通过 scan 的表(不包括 group by 等操作),如果 join 的两个表都满足上面的条件,/*mapjoin*/ 指定表格不起作用,只会装载小表到内存,否则就会选那个满足条件的 scan 表。
四、SQL 优化
整体的优化策略如下:
去除查询中不需要的 column
Where 条件判断等在 TableScan 阶段就进行过滤
利用 Partition 信息,只读取符合条件的 Partition
Map 端 join,以大表作驱动,小表载入所有 mapper 内存中
调整 Join 顺序,确保以大表作为驱动表
对于数据分布不均衡的表 Group by 时,为避免数据集中到少数的 reducer 上,分成两个 map-reduce 阶段。第一个阶段先用 Distinct 列进行 shuffle,然后在 reduce 端部分聚合,减小数据规模,第二个 map-reduce 阶段再按 group-by 列聚合。
在 map 端用 hash 进行部分聚合,减小 reduce 端数据处理规模。
五、平台优化
1、hive on tez
2、spark SQL 大趋势
以上是“Hive 优化的方法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!