在Hive中,文件的存储格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET。
其中,TEXTFILE、SEQUENCEFILE是基于行存储,ORC、PARQUET基于列存储

1. 行存储和列存储


上图中左边为逻辑表,右上为行存储,右下为列存储。
当查询结果为一整行的时候,行存储效率会高一些;当查询表中某几列时,列存储的效率会更高。
在对数据的压缩方面,列存储比行存储更有优势,所以列存储占用空间相对小一些。

2. TEXTFILE

TEXTFILE是Hive的默认存储格式,数据不做压缩,磁盘开销大。实际生产中很少用TEXTFILE存储。

3. ORC

ORC(Optimized Row Columnar)从Hive0.11.0开始出现,提高了Hive在写入、读取、计算数据时的性能。ORC文件默认使用ZLIB压缩
ORC文件由stripe、file footer、postscript三部分组成:

3.1 Stripe

一个ORC文件,可以包含多个Stripe,Stripe默认大小250M。
Stripe由Index Data、Row Data、Stripe Footer三部分组成。
(1)Index Data
轻量级索引,默认每隔1w行做一个索引,目的是记录某行的各个字段在Row Data中的偏移量。
(2)Row Data
真正存储数据的部分,对每个列进行编码存储。
(3)Stripe Footer
存储stripe的元数据信息。

3.2 File Footer

每个ORC文件中存有一个file footer,里面记录了各个stripe存储的行数,每个列的数据类型等信息。

3.3 Postscript

Postscript在ORC文件的尾部,记录了整个文件的压缩类型、File Footer的长度信息等。ORC文件是从后往前读的,先读取Postscript,获取File Footer的信息,再从File Footer里读取Stripe的信息,最后定位到需要读取的数据。

Hive中可以采用如下三种方式使数据存储到ORC文件中:

(1) CREATE TABLE ... STORED AS ORC
(2) ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT ORC
(3) SET hive.default.fileformat=Orc

Hive 0.14.0版本后还可以使用CONCATENATE命令合并ORC文件:

ALTER TABLE table_name [PARTITION partition_spec] CONCATENATE
4. PARQUET

Parquet是面向分析型系统的列式存储格式,由Twitter和Cloudera合作开发,2015年5月成为Apache的顶级项目。
Parquet文件是以二进制格式存储的,所以不能直接读取。
通常情况下,Parquet文件在存储时会按照Block大小设置行组(Row Group)的大小,这样Parquet文件就可以被多个mapper处理,增加了任务的并行度。
Parquet文件格式如下图所示:

一个Parquet文件中可以存储多个行组,文件的首位都是该文件的Magic Number,用于校验它是否是一个Parquet文件。
Footer length记录了文件元数据的大小,通过该值和文件长度可以计算出元数据的偏移量,文件的元数据中包括每一个行组的元数据信息和该文件存储数据的Schema信息。
除了文件中每一个行组的元数据,每一页的开始都会存储该页的元数据,在Parquet中,有三种类型的页:数据页、字典页和索引页。
数据页:用于存储当前行组中该列的值;
字典页:存储该列值的编码字典,每一个列块中最多包含一个字典页;
索引页:用来存储当前行组下该列的索引,目前Parquet中还不支持索引页。
由于Parquet在Hive 0.10 - 0.12中以插件形式存在,Hive 0.13及以后版本才得以集成,所以建表语句有所不同。
Hive 0.10 - 0.12:

CREATE TABLE parquet_test (id int,str string,mp MAP<STRING,STRING>,lst ARRAY<STRING>,strct STRUCT<A:STRING,B:STRING>)
PARTITIONED BY (part string)
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe'STORED ASINPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat';

Hive 0.13+:

CREATE TABLE parquet_test (id int,str string,mp MAP<STRING,STRING>,lst ARRAY<STRING>,strct STRUCT<A:STRING,B:STRING>)
PARTITIONED BY (part string)
STORED AS PARQUET;
总结

