我计划在我的hadoop相关项目中使用一种hadoop文件格式。我知道parquet对于基于列的查询是有效的,而avro对于完全扫描或者当我们需要所有的列数据时是有效的!在我继续选择一种文件格式之前,我想了解一种文件格式相对于另一种文件格式的缺点。有人能简单地向我解释一下吗?
6xfqseft1#
你的理解是对的。事实上,我们在dwh中的数据迁移过程中遇到了类似的情况。我们选择了Parquet地板而不是avro,因为我们得到的磁盘节省几乎是avro的两倍。另外,查询处理时间也比avro好得多。但是,是的,我们的查询是基于聚合、基于列的操作等,因此parquet无疑是一个胜利者。我们正在使用cdh发行版的hive 0.12。你提到你遇到了Hive+Parquet地板的问题,这些是什么?我们没有遇到任何问题。
oalqel3c2#
阿夫罗广泛用作序列化平台基于行,提供了一种紧凑而快速的二进制格式模式在文件上进行编码,以便可以取消对数据的标记文件支持块压缩并可拆分支持模式演化parquet面向列的二进制文件格式使用dremel论文中描述的记录分解和组装算法每个数据文件都包含一组行的值在需要查询特定列时,磁盘i/o效率很高从选择hdfs数据存储格式-avro与Parquet地板等
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仍然在这一领域大放异彩。
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来获得更规范化/理智的数据,但我知道,如果使用得当,它可以显著提高性能。
plupiseo5#
有关Parquet地板的说明,请参见:http://bigdata.devcodenote.com/2015/04/parquet-file-format.html我打算很快写一篇关于avro和2之间的比较。一做完就贴在这里。
mlnl4t2r6#
avro是一种基于行的格式。如果您想检索整个数据,可以使用avroParquet是一种基于列的格式。如果您的数据由许多列组成,但您对这些列的子集感兴趣,那么您可以使用parquet当涉及频繁更新数据时,hbase很有用。avro检索速度快,Parquet快得多。
ne5o7dgx7#
silver blaze用一个示例用例很好地描述了这个描述,并描述了Parquet地板是他最好的选择。根据你的要求,考虑一个比另一个更有意义。我把不同的其他文件格式的简要说明以及时空复杂度的比较。希望有帮助。在hive中可以使用很多文件格式。值得一提的是avro,Parquet地板。rcfile和orc。如果您想比较这些文件格式的性能和空间利用率,您可以参考网上提供的一些好的文档。以下是一些有用的链接,会让你去。此博客帖子来自mapr的链接[他们不讨论Parquet地板]来自inquidia的链接以上给出的链接将使你去。我希望这能回答你的问题。谢谢!
7条答案
按热度按时间6xfqseft1#
你的理解是对的。事实上,我们在dwh中的数据迁移过程中遇到了类似的情况。我们选择了Parquet地板而不是avro,因为我们得到的磁盘节省几乎是avro的两倍。另外,查询处理时间也比avro好得多。但是,是的,我们的查询是基于聚合、基于列的操作等,因此parquet无疑是一个胜利者。
我们正在使用cdh发行版的hive 0.12。你提到你遇到了Hive+Parquet地板的问题,这些是什么?我们没有遇到任何问题。
oalqel3c2#
阿夫罗
广泛用作序列化平台
基于行,提供了一种紧凑而快速的二进制格式
模式在文件上进行编码,以便可以取消对数据的标记
文件支持块压缩并可拆分
支持模式演化
parquet
面向列的二进制文件格式
使用dremel论文中描述的记录分解和组装算法
每个数据文件都包含一组行的值
在需要查询特定列时,磁盘i/o效率很高
从选择hdfs数据存储格式-avro与Parquet地板等
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仍然在这一领域大放异彩。
tsm1rwdh4#
如果您还没有决定,我将继续为您的数据编写avro模式。完成后,在avro容器文件和parquet文件之间进行选择就像交换一样简单,例如。,
对于
parquet格式在写端看起来确实有点计算密集——例如,需要ram进行缓冲,cpu进行数据排序等,但它应该减少i/o、存储和传输成本,并有利于高效读取,特别是使用类似sql的(例如。,配置单元(hive或sparksql)查询只处理部分列。
在一个项目中,我最终从parquet恢复到avro容器,因为模式太过广泛和嵌套(从一些相当层次化的面向对象类派生),并导致了1000个parquet列。反过来,我们的行组又宽又浅,这意味着我们需要很长时间才能处理每个组最后一列中的少量行。
我还没有太多机会使用parquet来获得更规范化/理智的数据,但我知道,如果使用得当,它可以显著提高性能。
plupiseo5#
有关Parquet地板的说明,请参见:http://bigdata.devcodenote.com/2015/04/parquet-file-format.html
我打算很快写一篇关于avro和2之间的比较。一做完就贴在这里。
mlnl4t2r6#
avro是一种基于行的格式。如果您想检索整个数据,可以使用avro
Parquet是一种基于列的格式。如果您的数据由许多列组成,但您对这些列的子集感兴趣,那么您可以使用parquet
当涉及频繁更新数据时,hbase很有用。avro检索速度快,Parquet快得多。
ne5o7dgx7#
silver blaze用一个示例用例很好地描述了这个描述,并描述了Parquet地板是他最好的选择。根据你的要求,考虑一个比另一个更有意义。我把不同的其他文件格式的简要说明以及时空复杂度的比较。希望有帮助。
在hive中可以使用很多文件格式。值得一提的是avro,Parquet地板。rcfile和orc。如果您想比较这些文件格式的性能和空间利用率,您可以参考网上提供的一些好的文档。以下是一些有用的链接,会让你去。
此博客帖子
来自mapr的链接[他们不讨论Parquet地板]
来自inquidia的链接
以上给出的链接将使你去。我希望这能回答你的问题。
谢谢!