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)工作在高度嵌套的数据。

火花和镶木地板是很好的组合

Interesting Posts