文件存储格式

  • 引言
  • 1、TextFile
  • 2、sequencefile
  • 3、orc
  • 4、 parquet
  • 5、性能比较


引言

hive存储格式优缺点 hive支持的存储格式_hiveHive支持的存储数的格式主要有:TextFile、SEQUENCEFILE、ORC、PARQUET。其中,TEXTFILE、SEQUENCEFILE是基于行存储,ORC、PARQUET基于列存储。

hive存储格式优缺点 hive支持的存储格式_hive_02


行存储和列存储

hive存储格式优缺点 hive支持的存储格式_字段_03

  • 上图中左边为逻辑表,右上为行存储,右下为列存储。
  • 行存储特点:查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
  • 列存储特点:查询满足条件的一整列数据的时候,行存储则需要去每个聚集的字段找到对应的每个行的值,列存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。另一方面,每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
  • 当查询结果为一整行的时候,行存储效率会高一些;当查询表中某几列时,列存储的效率会更高。
  • 在对数据的压缩方面,列存储比行存储更有优势,所以列存储占用空间相对小一些。

1、TextFile

  • 默认的文件格式,行存储。建表时不指定存储格式即为textfile,导入数据时把数据文件拷贝至hdfs不进行处理
  • 优点:最简单的数据格式,便于和其他工具(Pig, grep, sed, awk)共享数据,便于查看和编辑;加载较快
  • 缺点:耗费存储空间,I/O性能较低;Hive不进行数据切分合并,不能进行并行操作,查询效率低
  • 应用场景:适用于小型查询,查看具体数据内容的测试操作

2、sequencefile

  • 含有键值对的二进制文件,行存储
  • 优点:可压缩、可分割,优化磁盘利用率和I/O;可并行操作数据,查询效率高
  • 缺点:存储空间消耗最大;对于Hadoop生态系统之外的工具不适用,需要通过text文件转化加载
  • 应用场景:适用于数据量较小、大部分列的查询。

3、orc

hive存储格式优缺点 hive支持的存储格式_hiveORC文件由stripe、file footer、postscript三部分组成:

hive存储格式优缺点 hive支持的存储格式_hive存储格式优缺点_05

3.1 Stripe
hive存储格式优缺点 hive支持的存储格式_hive一个ORC文件,可以包含多个Stripe,Stripe默认大小250M。
hive存储格式优缺点 hive支持的存储格式_hiveStripe由Index Data、Row Data、Stripe Footer三部分组成:

  • Index Data
    轻量级索引,默认每隔1w行做一个索引,目的是记录某行的各个字段在Row Data中的偏移量,保存了该stripe上数据的位置信息,总行数等信息。
  • Row Data
    真正存储数据的部分,对每个列进行编码存储。
  • Stripe Footer
    存储stripe的元数据信息。

3.2 File Footer
hive存储格式优缺点 hive支持的存储格式_hive每个ORC文件中存有一个file footer,里面记录了各个stripe存储的行数,每个列的数据类型等信息。

3.3 Postscript
hive存储格式优缺点 hive支持的存储格式_hivePostscript在ORC文件的尾部,记录了整个文件的压缩类型、File Footer的长度信息等。ORC文件是从后往前读的,先读取Postscript,获取File Footer的信息,再从File Footer里读取Stripe的信息,最后定位到需要读取的数据。

  • 存储方式:数据按行分块,每块按照列存储,所有列存在一个文件中。
  • 优点:压缩快 快速列存取;效率比rcfile高,是rcfile的改良版本。
  • 缺点:存储空间消耗最大;对于Hadoop生态系统之外的工具不适用,需要通过text文件转化加载
  • 应用场景:适用于Hive中大型的存储、查询。

4、 parquet

  • parquet类似于orc,相对于orc文件格式,hadoop生态系统中大部分工程都支持parquet文件。
  • 存储模式:按列存储,Parquet文件是以二进制方式存储的,不可以直接读取和修改的,文件是自解析的,文件中包括该文件的数据和元数据
  • 存储结构:
  • hive存储格式优缺点 hive支持的存储格式_hive存储格式优缺点_10

  • 行组(Row Group):按照行将数据物理上划分为多个单元,每一个行组包含一定的行数,在一个HDFS文件中至少存储一个行组,Parquet读写的时候会将整个行组缓存在内存中,所以如果每一个行组的大小是由内存大的小决定的
  • 优点: Parquet能够很好的压缩和编码,有很好的查询性能,支持有限的模式演进。
  • 缺点:写速度通常比较慢,不支持update、insert、delete、ACID
  • 应用场景:适用于字段数非常多、无更新、只取部分列的查询

5、性能比较

比对三种主流的文件存储格式TEXTFILE 、ORC、PARQUET
压缩比:ORC > Parquet > textFile(textfile没有进行压缩)
查询速度:三者几乎一致
HDFS上显示的是原来的文件名,如果压缩的话,使用类似于000000_0的文件名

  • 对于大量数据的情况下,工作中常用orc 存储格式
  • 我们在建表的时候可以通过命令stored as指定文件存储格式为orc,从而提高查询效率。
create table tableName(字段名称 字段类型 [comment '中文注释说明'],字段名称 字段类型, ....)
row format delimited fields terminated by 'char分割符即列分割符'
lines terminated by '行分割符'
stored as orc;