首页  

ORC文件格式     所属分类 bigdata 浏览量 1554
ORC Optimized Record Columnar
提高hive读写和处理数据的能力

ORC在RCFile的基础上进行了改进 
特定的序列化与反序列化操作 
提供多种RCFile中没有的indexes,提升读取性能
支持复杂的数据结构
ORC的stripe默认大小更大
ORC writer  memory manager 内存管理

记录水平切分为多个stripes,每一个stripe内数据以列为单位进行存储,所有列的内容都保存在同一个文件中
每个stripe默认大小256MB (RCFile stripe 4MB ) 

将复杂数据类型字段解析成多个子字段

Data type	Chile columns
Array	      一个包含所有数组元素的子字段
Map	          两个子字段,一个key字段,一个value字段
Struct	      每一个属性对应一个子字段
Union	      每一个属性对应一个子字段

字段树  叶子节点保存数据  Data Stream

字段的metadata保存在Meta Stream中
字段树中,每一个非叶子节点记录字段的metadata,比如 array ,记录长度
可以使用HDFS的每一个block存储ORC文件的一个stripe ,stripe的大小一般需要设置得比HDFS的block小

稀疏索引(sparse indexes)
位置指针(Position Pointers)索引
数据统计(Data Statistics)索引

数据统计(Data Statistics)索引
count max  min sum
3种level的统计数据
file level statistics 
ORC文件的末尾会记录文件级别的统计信息,记录整个文件中columns的统计信息

stripe level statistics 
index group level statistics 
将一个column的index以一个给定的值(默认10000)分割为多个index组 ,分组统计


Position Pointers
ORC reader需要两个位置信息才能读取数据 
metadata streams和data streams中每个group的开始位置 
stripes的开始位置    保存在File Footer中

文件压缩 两级压缩机制
首先将一个数据流使用流式编码器进行编码,然后使用一个可选的压缩器对数据流进行进一步压缩。 

四种类型数据流
Byte Stream 
Run Length Byte Stream 
Integer Stream 
Bit Field Stream 


ORC writer写数据,会将整个stripe保存在内存中。
stripe的默认值一般比较大,多个ORC writer同时写数据时,可能会导致内存不足。
引入内存管理器 设置阈值 限制writer使用的总内存大小

参数
参数名	默认值	说明
hive.exec.orc.default.stripe.size	          256*1024*1024	stripe的默认大小
hive.exec.orc.default.block.size	          256*1024*1024	orc文件在文件系统中的默认block大小,从hive-0.14开始
hive.exec.orc.dictionary.key.size.threshold	  0.8	String类型字段使用字典编码的阈值
hive.exec.orc.default.row.index.stride	      10000	stripe中的分组大小
hive.exec.orc.default.compress	              ZLIB	ORC文件的默认压缩方式
hive.exec.orc.skip.corrupt.data	              false	遇到错误数据的处理方式,false直接抛出异常,true则跳过该记录



https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-ORCFileFormat

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC

上一篇     下一篇
列式存储引擎Parquet和ORC比较

parquet基本原理

H2数据库使用

flink基础

装逼词汇大全

springboot 使用 servlet 过滤器