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