[英]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序列化的一些特定信息,请参阅以下内容:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.