1、总体架构优化
如今hive的总体框架以下,计算引擎不单单支持Map/Reduce,而且还支持Tez、Spark等。根据不一样的计算引擎又可使用不一样的资源调度和存储系统。
总体架构优化点:
一、根据不一样业务需求进行日期分区,并执行类型动态分区。
相关参数设置:
0.14中默认hive.exec.dynamic.partition=ture
二、为了减小磁盘存储空间以及I/O次数,对数据进行压缩
相关参数设置:
job输出文件按照BLOCK以Gzip方式进行压缩。git
1github 2算法 3apache |
|
map输出结果也以Gzip进行压缩。oop
1性能 2测试 |
|
对hive输出结果和中间结果进行压缩。
1 2 |
|
三、hive中间表以SequenceFile保存,能够节约序列化和反序列化的时间
相关参数设置:
hive.query.result.fileformat=SequenceFile
四、yarn优化,在此再也不展开,后面专门介绍。
2、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的个数。
3、JOB优化
一、本地执行
默认关闭了本地执行模式,小数据可使用本地执行模式,加快执行速度。
相关参数设置:
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
二、mapjoin
默认mapjoin是打开的, hive.auto.convert.join.noconditionaltask.size=10MB
装载到内存的表必须是经过scan的表(不包括group by等操做),若是join的两个表都知足上面的条件,/*mapjoin*/指定表格不起做用,只会装载小表到内存,不然就会选那个知足条件的scan表。
4、SQL优化
总体的优化策略以下:
5、平台优化
一、hive on tez
二、spark SQL大趋势
总结 上面主要介绍一些优化思想,有些优化点没有详细展开,后面分别介绍yarn的优化细节、SQL详细的优化实例以及咱们在Tez、spark等框架优化结果。最后用一句话共勉:边coding,边优化,优化无止境。 来源:github 做者:jacksu