我计划为我的hadoop相关项目使用hadoop文件格式之一。我了解镶木地板对于基于列的查询和avro进行全面扫描或需要所有列数据都是有效的!
在继续选择一种文件格式之前,我想了解一种相对于另一种的缺点/缺点。有人可以简单地向我解释吗?
Answers:
如果您还没有决定,我将继续为您的数据编写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容器,因为该模式过于广泛和嵌套(源自某些相当分层的面向对象的类),并导致了数千个Parquet列。反过来,我们的行组确实又宽又浅,这意味着要花很长时间才能在每个组的最后一列中处理少量的行。
我还没有太多机会使用Parquet来处理更规范化/合理的数据,但是我知道,如果使用得当,它可以显着提高性能。
Avro是基于行的格式。如果要整体检索数据,可以使用Avro
实木复合地板是基于列的格式。如果您的数据包含很多列,但您对列的子集感兴趣,则可以使用Parquet
当涉及到频繁的数据更新时,HBase很有用。Avro的检索速度很快,Parquet的速度要快得多。
阿夫罗
木地板
Avro和Parquet都是“自描述”的存储格式,这意味着在将数据存储在文件中时,它们都嵌入数据,元数据信息和架构。两种存储格式的使用取决于用例。您可以选择三个方面的依据,以选择适合您情况的最佳格式:
读/写操作:Parquet是基于列的文件格式。它支持索引。因此,它适用于一次写入和读取密集,复杂或分析性查询,低延迟数据查询。最终用户/数据科学家通常使用此方法。
同时,Avro是基于行的文件格式,最适合用于写密集型操作。通常由数据工程师使用。两者都支持序列化和压缩格式,尽管它们以不同的方式进行。
工具:实木复合地板非常适合Impala。(Impala是一种大规模并行处理(MPP)RDBM SQL查询引擎,它知道如何对一个或几个外部存储引擎中的数据进行操作。)Parquet同样非常适合复杂/交互式查询和快速(低延迟) )输出HDFS中的数据。CDH(Cloudera Distribution Hadoop)支持此功能。Hadoop支持Apache的Optimized Row Columnar(ORC)格式(选择取决于Hadoop分布),而Avro最适合Spark处理。
模式演变:发展数据库计划意味着改变数据库的结构,从而改变其数据,从而改变其查询处理。
Parquet和Avro都支持模式演变,但程度不同。
Parquet对于“添加”操作(例如添加列)很有用,但不适用于重命名列,除非通过索引完成“读取”。
与Parquet相比,Avro更适合于追加,删除列和通常的变异列。从历史上看,Avro提供了比Parquet更为丰富的模式演化可能性,尽管其模式演化能力趋于模糊,但与Parquet相比,Avro仍然在该领域大放异彩。
Silver Blaze通过一个示例用例很好地描述了产品,并描述了Parquet对他而言是最佳选择。根据您的要求,一个考虑另一个是有意义的。我还将对其他文件格式进行简要说明,并进行时空复杂度比较。希望能有所帮助。
您可以在Hive中使用一堆文件格式。值得注意的是AVRO,镶木地板。RCFile和ORC。如果您想比较这些文件格式的性能和空间利用率,可以在线参考一些好的文档。遵循一些有用的链接,这些链接将带您进入。
以上给出的链接将带您进入。希望这个回答您的查询。
谢谢!
只是有关Parquet的描述,您可以在这里参考:http : //bigdata.devcodenote.com/2015/04/parquet-file-format.html
我打算很快写有关Avro的文章,以及两者之间的比较。完成后将在此处发布。