Kryo序列化

Spark序列化概述

在Spark的架構中赖瞒,在網絡中傳遞的或者緩存在內存愕贡、硬盤中的對象需要進行序列化操作穆律,序列化的作用主要是利用時間換空間:

  • 分發(fā)給Executor上的Task
  • 需要緩存的RDD(前提是使用序列化方式緩存)
  • 廣播變量
  • Shuffle過程中的數(shù)據(jù)緩存
  • 使用receiver方式接收的流數(shù)據(jù)緩存
  • 算子函數(shù)中使用的外部變量

? 上面的六種數(shù)據(jù)读慎,通過Java序列化(默認的序列化方式)形成一個二進制字節(jié)數(shù)組怕品,大大減少了數(shù)據(jù)在內存、硬盤中占用的空間易迹,減少了網絡數(shù)據(jù)傳輸?shù)拈_銷宰衙,并且可以精確的推測內存使用情況,降低GC頻率睹欲。

? 其好處很多供炼,但是缺陷也很明顯:

? 把數(shù)據(jù)序列化為字節(jié)數(shù)組、把字節(jié)數(shù)組反序列化為對象的操作,是會消耗CPU劲蜻、延長作業(yè)時間的陆淀,從而降低了Spark的性能。 至少默認的Java序列化方式在這方面是不盡如人意的先嬉。Java序列化很靈活但性能較差轧苫,同時序列化后占用的字節(jié)數(shù)也較多。


? 所以官方也推薦盡量使用Kryo的序列化庫(版本2)疫蔓。官文介紹含懊,Kryo序列化機制比Java序列化機制性能提高10倍左右,Spark之所以沒有默認使用Kryo作為序列化類庫衅胀,是因為它不支持所有對象的序列化岔乔,同時Kryo需要用戶在使用前注冊需要序列化的類型,不夠方便滚躯。


相關配置參數(shù)

Property Name Default
spark.serializer org.apache.spark.serializer.JavaSerializer
spark.kryoserializer.buffer 64k
spark.kryoserializer.buffer.max 64m
spark.kryo.classesToRegister none
spark.kryo.referenceTracking true
spark.kryo.registrationRequired false
spark.kryo.registrator none
spark.kryo.unsafe false
配置說明
  • spark.serializer:序列化時用的類雏门,需要申明為org.apache.spark.serializer.KryoSerializer。這個設置不僅控制各個worker節(jié)點之間的混洗數(shù)據(jù)序列化格式掸掏,同時還控制RDD存到磁盤上的序列化格式及廣播變量的序列化格式茁影。
  • spark.kryoserializer.buffer:每個Executor中的每個core對應著一個序列化buffer。如果你的對象很大丧凤,可能需要增大該配置項募闲。其值不能超過spark.kryoserializer.buffer.max
  • spark.kryoserializer.buffer.max:允許使用序列化buffer的最大值
  • spark.kryo.classesToRegister:向Kryo注冊自定義的的類型,類名間用逗號分隔
  • spark.kryo.referenceTracking:跟蹤對同一個對象的引用情況愿待,這對發(fā)現(xiàn)有循環(huán)引用或同一對象有多個副本的情況是很有用的浩螺。設置為false可以提高性能
  • spark.kryo.registrationRequired:是否需要在Kryo登記注冊?如果為true仍侥,則序列化一個未注冊的類時會拋出異常
  • spark.kryo.registrator:為Kryo設置這個類去注冊你自定義的類要出。最后,如果你不注冊需要序列化的自定義類型访圃,Kryo也能工作厨幻,不過每一個對象實例的序列化結果都會包含一份完整的類名相嵌,這有點浪費空間
  • spark.kryo.unsafe:如果想更加提升性能腿时,可以使用Kryo unsafe方式

Kryo使用

conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");//設置序列化方式
conf.registerKryoClasses(new Class[]{_KryoBean.class});//注冊使用kryo序列化的類
另外一種注冊的方法
//實現(xiàn)一個KryoRegistrator注冊類,在該類里面對自定義的序列化類進行注冊饭宾,然后在conf里面配置該類
public class _KryoRegistor implements KryoRegistrator{
    @Override
    public void registerClasses(Kryo kryo) {
        kryo.register(_KryoBean.class, new FieldSerializer<>(kryo, _KryoBean.class));
        kryo.register(xxx.class, new FieldSerializer<>(kryo, xxx.class));
        ...
        ...
    }
}

//  在conf配置如下
SparkSession spark = SparkSession.builder().appName("").master("local")
        .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
        .config("spark.kryo.registrator", _KryoRegistor.class.getName())
        .getOrCreate();
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末批糟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子看铆,更是在濱河造成了極大的恐慌徽鼎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異否淤,居然都是意外死亡悄但,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門石抡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來檐嚣,“玉大人,你說我怎么就攤上這事啰扛『烤” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵隐解,是天一觀的道長鞍帝。 經常有香客問我,道長煞茫,這世上最難降的妖魔是什么帕涌? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮续徽,結果婚禮上宵膨,老公的妹妹穿的比我還像新娘。我一直安慰自己炸宵,他們只是感情好辟躏,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著土全,像睡著了一般捎琐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上裹匙,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天瑞凑,我揣著相機與錄音,去河邊找鬼概页。 笑死籽御,一個胖子當著我的面吹牛,可吹牛的內容都是我干的惰匙。 我是一名探鬼主播技掏,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼项鬼!你這毒婦竟也來了哑梳?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绘盟,失蹤者是張志新(化名)和其女友劉穎鸠真,沒想到半個月后悯仙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吠卷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年锡垄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祭隔。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡偎捎,死狀恐怖,靈堂內的尸體忽然破棺而出序攘,到底是詐尸還是另有隱情茴她,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布程奠,位于F島的核電站丈牢,受9級特大地震影響,放射性物質發(fā)生泄漏瞄沙。R本人自食惡果不足惜己沛,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望距境。 院中可真熱鬧申尼,春花似錦、人聲如沸垫桂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诬滩。三九已至霹粥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疼鸟,已是汗流浹背后控。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留空镜,地道東北人浩淘。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像吴攒,于是被迫代替她去往敵國和親张抄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內容