Parquet vs ORC与ORC与Snappy
我正在对Hive提供的存储格式进行一些testing,并使用Parquet和ORC作为主要选项。 我包括ORC一次默认压缩和一次与Snappy。
我已经阅读了很多文件,说明Parquet在时间/空间复杂性方面与ORC相比更好,但是我的testing与我所经历的文件相反。
跟随我的数据的一些细节。
Table A- Text File Format- 2.5GB Table B - ORC - 652MB Table C - ORC with Snappy - 802MB Table D - Parquet - 1.9 GB
就桌子的压缩而言,镶木地板是最差的。
我的testing结果如下。
行计数操作
Text Format Cumulative CPU - 123.33 sec Parquet Format Cumulative CPU - 204.92 sec ORC Format Cumulative CPU - 119.99 sec ORC with SNAPPY Cumulative CPU - 107.05 sec
列操作的总和
Text Format Cumulative CPU - 127.85 sec Parquet Format Cumulative CPU - 255.2 sec ORC Format Cumulative CPU - 120.48 sec ORC with SNAPPY Cumulative CPU - 98.27 sec
列操作的平均值
Text Format Cumulative CPU - 128.79 sec Parquet Format Cumulative CPU - 211.73 sec ORC Format Cumulative CPU - 165.5 sec ORC with SNAPPY Cumulative CPU - 135.45 sec
使用where子句从给定范围中select4列
Text Format Cumulative CPU - 72.48 sec Parquet Format Cumulative CPU - 136.4 sec ORC Format Cumulative CPU - 96.63 sec ORC with SNAPPY Cumulative CPU - 82.05 sec
这是否意味着ORC比Parquet更快? 还是有什么我可以做的,使查询响应时间和压缩比更好地工作?
谢谢!
我会说,这两种格式都有自己的优势。
如果你有高度嵌套的数据,镶木地板可能会更好,因为它将元素存储为像Google Dremel那样的树( 请参见此处 )。
如果您的文件结构变平坦,Apache ORC可能会更好。
而据我所知,实木复合地板还不支持索引。 ORC带有一个轻量级的索引,而且自Hive 0.14以来,额外的布隆filter可能会有助于更好的查询响应时间,特别是在求和操作时。
Parquet默认压缩是SNAPPY。 表A – B – C和D保持相同的数据集? 如果是的话,它只能压缩到1.9 GB,看起来好像有一些阴影
你看到这个是因为:
-
蜂巢有一个vectorORC阅读器,但没有vector拼花阅读器。
-
Spark有一个vector化镶木地板阅读器,没有vector化的ORC阅读器。
-
火花与木地板performance最好,蜂房与ORCperformance最好。
我在使用Spark运行ORC和Parquet时看到了类似的差异。
向量化意味着行被批量解码,大大提高了内存的位置和caching利用率。
(正确的Hive 2.0和Spark 2.1)
蜂房中configurationORC的两个最大的考虑是:
Stinger倡议中提供的许多性能改进取决于ORC格式的特性,包括每列的块级索引。 这导致更高效的I / O,如果Hive确定谓词值不存在,Hive可以跳过读取整个数据块。 另外,基于成本的优化器能够考虑在ORC文件中存在的列级元数据,以便生成最有效的图。
只有在使用ORC作为文件格式时,ACID事务才是可能的。
在Spark的ORC上实现Parquet的一些注意事项是:1)在spark中轻松创buildDataframes。 不需要指定模式。 2)工作在高度嵌套的数据。
火花和镶木地板是很好的组合