Avro vs. Parquet

Abh*_*hek 82 hadoop avro parquet

我打算在hadoop相关项目中使用hadoop文件格式之一.我知道实木复合地板对于基于列的查询是有效的,而avro可用于全扫描或当我们需要所有列数据时!

在我继续选择其中一种文件格式之前,我想了解一种文件格式的缺点/缺点.任何人都可以用简单的语言向我解释一下吗?

ste*_*r25 51

如果您还没有决定,我会继续为您的数据编写Avro架构.一旦完成,在Avro容器文件和Parquet文件之间进行选择就像交换一样简单,例如,

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
Run Code Online (Sandbox Code Playgroud)

对于

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
Run Code Online (Sandbox Code Playgroud)

Parquet格式似乎在写入方面的计算密集程度更高 - 例如,需要RAM用于缓冲和CPU用于订购数据等,但它应该降低I/O,存储和传输成本以及提高效率特别是使用类似SQL的(例如,Hive或SparkSQL)查询来读取只能查询部分列的查询.

在一个项目中,我最终从Parquet恢复到Avro容器,因为模式过于广泛和嵌套(从一些相当分层的面向对象的类派生)并导致1000个Parquet列.反过来,我们的行组实际上是宽而浅的,这意味着我们可以在每个组的最后一列中处理少量行之前花费很长时间.

我没有太多机会使用Parquet获得更多标准化/合理的数据,但据我所知,如果使用得当,它可以显着提高性能.

  • 我认为 Parquet 适用于大多数用例,除了同一列中的数据变化很大,并且几乎总是对所有列进行分析。 (4认同)
  • Parquet 也支持嵌套的数据集/集合。 (2认同)
  • 是的,在镶木地板上写数据更加昂贵.读取是相反的,特别是如果您的查询通常读取列的子集. (2认同)

Ara*_*mar 47

Avro是一种基于行的格式.如果要整体检索数据,可以使用Avro

Parquet是基于列的格式.如果您的数据包含很多列,但您对列的子集感兴趣,那么您可以使用Parquet

当您经常更新数据时,HBase非常有用.Avro检索速度快,Parquet更快.

  • 请在最后一段中修正最后2个句子。他们是完全不可理解的。 (2认同)

sec*_*ree 33

Avro公司

  • 广泛用作序列化平台
  • 基于行,提供紧凑和快速的二进制格式
  • 模式在文件上编码,因此数据可以是无标记的
  • 文件支持块压缩并且可以拆分
  • 支持模式演变

实木复合地板

  • 面向列的二进制文件格式
  • 使用Dremel文件中描述的记录粉碎和装配算法
  • 每个数据文件都包含一组行的值
  • 需要查询特定列时,在磁盘I/O方面高效

选择HDFS数据存储格式 - Avro vs. Parquet等等


小智 22

两种格式的使用取决于用例.根据3个因素,我们可以选择在我们的案例中选择哪种格式:

  1. 读/写操作:Parquet是基于列的文件格式,因此支持索引,因此它适用于读取密集型,复杂或分析性查询,低延迟数据.这通常由最终用户/数据科学家使用.而AVRO是一种基于行的文件格式,最适合写入密集型操作.这通常由数据工程师使用.两者都支持序列化和压缩格式.

  2. 工具:Parquet最适合Impala(有MPP引擎),因为它负责复杂/交互式查询和低延迟输出.这得到了CDH的支持.像这样HDP支持ORC格式(选择也取决于hadoop分布).而Avro最适合Spark处理.

  3. 模式演变:意味着通过转换和处理来更改数据模式.Parquet和Avro都支持模式演变,但在某种程度上.相比之下,Avro提供了更丰富的Schema演变.当我们进行一些追加操作(如添加列)时,Parquet很好,但Avro适用于追加,删除和修改操作.与Parquet相比,Avro在这里闪耀得更好.

  • “工具”部分有点误导。Parquet被Spark,Presto,Hive等许多其他框架有效地使用。Avro并非特定于Spark,它被广泛用作HDFS存储格式和消息传递方案,例如在Kafka中。 (4认同)
  • Aakash Aggarwal:您能否用“ Avro最适合Spark处理”来解释第2段中的意思?正如devrimbaris提到的,Parquet也很好地集成在Spark处理环境中。o_O?!? (2认同)

Sil*_*aze 9

你的理解是正确的.事实上,我们在DWH中的数据迁移过程中遇到了类似的情况.我们选择Parquet over Avro,因为我们获得的磁盘节省几乎是我们用AVro获得的两倍.此外,查询处理时间比Avro好得多.但是,是的,我们的查询基于聚合,基于列的操作等.因此,Parquet可以说是一个明显的赢家.

我们正在使用CDH发行版的Hive 0.12.你提到你遇到了Hive + Parquet的问题,那是什么?我们没有遇到任何问题.


Rah*_*hul 5

Silver Blaze 用一个示例用例很好地进行了描述,并描述了 Parquet 如何成为他的最佳选择。根据您的要求考虑一个而不是另一个是有意义的。我也在简要描述不同的其他文件格式以及时间空间复杂度比较。希望有帮助。

您可以在 Hive 中使用多种文件格式。值得注意的是 AVRO、Parquet。RCFile & ORC。如果您想比较这些文件格式的性能和空间利用率,可以参考一些在线不错的文档。遵循一些有用的链接,可以帮助您前进。

这篇博文

这个来自 MapR 的链接 [他们不讨论 Parquet]

这个链接来自 Inquidia

上面给出的链接会让你继续。我希望这能回答您的疑问。

谢谢!