我计划在hadoop相关项目中使用hadoop文件格式之一。我理解拼板对于基于列的查询是有效的,对于全扫描或当我们需要所有列数据时,也是有效的!
在继续并选择其中一种文件格式之前,我希望了解其中一种格式与另一种格式的缺点/缺点。有人能简单地向我解释一下吗?
发布于 2016-01-29 00:45:00
Avro是一种基于行的格式。如果要检索整个数据,可以使用Avro
拼花是一种基于列的格式。如果您的数据包含许多列,但您对列的子集感兴趣,则可以使用Parquet
当涉及数据的频繁更新时,HBase是有用的。Avro的检索速度快,Parquet的检索速度快得多。
发布于 2015-04-30 22:40:47
如果您还没有决定,我会继续为您的数据编写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 s的Parquet列。反过来,我们的行组又宽又浅,这意味着我们要花费很长时间才能在每个组的最后一列处理少量行。
我还没有多少机会使用Parquet进行更多的规范化/正常数据,但我理解如果使用得好,它将允许显着地提高性能。
发布于 2017-09-17 06:02:47
阿夫罗
[消]拼花
https://stackoverflow.com/questions/28957291
复制相似问题