Hive基础入门(二)

68 阅读3分钟

Hive分桶表

将一个大文件分成n多小文件。本质和MapReduce的分区类似,都是在分文件。

Hive表的数据压缩

优点

  • 提高计算效率
  • 提高磁盘利用率

压缩算法的选择

  • 压缩比:压缩比越高,压缩后文件越小,所以压缩比越高越好
  • 压缩时间:越快越好
  • 已压缩的格式文件是否可以再分割:可以分割的格式允许单一文件由多个Mapper程序处理,可以更好的并行化

常见压缩方式

压缩方式压缩比压缩速度解压缩速度是否可分割Hadoop对应的编码/解码器
gzip13.4%21 MB/s118 MB/sorg.apache.hadoop.io.compress.GzipCodec
bzip213.2%2.4MB/s9.5MB/sorg.apache.hadoop.io.compress.BZip2Codec
lzo20.5%135 MB/s410 MB/scom.hadoop.compress.lzo.LzopCodec
snappy22.2%172 MB/s409 MB/sorg.apache.hadoop.io.compress.SnappyCodec
以上表中数据为参考
  1. lzo需要创建索引,才可以支持分割。
  2. 常用压缩方式为lzo和snappy。因为尽管gzip和bzip2拥有极高的压缩比,但是其压缩与解压缩的速度并不理想,从而影响计算效率。

Hive表的文件存储

行式存储 VS 列式存储

行式存储

  • 顾名思义,根据表中数据,一行一行的进行存储。如果有空的field,需要占位
  • 格式:TEXTFILE、SEQUENCEFILE
  • 特点:适用于查找一整行数据

列式存储

  • 顾名思义,根据表中数据,一列一列的进行存储。如果有空的field,不需要占位
  • 格式:ORC、PARQUET
  • 特点:适用于查找单个field值。由于每个field数据类型相同,便于设计压缩算法
  • 更适合大数据中的存储

TEXTFILE格式

  • 默认数据格式
  • 由于数据不做压缩,磁盘开销大,数据解析开销大
  • 可使用gzip、bzip2进行压缩

ORC格式

  • Optimized Row Columnar
  • Stripe
    • Index Data:列的索引信息
    • Row Data:列索引对应的数据信息(真正的数据存储)
    • Stripe Footer:描述stripe的元数据信息
  • File Footer:每个文件有一个File Footer,用来记录每个Stripe的行数,每个Column的数据类型等。
  • PostScript:位于每个文件的最后,File Footer的后面。里面记录了File Footer的长度信息,整个文件的压缩类型等。
  • 读取ORC格式文件的时候,首先找到尾部的PostScript,解析File Footer的信息。再从File Footer中解析各个Stripe的信息。最后读各个Stripe的信息。

PARQUET格式

  • Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,在Impala中经常会用到的存储格式。
  • 以二进制方式存储,所以不可以直接读取。文件中包括其数据和元数据,所以可以自解析。
  • 通常情况下,在存储Parquet数据的时候会按照Block大小设置行组的大小,由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,这样可以把每一个行组由一个Mapper任务处理,增大任务执行并行度。Parquet文件的格式如下图所示。