2015-06-14 129 views
7

我很努力地理解在Spark中上下文中究竟是Arvo,Kryo和Parquet做了什么。他们都与序列化有关,但我已经看到他们一起使用,所以他们不能做同样的事情。Spark与Arvo,Kryo和Parquet

Parquet将自己描述为一种柱状存储格式,我有种感觉,但是当我保存镶木地板文件时,Arvo或Kryo可以与它做什么?或者它们只在火花工作期间相关,即。在洗牌或溢出到磁盘期间通过网络发送对象? Arvo和Kryo​​有什么不同,以及将它们一起使用会发生什么?

回答

2

这篇非常好的博客文章解释了除Kryo之外的所有内容。

http://grepalex.com/2014/05/13/parquet-file-format-and-object-model/

KRYO将用于快速系列化不涉及永久存储,如随机数据和缓存数据,在内存或磁盘上的临时文件。

+4

因此,如果Parquet是用于高效永久性存储,而Kryo用于快速非永久性存储,那么Arvo会做什么?我什么时候可以使用它? –

4

如果您在查询数据时只需要阅读几列,Parquet就可以很好地工作。然而,如果你的模式有很多列(30+),并且在你的查询/作业中你需要阅读所有这些列,那么基于记录的格式(比如AVRO)会更好/更快地工作。

Parquet的另一个限制是它基本上是一次写入格式。所以通常您需要在某个集结区域收集数据,并将其每天一次写入parquet文件(例如)。

这是您可能想要使用AVRO的地方。例如。您可以在Kafka主题或本地文件中收集AVRO编码的记录,并且可以在一天结束时执行批量作业,将其全部转换为Parquet文件。这很容易实现,这要归功于parquet-avro库,该库提供了可以自动在AVRO和Parquet格式之间进行转换的工具。

当然,您也可以在Spark/BigData之外使用AVRO。这是相当不错的序列化格式,类似于Google Protobuf或Apache Thrift。

相关问题