繁体   English   中英

什么时候在Spark中使用Kryo序列化?

[英]When to use Kryo serialization in Spark?

我已经使用conf.set("spark.rdd.compress","true")压缩RDD并且persist(MEMORY_AND_DISK_SER) 使用Kryo序列化会使程序更高效,还是在这种情况下没用? 我知道Kryo用于以更有效的方式在节点之间发送数据。 但是,如果已传输的数据已经压缩,是否需要?

您描述的两个RDD状态(压缩和持久化)都使用序列化。 当您持久保存RDD时,您将序列化并将其保存到磁盘(在您的情况下,也会压缩序列化输出)。 你是对的,序列化也用于shuffle(在节点之间发送数据):任何时候数据需要离开JVM,无论是去本地磁盘还是通过网络,都需要序列化。

Kryo是一个显着优化的序列化程序,并且几乎可以为所有内容执行比标准java序列化程序更好的性能。 在你的情况下,你可能实际上已经在使用Kryo了。 您可以检查spark配置参数:

“spark.serializer”应为“org.apache.spark.serializer.KryoSerializer”。

如果不是,那么您可以在内部设置:

conf.set( "spark.serializer", "org.apache.spark.serializer.KryoSerializer" )

关于你的最后一个问题(“它甚至需要吗?”),很难就此提出一般性的主张。 Kryo优化了沟通数据的一个缓慢步骤,但完全有可能在您的用例中,其他人阻止您。 但是尝试Kryo并对差异进行基准测试并没有什么缺点!

考虑另一点:kyro比序列化和反序列化中的默认更快,因此最好使用kyro。 但是性能的提升可能不如说的那么好,还有其他一些会影响程序速度的点,比如你如何写你的火花代码,你选择哪个lib。

Kryo序列化是一种更优化的序列化技术,因此您可以使用它来序列化在RDD或Dataframe闭包中使用的任何类。 有关Kryo序列化的一些特定信息,请参阅以下内容:

  1. 在RDD或数据帧闭包内序列化第三方非序列化类时使用
  2. 您想要使用高效的序列化技术
  3. 如果由于某个类而出现序列化错误,则可以使用Kryo序列化程序注册该类

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM