我很难理解Arvo,Kryo和Parquet究竟在Spark的背景下做了什么。它们都与序列化有关,但我看到它们一起使用,所以它们不能做同样的事情。
Parquet将其自身描述为柱状存储格式,我有点理解,但是当我保存镶木地板文件时,Arvo或Kryo可以与它有什么关系吗?或者它们仅在火花工作期间相关,即。在洗牌或溢出到磁盘期间通过网络发送对象? Arvo和Kryo如何区别以及当你一起使用它们会发生什么?
答案 0 :(得分:5)
当您在查询数据时只需阅读几列时,Parquet的效果非常好。但是,如果您的架构有很多列(30+),并且在您的查询/作业中需要阅读所有这些列,那么基于记录的格式(如AVRO)将更好/更快地工作。
Parquet的另一个限制是它本质上是一次写入格式。因此,通常您需要在某个临时区域收集数据,并将其每天写入一个镶木地板文件(例如)。
这是您可能想要使用AVRO的地方。例如。您可以在Kafka主题或本地文件中收集AVRO编码的记录,并拥有一个批处理作业,在一天结束时将所有这些记录转换为Parquet文件。这可以很容易实现,因为timber-avro库提供了自动转换AVRO和Parquet格式的工具。
当然,您可以在Spark / BigData之外使用AVRO。这是一个相当好的序列化格式,类似于Google Protobuf或Apache Thrift。
答案 1 :(得分:3)
这篇非常好的博客文章解释了除Kryo之外的所有细节。
http://grepalex.com/2014/05/13/parquet-file-format-and-object-model/
Kryo将用于快速序列化,不涉及永久存储,例如随机数据和缓存数据,在内存或磁盘上作为临时文件。