【Hive】优化

分区表的设计和优化

  • 普通表结构问题


  • 使用分区表可以优化上述查询问题

分桶表的设计和优化

  • Join问题


  • 分桶表设计


  • Join可以在同一个桶之间Join,减少不必要的判断
    注意Join的字段和分桶的字段要一致


索引的优化和设计

分桶和索引常常是优于分区的,分区的粒度比较大
分桶的优化比较严格,分桶和Join的字段要一致
索引在3.0之后不再支持
分桶是哈希,索引是子列判断

  • 原理


  • 缺点
    1、MR程序创建索引,效率较低
    2、表数据更新的时候,索引表不会更新,如果查询的时候需要更新表,运行MR,效率更低了。

文件存储格式

Hive数据存储的本质还是HDFS,可以有多种存储格式,TextFile、SequenceFile、ORC、Parquet等。

  • TextFile


  • SequenceFile


  • Parquet



  • ORC


压缩算法选择

image.png

存储优化——小文件场景


存储优化——ORC索引、矢量化查询

explain可以查看执行计划

MR属性优化

  • 本地模式
    在本地执行MR在数据量小的时候可能会更快,可以开启自动模式,它会根据一系列的条件选择本地模式

  • 并行执行
    Union和Join等语句可以划分为多个没有依赖关系的Stage,并行执行可以提高效率。

优化器——关联优化


CBO优化和Analyze分析器



分析器分析数据的分布等供CBO优化


谓词下推


第一个例子就是第二个的谓词下推



左/右连接或者外连接即使on条件不成立也会保留,因此谓词下推对于保留的表不会起作用,而如果在where里面是一定会起作用的


数据倾斜

某一个数据出现的频率过高









skew join将大的分开,单独使用多个任务,那么每个任务跑的join就小,即使每个很大,算下来也不大。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/yu0_zhan...
    张_rong阅读 975评论 0 2
  • 1. SerDes and I/O hive.input.format默认 org.apache.hadoop.h...
    Chin_qf阅读 2,163评论 0 0
  • 1,一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,Reduce...
    scottzcw阅读 1,244评论 0 4
  • 小文件问题的影响1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,...
    JayWolf阅读 1,751评论 0 0
  • 正文目录 1、表层面 1.1 利用分区表优化 1.2 利用分桶表优化 1.3 选择合适的文件存储格式 1.4 选择...
    扎西的德勒阅读 885评论 0 1