Hadoop Avro vs.拼花地板

Hadoop Avro vs.拼花地板,hadoop,avro,parquet,Hadoop,Avro,Parquet,我计划在我的hadoop相关项目中使用一种hadoop文件格式。我了解parquet对于基于列的查询和avro对于完全扫描或当我们需要所有列数据时是有效的 在继续选择其中一种文件格式之前,我想了解其中一种格式的缺点/缺点。有人能简单地给我解释一下吗?关于拼花地板的描述,你可以参考这里: 我打算很快写一篇关于Avro的文章,并将两者进行比较。一旦完成,我将在这里发布。如果您还没有决定,我将继续为您的数据编写Avro模式。完成后,在Avro容器文件和拼花地板文件之间进行选择就和交换一样简单,例如 j

我计划在我的hadoop相关项目中使用一种hadoop文件格式。我了解parquet对于基于列的查询和avro对于完全扫描或当我们需要所有列数据时是有效的


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

关于拼花地板的描述,你可以参考这里:


我打算很快写一篇关于Avro的文章,并将两者进行比较。一旦完成,我将在这里发布。

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

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

拼花格式在写端似乎更需要计算——例如,需要RAM进行缓冲,CPU进行数据排序等。但它应该减少I/O、存储和传输成本,并有利于高效读取,特别是在类似SQL的情况下(例如,Hive或SparkSQL)只处理部分列的查询

在一个项目中,我最终从拼花恢复到Avro容器,因为模式过于广泛和嵌套(从一些相当层次化的面向对象类派生),并导致1000个拼花列。反过来,我们的行组又宽又浅,这意味着我们要花很长时间才能处理每个组最后一列中的少量行


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

您的理解是正确的。事实上,我们在DWH中的数据迁移过程中遇到了类似的情况。我们选择了拼花地板而不是Avro,因为我们节省的磁盘空间几乎是Avro的两倍。而且,查询处理时间比Avro好得多。但是,是的,我们的查询是基于聚合、基于列的操作等。因此,可以预见,Parquet显然是赢家


我们正在使用CDH发行版的Hive 0.12。你提到你遇到了蜂巢+拼花地板的问题,这些是什么?我们没有遇到任何问题。

Silver Blaze将描述与示例用例很好地结合起来,并描述了拼花地板是他最好的选择。根据你的要求考虑另一个是有意义的。我还将简要介绍其他不同的文件格式,并进行时空复杂度比较。希望有帮助

您可以在配置单元中使用多种文件格式。值得一提的是AVRO,拼花地板。RCFile&ORC。如果您想比较这些文件格式的性能和空间利用率,可以参考联机提供的一些好文档。下面是一些有用的链接,这些链接将帮助您继续

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


谢谢

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

拼花地板是一种基于列的格式。如果您的数据由许多列组成,但您对这些列的子集感兴趣,那么您可以使用拼花地板

当涉及频繁更新数据时,HBase非常有用。Avro检索速度快,拼花地板检索速度快得多。

Avro

  • 广泛用作序列化平台
  • 基于行,提供了一种紧凑、快速的二进制格式
  • 模式在文件上进行编码,因此可以取消标记数据
  • 文件支持块压缩且可拆分
  • 支持模式演化
拼花地板

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

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

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

  • 工具:拼花地板非常适合黑斑羚。(Impala是一个大规模并行处理(MPP)RDBM SQL查询引擎,它知道如何对驻留在一个或几个外部存储引擎中的数据进行操作。)同样,Parquet非常适合复杂/交互式查询,并且可以在HDFS中快速(低延迟)输出数据。CDH(clouderadistributionhadoop)支持这一点。Hadoop支持Apache的优化行-列(ORC)格式(选择取决于Hadoop发行版),而Avro最适合Spark处理

  • 模式演化:演化数据库模式意味着改变数据库的结构,从而改变其数据,从而改变其查询处理
    拼花地板和Avro都支持模式演变,但程度不同。
    拼花地板适用于“附加”操作,例如添加列,但不适用于重命名列,除非通过索引完成“读取”。
    与拼花地板相比,Avro更适合添加、删除和一般变异柱。历史上,Avro提供了比拼花地板更丰富的模式演变可能性,尽管其
    job.setOutputFormatClass(AvroParquetOutputFormat.class);
    AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());