Hive语言手册之五:ORC文件格式



一、关于ORC文件格式( ORCHive0.11开始引入)

ORCOptimized Row Columnar)格式可以高效地存储Hive数据,被设计用来规避其他文件格式存在的缺陷,使用ORC文件格式可以提升Hive读、写与处理数据的性能。ORC文件格式有以下优点:

1、一个任务的输出对应一个文件,从而减轻Namenode的负载压力

2Hive可以支持datetime,decimal和其他复杂类型(包括struct,list,map,union

3、使用存储在文件中的轻型索引,可以

  (1)跳过那些没有经过预复选的行

  (2)定位指定的行

4、基于数据类型的块模式压缩

 (1)对于整数列使用程长度编码

 (2)对于字串列使用字典编码

5、使用分离的RecordReaders对同一文件并行读

6、不使用标签(markers)就可以Split文件

7、为读写操作固定所需的内存

8、元数据存储在协议缓冲区(Protocol Buffers),它允许增加或者删除一些列

 二、文件结构

一个ORC文件包含多个stripes每个stripes由多组行数据组成的)一个包含辅助信息的file footer在文件的结尾,一个postscript保存着压缩参数及被压缩的footer的长度。一个stripes缺省大小是250MB,其大小可以扩展的长度只受HDFS的约束。file footer包含文件中的一个记录stripes信息的列表、每个stripes中行的数目及每个列的数据类型,它也包含列级的聚合结果:count, min, max, and sum。结构如下图所示:

Hive语言手册之五:ORC文件格式_第1张图片


如上图所示,在ORC文件中,每个Stripe包括索引数据、行数据及一个Stripe footerStripe footer包含了用于流定位的目录Row data用于表扫描。索引数据(Indexdata)包括每个列的最小与最大值,以及它们在每个列的行号,行索引项(Rowindex entries)记录了压缩块及解压后字节的偏移。需要注意的是,ORC索引只是被用来选择Stripe和行组,而不会被用于返回查询结果拥有相对频繁的行索引条目,可以为了快速的数据读取而跳过一些行,缺省情况下每次最多可以跳过10000行。ORC有能力基于过滤谓词跳过非常多的行,可以使用第二关键字进行对表进行排序,以达到减少查询执行时间的效果。例如,如果主关键字是交易日期,表可以按照州、邮编或者姓名进行排序,当按照州查询记录的时候将跳过非目标州的记录。

三、使用ORC的HiveQL语法

可以在表级或者分区级指定文件的格式,对表或分区设置ORC格式的HiveQL命令示例如下

CREATE TABLE ... STORED AS ORC ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT ORC SET hive.default.fileformat=Orc

ORC格式的参数通过TBLPROPERTIES来指定,支持的参数有:

关键字

缺省值

说明

orc.compress

ZLIB

压缩方法(NONE, ZLIB, SNAPPY)

orc.compress.size

262,144

每个压缩块的字节数

orc.stripe.size

268435456

每个stripe的字节数

orc.row.index.stride

10,000

索引项之间的行数(number of rows between index entries),至少为1000

orc.create.index

true

是否创建行索引

下面的例子创建了一个没有压缩的ORC格式表:

create table Addresses (
  name string,
  street string,
  city string,
  state string,
  zip int
) stored as orc tblproperties ("orc.compress"="NONE");

注:关于ORC的序列化与压缩的文档实在晦涩难懂,也没有找到更详细的说明材料,在此暂时不对其进行译解。

你可能感兴趣的:(大数据,Hive)