Avro 对 Parquet

我计划使用我的 hadoop 相关项目的 hadoop 文件格式之一。我 明白拼花地板是有效的列为基础的查询和全面扫描或当我们需要所有的列数据!

在继续并选择其中一种文件格式之前,我想了解一种格式相对于另一种格式的缺点。有人能简单地给我解释一下吗?

107886 次浏览

如果您还没有决定,我将继续为您的数据编写 Avro 模式。一旦这样做了,在 Avro 容器文件和 Parquet 文件之间进行选择就像交换一样简单,

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

for

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

Parquet 格式似乎在写方面的计算更加密集——例如,需要 RAM 来缓冲和 CPU 来排序数据等等,但是它应该能够降低 I/O、存储和传输成本,并且能够有效地读取,特别是在 SQL 类查询(例如 Hive 或 SparkSQL)中,这些查询只处理列的一部分。

In one project, I ended up reverting from Parquet to Avro containers because the schema was too extensive and nested (being derived from some fairly hierarchical object-oriented classes) and resulted in 1000s of Parquet columns. In turn, our row groups were really wide and shallow which meant that it took forever before we could process a small number of rows in the last column of each group.

我还没有太多的机会使用 Parquet 来获得更规范化/理智的数据,但我知道如果使用得当,它可以显著提高性能。

你的理解是对的。实际上,我们在 DWH 中的数据迁移过程中遇到了类似的情况。我们选择了 Parquet 而不是 AVro,因为我们得到的磁盘节省几乎是 AVro 的两倍。此外,查询处理时间远远优于 Avro。但是,是的,我们的查询是基于聚合,列基于操作等,因此 Parquet 是一个明显的赢家。

We are using Hive 0.12 from CDH distro. You mentioned you are running into issues with Hive+Parquet, what are those? We did not encounter any.

Silver Blaze 将描述与示例用例很好地结合起来,并描述了 Parquet 是他的最佳选择。根据您的需求考虑其中一个是有意义的。我把不同的其他文件格式的简短描述太随着时间空间复杂性的比较。希望能帮上忙。

您可以在 Hive 中使用许多文件格式。值得注意的是 AVRO Parquet。RCFile & ORC.如果您想比较这些文件格式的性能和空间利用率,可以参考网上的一些好文档。下面是一些有用的链接,可以让你继续下去。

This Blog Post 这篇博客文章

这个链接来自 MapR [他们没有讨论 Parquet ]

这个链接来自 Inquidia

以上给出的链接会让你去。我希望这个回答你的问题。

谢谢!

Avro 是一种基于 Row 的格式。如果你想检索整个数据,你可以使用 Avro

Parquet is a Column based format. If your data consists of a lot of columns but you are interested in a subset of columns then you can use Parquet

当涉及到频繁的数据更新时,HBase 是非常有用的。

阿弗罗

  • 广泛用作序列化平台
  • 基于行,提供了一种紧凑和快速的二进制格式
  • 架构在文件中进行编码,因此可以取消对数据的标记
  • Files support block compression and are splittable
  • 支持模式演化

镶木地板

  • 面向列的二进制文件格式
  • 使用 Dremel 论文中描述的记录分解和汇编算法
  • 每个数据文件包含一组行的值
  • 当需要查询特定的列时,在磁盘 I/O 方面效率很高

来自 选择 HDFS 数据存储格式-Avro 与 Parquet 等

Avro 和 Parquet 都是“自描述”存储格式,这意味着在将数据存储在文件中时,它们都会嵌入数据、元数据信息和模式。 存储格式的使用取决于用例。三个方面构成了你可以选择最适合你情况的格式的基础:

  1. Read/Write 操作 : Parquet 是一种基于列的文件格式。它支持索引。因此,它适合于一次写入和读密集型、复杂或分析查询、低延迟数据查询。这通常由终端用户/数据科学家使用。
    同时 Avro 作为一种基于行的文件格式,最适合于写密集型操作。这通常由数据工程师使用。两者都支持序列化和压缩格式,尽管方式不同。

  2. Tools : Parquet 非常适合 Impala。(Impala 是一个大规模并行处理(MPP) RDBM SQL 查询引擎,它知道如何操作驻留在一个或几个外部存储引擎中的数据。)同样,Parquet 适用于复杂/交互式查询以及 HDFS 中数据的快速(低延迟)输出。CDH (Cloudera 分布 Hadoop)支持这一点。Hadoop 支持 Apache 的 Optimized Row Columnar (ORC)格式(选择取决于 Hadoop 发行版) ,而 Avro 最适合 Spark 处理。

  3. 模式进化 : 进化数据库模式意味着改变数据库的结构,从而改变其数据,进而改变其查询处理。Parquet 和 Avro 都支持模式演化,但程度不同。
    Parquet 适用于“ append”操作,例如添加列,但不适用于重命名列,除非通过索引执行“ read”。
    Avro 比 Parquet 更适合添加、删除和变异列。从历史上看,Avro 提供了比 Parquet 更丰富的模式演化可能性,尽管它们的模式演化能力往往模糊不清,但与 Parquet 相比,Avro 仍然在这方面表现出色。