问题导读: 1、Hive整体架构优化点有哪些? 2、如何在MR阶段进行优化? 3、Hive在SQL中如何优化? 4、Hive框架平台中如何优化? 一、整体架构优化 现在hive的整体框架如下,计算引擎不仅仅支持Map/Reduce,并且还支持Tez、Spark等。根据不同的计算引擎又可以使用不同的资源调度和存储系统。 整体架构优化点: 1、根据不同业务需求进行日期分区,并执行类型动态分区。 相关参数设置: 0.14中默认hive.exec.dynamic.partition=ture 2、为了减少磁盘存储空间以及I/O次数,对数据进行压缩 相关参数设置: job输出文件按照BLOCK以Gzip方式进行压缩。 [AppleScript] 纯文本查看 复制代码
map输出结果也以Gzip进行压缩。 [AppleScript] 纯文本查看 复制代码
对hive输出结果和中间结果进行压缩。 [AppleScript] 纯文本查看 复制代码
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优化 整体的优化策略如下:
五、平台优化 1、hive on tez 2、spark SQL大趋势 总结 上面主要介绍一些优化思想,有些优化点没有详细展开,后面分别介绍yarn的优化细节、SQL详细的优化实例以及我们在Tez、spark等框架优化结果。最后用一句话共勉:边coding,边优化,优化无止境。 来源:github 作者:jacksu |
|