Hive支持的文件格式主要有:行存储(TEXTFILE、SEQUENCEFILE) 和列存储(ORC、PARQUET);
在实际生产环境,使用ORC和PARQUET的情况比较多;

【Hive】hive表的文件存储格式相关推荐

  1. hive的四种文件存储格式

    hive分为四种存储格式: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 在其中textfile为默认格式,如果在创建hive表不提及,会默认启动textf ...

  2. 大数据:Hive - ORC 文件存储格式

    一.ORC File文件结构 ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache ...

  3. Hive - ORC 文件存储格式详细解析

    一.ORC File文件结构 ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache ...

  4. (转载)hive文件存储格式

    对于hive格式的认识,先转载后实践再加深认识. 转载地址:http://blog.csdn.net/yfkiss/article/details/7787742 hive在建表是,可以通过'STOR ...

  5. Hive文件存储格式和hive数据压缩

    一.存储格式行存储和列存储 二.Hive文件存储格式 三.创建语句和压缩 一.存储格式行存储和列存储 行存储可以理解为一条记录存储一行,通过条件能够查询一整行数据. 列存储,以字段聚集存储,可以理解为 ...

  6. linux怎么看文件是否orc格式,hive文件存储格式orc,parquet,avro对比

    orc文件存储格式 ORC文件也是以二进制方式列式存储的,所以是不可以直接读取,ORC文件也是自解析的,它包含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的.文件结构如下 ORC文 ...

  7. 【Hive】建表时的存储格式

    目录 一.简介 1.hive建表时存储格式 2.五种存储格式的区别 二.实践操作 1.textfile 2.sequencefile 3.rcfile 4.orc 5.parquet 三.适用场景 一 ...

  8. hive读取hdfs存放文件_Hive基本概念

    1.1 Hive简介 1.1.1 什么是Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 1.1.2 为什么使用Hive 直接 ...

  9. hive 导出json格式 文件_Hive 系列 之 基本操作合集

    下面是本课程概览: (1)hive系列之简介,安装,beeline和hiveserver2 (2)hive系列之基本操作 (3)hive系列之udf (4)hive系列之二级分区和动态分区 (5)hi ...

最新文章

  1. Ubuntu 划词翻译
  2. 中国高校人工智能学院院长 【截止到 2019-05-07】
  3. Rust 交叉编译设置
  4. __builtin__与__builtins__的区别与关系
  5. C# xml通过xslt转换为html输出
  6. Python打包PyPI上传实践
  7. CSDN博客导出备份工具
  8. Lodash常用用法总结
  9. 采样频率和带宽的关系_基于矢量网络分析仪的 TDR 与传统采样示波器 TDR 之间的测量性能和优势比较...
  10. java 应用是单机集群_【架构】Tomcat单机部署多应用Windows
  11. sql去重、or、in、and、groupby的使用
  12. jvm学习笔记(4)——jvm配置调优
  13. 人生规划:20岁到60岁我该干什么
  14. MSSQL调优实战一 乱建聚集索引的后果
  15. 20172331 《Java程序设计》第3周学习总结
  16. init()函数何时运行?
  17. 熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】
  18. Mac 此账户尚未用于app store_App Store调整频繁!游戏App下架数量再次增加! | 8月推广报告...
  19. contest18 CF788 div1 ooxxx oooox oooox
  20. 汇总:web前端优化网页加载速度

热门文章

  1. numpy 转置_Python中Numpy.transpose()
  2. mfc combobox dropdown中编辑框不可输入的属性设置_实践 | 一文知晓MES系统中的批次管控功能...
  3. 用c语言编声光报警子程序,C语言编程的智能火灾报警监测系统
  4. coreldraw水涟漪怎么做_不懂怎么挑选水处理设备?跟贝斯沃了解这3点再做决定,轻松挑出适合自己的...
  5. 必须要会的Linux命令,省时省力
  6. 【阿圆总结】关于平时阅读的推荐
  7. 一个迷失了本性的聊天软件,初衷不在,何其悲伤
  8. Ext3.0中复杂表头样例
  9. Qt 遍历目录下所有图片
  10. app 之间发送文件 ios