Hadoop Avro vs.拼花地板
我计划在我的hadoop相关项目中使用一种hadoop文件格式。我了解parquet对于基于列的查询和avro对于完全扫描或当我们需要所有列数据时是有效的Hadoop Avro vs.拼花地板,hadoop,avro,parquet,Hadoop,Avro,Parquet,我计划在我的hadoop相关项目中使用一种hadoop文件格式。我了解parquet对于基于列的查询和avro对于完全扫描或当我们需要所有列数据时是有效的 在继续选择其中一种文件格式之前,我想了解其中一种格式的缺点/缺点。有人能简单地给我解释一下吗?关于拼花地板的描述,你可以参考这里: 我打算很快写一篇关于Avro的文章,并将两者进行比较。一旦完成,我将在这里发布。如果您还没有决定,我将继续为您的数据编写Avro模式。完成后,在Avro容器文件和拼花地板文件之间进行选择就和交换一样简单,例如 j
在继续选择其中一种文件格式之前,我想了解其中一种格式的缺点/缺点。有人能简单地给我解释一下吗?关于拼花地板的描述,你可以参考这里:
我打算很快写一篇关于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是一种基于行的文件格式,最好用于写密集型操作。这通常由数据工程师使用。两者都支持序列化和压缩格式,尽管它们以不同的方式实现
拼花地板和Avro都支持模式演变,但程度不同。
拼花地板适用于“附加”操作,例如添加列,但不适用于重命名列,除非通过索引完成“读取”。
与拼花地板相比,Avro更适合添加、删除和一般变异柱。历史上,Avro提供了比拼花地板更丰富的模式演变可能性,尽管其
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());