Hive作为大数据领域常用的数据仓库组件,在设计和开发阶段需要注意效率。影响Hive效率的不仅仅是数据量过大;数据倾斜、数据冗余、job或I/O过多、MapReduce分配不合理等因素都对Hive的效率有影响。对Hive的调优既包含对HiveQL语句本身的优化,也包含Hive配置项和MR方面的调 整。
从以下三个方面展开: 架构优化 参数优化 SQL优化
1.架构方面
执行引擎方面针对公司内平台的资源,选择更合适的更快的引擎,比如MR、TEZ、Spark等,
如果选择是TEZ引擎,可以在优化器时候开启向量化的优化器,另外可以选择成本优化器CBO,配置分别如下:
set hive.vectorized.execution.enabled = true; -
- 默认 false
set hive.vectorized.execution.reduce.enabled = true; -
- 默认 false
SET hive.cbo.enable=true; --从 v0.14.0默认
true
SET hive.compute.query.using.stats=true; -- 默认false
SET hive.stats.fetch.column.stats=true; -- 默认false
SET hive.stats.fetch.partition.stats=true; -- 默认true
在表的设计上优化,比如选择分区表,分桶表,以及表的存储格式,为了减少数据传输,可以使用压缩的方式,下面给几个参数(更多参数可以查看官网)
-- 中间结果压缩
SET
hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec ;
-- 输出结果压缩
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.SnappyCodc
2.参数优化
第二部分是参数优化,其实上面架构部分,有部分也是通过参数来控制的,这一部分的参数控制主要有下面几个方面
本地模式、严格模式、JVM重用、并行执行、推测执行、合并小文件、Fetch模式