zoukankan      html  css  js  c++  java
  • [Hive]-列式存储篇

    1. ORC是什么

      ORC,全称 Optimized Row Columnar.是Hadoop生态圈的列式存储概念,最早由Hive提出.

      在Hive的ORC,首先依然是根据行组分割整个表,但是在每个行组中,按列存储.ORC文件是自描述的,它的元数据使用Protocol Buffers进行序列化,并尽可能的进行压缩

    2.ORC的好处

      列式存储有很高的压缩比.(因为同列数据,数据格式,重复率等相同几率很高,并且可以针对列相同的数据类型,采用更好的压缩方式)

      优化查询效率(可以只查询某些需要的列而不用扫整个数据,降低IO)

      提供了多种索引()row group index、bloom filter index等),并且可以保存列本身的统计信息(Min,Max,Sum等),对部分查询谓词效率更高

      可以支持更为复杂的数据结构.比如Map,或者更加不规则的数据结构

    3.存储结构

      Hive.ORC中,数据以二进制文件存储,所以是不可以直接阅读的,而元数据是随同ORC一起的,所以是自解析的.具体如下:

      ORC文件:保存在HDFS的普通二进制文件,每一个ORC文件包含多个stripe,每一个stripe包含多条数据.针对每一个stripe,进行列式存储.

      ORC文件级元数据:包含整个ORC文件的描述信息,文件Meta和统计信息,所有在此ORC文件的stripe信息和文件的shemale信息,保存在文件的末尾.

      stripe:一组行形成一个stripe,读写的最小单位(每次读写至少读取一个stripe),一般为HDFS的一个块大小,保存了每一列的索引和数据

      stripe元数据:保存stripe的位置,每一个列在本stripe的统计信息以及所有Stream信息

      row group:行组. 索引化的最小单位,一个stripe包含多个row group

      stream:一个stream表示文件中有效的一段.包括索引和数据两类。索引stream保存每一个row group的位置和统计信息,数据stream包括多种类型的数据,具体需要哪几种是由该列类型和编码方式决定

    4.索引统计

      ORC文件中包含三个级别的统计信息,ORC,stripe,row group级.用于在某些查询时指示是否可以跳过某段数据,或直接得出某些统计结果等

        ORC级  ORC文件的末尾记录,整个文件的列统计信息,

        stripe级  ORC文件还会记录,每个stripe的列统计信息. 

        row group级 ORC文件还会记录,每个行组的列统计信息.(行组的范围可以指定,默认10000)

      主要用于查询的优化.比如谓词a>4 && a<10时,当查询到ORC或者stripe或者行组的A列统计最小为11或者最大为3时就不会读入,将整个跳过该ORC或者stripe或者行组.  

    5.数据读取方式

      ORC文件从末尾开始读取.文件的最后一个字节存储的Postscript长度.Postscript长度不会超过256个字节,Postscript存储的是整个文件的元数据信息.包括文件的压缩格式,每一个文件块的最大长度(读取时的内存分配),Foot长度,以及一些版本信息.

      参考资料 https://www.cnblogs.com/ITtangtang/p/7677912.html

  • 相关阅读:
    Vue.js的组件化思想--下
    Vue.js的组件化思想--上
    Git常用命令总结
    vue基础语法
    ES6基础语法
    Vue笔记
    Vue的基本使用(一)
    es6的基本用法
    Django-admin管理工具
    Django组件-中间件
  • 原文地址:https://www.cnblogs.com/NightPxy/p/9129499.html
Copyright © 2011-2022 走看看