Hive 性能优化最佳实践
当我们在Hadoop上创建数仓的时候,有很多开源好用的工具,其中Hive和Impala是我们在Hadoop上用的最多的,Hive是Facebook开发的,Impala是Cloudera开发的。
这一节我们讨论一下Hive 性能优化的最佳实践,你可以在性能优化可以参考下面步骤,当然这个不一定就是做好的,你也可以总结出自己的步骤
- 对Hive 表进行分区分桶
- 选择合适文件存储格式
- 避免产生大量小文件
- 合适的表设计
- 优化查询的SQL(尤其关联Join)
- 使用TEZ 或者Spark 引擎来替代MR
- 使用CBO优化器
- 使用VECTORIZATION
对Hive 表进行分区分桶
对hive表进行分区其实将表的数据根据我们最常查询的列的值进行物理分隔,分隔到不同的子文件夹中去,可以使得我们在查询的时候避免扫描大量不需要的文件,从而减少了IO 加速了数据检索的速度,进而加速了查询速度。
我们应该使用我们经常在where子句中使用的列作为分区列,同时hive也支持动态分区,我们可以通过下面的配置开启动态分区
set hive.exec.dynamic.partition.mode=nonstrict;