Spark序列化
Java序列化
有關Java物件的序列化和反序列化也算是Java基礎的一部分,首先對Java序列化的機制和原理進行一些介紹。
Java序列化演算法
Serialization(序列化)是一種將物件以一連串的位元組描述的過程;反序列化deserialization是一種將這些位元組重建成一個物件的過程。Java序列化API提供一種處理物件序列化的標準機制。
為什麼要進行序列化?
Java中,一切都是物件,在分散式環境中經常需要將Object從這一端網路或裝置傳遞到另一端。這就需要有一種可以在兩端傳輸資料的協議。Java序列化機制就是為了解決這個問題而產生。
如何進行序列化?
一個物件能夠序列化的前提是實現Serializable介面,Serializable介面沒有方法,更像是個標記。有了這個標記的Class就能被序列化機制處理。
1、實現Serializable介面
2、寫個程式將物件序列化並輸出(ObjectOutputStream能把Object輸出成Byte流。將Byte流暫時儲存到serial.out檔案裡)
3、使用ObjectInputStream從持久的檔案中讀取Bytes重建物件
Spark序列化
透過以上內容大概瞭解了序列化和反序列化的原理,接下來看看Spark的序列化
大部分Spark程式都具有“記憶體計算”的天性,所以叢集中的所有資源:CPU、網路頻寬或者是記憶體都有可能成為Spark程式的瓶頸。
通常情況下,如果資料完全載入到記憶體那麼網路頻寬就會成為瓶頸,但是你仍然需要對程式進行最佳化,例如採用序列化的方式儲存RDD資料以便減少記憶體使用。
資料序列化不但能提高網路效能還能減少記憶體使用。
Spark透過兩種方式來建立序列化器
序列化
在預設情況下,Spark採用Java的ObjectOutputStream序列化一個物件。該方式適用於所有實現了的類。透過繼承,你能進一步控制序列化的效能。Java序列化非常靈活,但是速度較慢,在某些情況下序列化的結果也比較大。
序列化
Spark也能使用Kryo(版本2)序列化物件。Kryo不但速度極快,而且產生的結果更為緊湊(通常能提高10倍)。Kryo的缺點是不支援所有型別,為了更好的效能,你需要提前註冊程式中所使用的類(class)。
Java的序列化比較簡單,就和前面的一樣,下面主要介紹序列化的使用。
序列化怎麼用?
可以在建立SparkContext之前,透過呼叫System.setProperty("spark.serializer", "spark.KryoSerializer"),將序列化方式切換成Kryo。
但是Kryo需要使用者進行註冊,這也是為什麼Kryo不能成為Spark序列化預設方式的唯一原因,但是建議對於任何“網路密集型”(network-intensive)的應用,都採用這種方式進行序列化方式。
文件描述了很多便於註冊的高階選項,例如新增使用者自定義的序列化程式碼。
如果物件非常大,你還需要增加屬性spark.kryoserializer.buffer.mb的值。該屬性的預設值是32,但是該屬性需要足夠大以便能夠容納需要序列化的最大物件。
最後,如果你不註冊你的類,Kryo仍然可以工作,但是需要為了每一個物件儲存其對應的全類名(full class name),這是非常浪費的。
以上是Spark序列化簡單的應用,如有錯誤請指正...~
作者:利伊奧克兒
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4328/viewspace-2818775/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物件序列化(序列化)物件
- Spark之spark shellSpark
- 【Spark篇】---Spark初始Spark
- Java序列化、反序列化、反序列化漏洞Java
- 序列化與反序列化
- Spark on Yarn 和Spark on MesosSparkYarn
- Spark系列 - (3) Spark SQLSparkSQL
- 序列化與反序列化(GO)Go
- Spark學習進度-Spark環境搭建&Spark shellSpark
- 【Spark】Spark容錯機制Spark
- Spark導論(Spark自學一)Spark
- sparkSpark
- Java的序列化和反序列化Java
- Java的序列化與反序列化Java
- C++ 序列化和反序列化C++
- JSON 物件序列化、反序列化JSON物件
- Java--序列化與反序列化Java
- php中序列化與反序列化PHP
- spark學習筆記--Spark SQLSpark筆記SQL
- Spark記錄(一):Spark全景概述Spark
- Spark開發-Spark核心細說Spark
- Spark開發-spark環境搭建Spark
- python的序列化和反序列化Python
- PHP的序列化和反序列化入門PHP
- java 序列化與反序列化例項Java
- c#序列化與反序列化概述C#
- .net序列化與反序列化總結
- Java中的序列化與反序列化Java
- [Java基礎]序列化和反序列化Java
- Spark文件閱讀之一:Spark OverviewSparkView
- Spark 系列(九)—— Spark SQL 之 Structured APISparkSQLStructAPI
- Spark 系列(十四)—— Spark Streaming 基本操作Spark
- Spark 系列(十五)—— Spark Streaming 整合 FlumeSpark
- Hello Spark! | Spark,從入門到精通Spark
- spark2.2.0 配置spark sql 操作hiveSparkSQLHive
- Spark SQL | Spark,從入門到精通SparkSQL
- spark學習筆記-- Spark StreamingSpark筆記
- Spark —— Spark OOM Error問題排查定位SparkOOMError