avro与Parquet地板

8i9zcol2  于 2021-05-30  发布在  Hadoop
关注(0)|答案(7)|浏览(449)

我计划在我的hadoop相关项目中使用一种hadoop文件格式。我知道parquet对于基于列的查询是有效的,而avro对于完全扫描或者当我们需要所有的列数据时是有效的!
在我继续选择一种文件格式之前,我想了解一种文件格式相对于另一种文件格式的缺点。有人能简单地向我解释一下吗?

6xfqseft

6xfqseft1#

你的理解是对的。事实上,我们在dwh中的数据迁移过程中遇到了类似的情况。我们选择了Parquet地板而不是avro,因为我们得到的磁盘节省几乎是avro的两倍。另外,查询处理时间也比avro好得多。但是,是的,我们的查询是基于聚合、基于列的操作等,因此parquet无疑是一个胜利者。
我们正在使用cdh发行版的hive 0.12。你提到你遇到了Hive+Parquet地板的问题,这些是什么?我们没有遇到任何问题。

oalqel3c

oalqel3c2#

阿夫罗
广泛用作序列化平台
基于行,提供了一种紧凑而快速的二进制格式
模式在文件上进行编码,以便可以取消对数据的标记
文件支持块压缩并可拆分
支持模式演化
parquet
面向列的二进制文件格式
使用dremel论文中描述的记录分解和组装算法
每个数据文件都包含一组行的值
在需要查询特定列时,磁盘i/o效率很高
从选择hdfs数据存储格式-avro与Parquet地板等

dohp0rv5

dohp0rv53#

avro和parquet都是“自描述”的存储格式,这意味着在文件中存储数据时都嵌入了数据、元数据信息和模式。任何一种存储格式的使用都取决于用例。以下三个方面构成了您选择最佳格式的基础:
读/写操作:parquet是一种基于列的文件格式。它支持索引。因此,它适合于一次写入和读取密集型、复杂或分析查询、低延迟数据查询。这通常由最终用户/数据科学家使用。
同时,avro作为一种基于行的文件格式,最适合用于写密集型操作。这通常由数据工程师使用。两者都支持序列化和压缩格式,尽管它们的方式不同。
工具:Parquet地板很适合 Impala (impala是一个大型并行处理(mpp)rdbm sql查询引擎,它知道如何对驻留在一个或几个外部存储引擎中的数据进行操作。)同样,parquet非常适合复杂/交互式查询和对hdfs中数据的快速(低延迟)输出。cdh(clouderadistributionhadoop)支持这一点。hadoop支持apache的优化行-列(orc)格式(选择取决于hadoop发行版),而avro最适合spark处理。
模式演化:演化数据库模式意味着改变数据库的结构、数据和查询处理。
parquet和avro都支持模式演化,但程度不同。
parquet适用于“append”操作,例如添加列,但不适用于重命名列,除非通过索引执行“read”。
avro比parquet更适合于附加、删除和通常的变异列。历史上,avro提供了比parquet更丰富的模式演化可能性,尽管它们的模式演化能力趋于模糊,但与parquet相比,avro仍然在这一领域大放异彩。

tsm1rwdh

tsm1rwdh4#

如果您还没有决定,我将继续为您的数据编写avro模式。完成后,在avro容器文件和parquet文件之间进行选择就像交换一样简单,例如。,

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());

对于

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());

parquet格式在写端看起来确实有点计算密集——例如,需要ram进行缓冲,cpu进行数据排序等,但它应该减少i/o、存储和传输成本,并有利于高效读取,特别是使用类似sql的(例如。,配置单元(hive或sparksql)查询只处理部分列。
在一个项目中,我最终从parquet恢复到avro容器,因为模式太过广泛和嵌套(从一些相当层次化的面向对象类派生),并导致了1000个parquet列。反过来,我们的行组又宽又浅,这意味着我们需要很长时间才能处理每个组最后一列中的少量行。
我还没有太多机会使用parquet来获得更规范化/理智的数据,但我知道,如果使用得当,它可以显著提高性能。

plupiseo

plupiseo5#

有关Parquet地板的说明,请参见:http://bigdata.devcodenote.com/2015/04/parquet-file-format.html
我打算很快写一篇关于avro和2之间的比较。一做完就贴在这里。

mlnl4t2r

mlnl4t2r6#

avro是一种基于行的格式。如果您想检索整个数据,可以使用avro
Parquet是一种基于列的格式。如果您的数据由许多列组成,但您对这些列的子集感兴趣,那么您可以使用parquet
当涉及频繁更新数据时,hbase很有用。avro检索速度快,Parquet快得多。

ne5o7dgx

ne5o7dgx7#

silver blaze用一个示例用例很好地描述了这个描述,并描述了Parquet地板是他最好的选择。根据你的要求,考虑一个比另一个更有意义。我把不同的其他文件格式的简要说明以及时空复杂度的比较。希望有帮助。
在hive中可以使用很多文件格式。值得一提的是avro,Parquet地板。rcfile和orc。如果您想比较这些文件格式的性能和空间利用率,您可以参考网上提供的一些好的文档。以下是一些有用的链接,会让你去。
此博客帖子
来自mapr的链接[他们不讨论Parquet地板]
来自inquidia的链接
以上给出的链接将使你去。我希望这能回答你的问题。
谢谢!

相关问题