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 过滤器