目录
存储格式
Text,Sequence,RCfile,ORC,Parquet,AVRO
Text:可读性好,占用磁盘空间大(文本 行式存储),使用但是不常用
Sequence:Hadoop API提供的一种二进制文件,以key,value的形式序列化带文件中(二进制 行式存储)
RCfile:面向列的存储格式(二进制 列式存储,压缩)
ORC:RCfile的升级版,优化了压缩、查询(二进制列式存储,压缩),文件可切分,支持复杂的数据结构,常用的压缩格式Lzip,Snappy,压缩、解压一般是冲突的在
Parquet:存储嵌套式数据,如json;支持更多编码;可以很sparkSQL很好的结合。列式存储高压缩(二进制列式存储,高压缩)压缩和查询性能比ORC稍差
ORC(Optimized Row Columnar)
ORC的数据存储方式
存储过程中,记录会被横向切分成多个stripes,每个stripes内的数据以列为单位进行存储,
所有列的内容保存在同一个文件中,通过配置对block压缩,设置HDFS的每个block存储ORC文件
的一个stripe。每个stripe的默认大小为256MB,相对于RCFile每个4MB的stripe而言,更大的stripe
使ORC的数据读取更加高效。
首先根据行组分割整个表,在每一个行组内进行按列存储
元数据使用Protocol Buffers序列化,并且文件中的数据尽可能的压缩以降低存储空间的消耗
目前也被Hive SQL、Spark SQL、Presto等查询引擎支持
设置stripe的只保存在一个block上的话,如果当前block上的剩余空间不足以存储下一个strpie,
ORC的writer接下来会将数据打散保存在block剩余的空间上,直到这个block存满为止。这样,下
一个stripe又会从下一个block开始存储。
ORC具有以下一些优势:
ORC是列式存储,有多种文件压缩方式,并且有着很高的压缩比。
文件是可切分(Split)的。因此,在Hive中使用ORC作为表的文件存储格式,不仅节省HDFS存储
资源,查询任务的输入数据量减少,使用的MapTask也就减少了。
提供了多种索引,row group index、bloom filter index。
ORC可以支持复杂的数据结构(比如Map等)
ORC中的特定的序列化与反序列化操作可以使ORC file writer根据数据类型进行写出。