共计 1023 个字符,预计需要花费 3 分钟才能阅读完成。
ORC 和 Parquet 都是高性能的存储形式,这两种存储格局总会带来存储和性能上的晋升。
1.Parquet
(1)Parquet 反对嵌套的数据模型,相似于 Protocol Buffers,每一个数据模型的 schema 蕴含多个字段,每一个字段有三个属性:反复次数、数据类型和字段名,反复次数能够是以下三种:required(只呈现 1 次),repeated(呈现 0 次或屡次),optional(呈现 0 次或 1 次)。每一个字段的数据类型能够分成两种:group(简单类型) 和 primitive(根本类型)。
(2)Parquet 中没有 Map、Array 这样的简单数据结构,然而能够通过 repeated 和 group 组合来实现的。
(3)因为 Parquet 反对的数据模型比拟涣散,可能一条记录中存在比拟深的嵌套关系,如果为每一条记录都保护一个相似的树状结可能会占用较大的存储空间,因而 Dremel 论文中提出了一种高效的对于嵌套数据格式的压缩算法:Striping/Assembly 算法。通过 Striping/Assembly 算法,parquet 能够应用较少的存储空间示意简单的嵌套格局,并且通常 Repetition level 和 Definition level 都是较小的整数值,能够通过 RLE 算法对其进行压缩,进一步升高存储空间。
Parquet 文件是以二进制形式存储的,是不能够间接读取和批改的,Parquet 文件是自解析的,文件中包含该文件的数据和元数据。
2.ORC
(1)ORC 文件是自描述的,它的元数据应用 Protocol Buffers 序列化,并且文件中的数据尽可能的压缩以升高存储空间的耗费;
(2)和 Parquet 相似,ORC 文件也是以二进制形式存储的,所以是不能够间接读取,大数据培训 ORC 文件也是自解析的,它蕴含许多的元数据,这些元数据都是同构 ProtoBuffer 进行序列化的;
ORC 和 Parquet 存储的长处有哪些?
(3)ORC 会尽可能合并多个离散的区间尽可能的缩小 I / O 次数;
(4)ORC 中应用了更加准确的索引信息,使得在读取数据时能够指定从任意一行开始读取,更细粒度的统计信息使得读取 ORC 文件跳过整个 row group,ORC 默认会对任何一块数据和索引信息应用 ZLIB 压缩,因而 ORC 文件占用的存储空间也更小;
(5)在新版本的 ORC 中也退出了对 Bloom Filter 的反对,它能够进一步晋升谓词下推的效率,在 Hive 1.2.0 版本当前也退出了对此的反对。