Spark的序列化 默認(rèn)為org.apache.spark.serializer.JavaSerializer,可選org.apache.spark.serializer.KryoSerializer,實(shí)際上只要是org.apache.spark.serializer的子類就可以了,不過(guò)如果只是應(yīng)用,大概你不會(huì)自己去實(shí)現(xiàn)一個(gè)的。
序列化對(duì)于spark應(yīng)用的性能來(lái)說(shuō),還是有很大影響的,在特定的數(shù)據(jù)格式的情況下,KryoSerializer的性能可以達(dá)到JavaSerializer的10倍以上,當(dāng)然放到整個(gè)Spark程序中來(lái)考量,比重就沒(méi)有那么大了,但是以Wordcount為例,通常也很容易達(dá)到30%以上的性能提升。
而對(duì)于一些Int之類的基本類型數(shù)據(jù),性能的提升就幾乎可以忽略了。
KryoSerializer依賴Twitter的Chill庫(kù)來(lái)實(shí)現(xiàn),相對(duì)于JavaSerializer,主要的問(wèn)題在于不是所有的Java Serializable對(duì)象都能支持。
需要注意的是,這里可配的Serializer針對(duì)的對(duì)象是Shuffle數(shù)據(jù),以及RDD Cache等場(chǎng)合,而Spark Task的序列化是通過(guò)spark.closure.serializer來(lái)配置,但是目前只支持JavaSerializer。