帶你快速瞭解Hadoop的序列化
阿新 • • 發佈:2018-12-16
一、為什麼要序列化
一般來說,“活的”物件只生存在記憶體裡,關機斷電就沒有了。而且“活的”物件只能由本地的程序使用,不能被髮送到網路上的另外一臺計算機。 然而序列化可以儲存“活的” 物件,可以將“活的”物件傳送到遠端計算機。
二、什麼是序列化
序列化就是把記憶體中的物件,轉換成位元組序列(或其他資料傳輸協議)以便於儲存(持久化)和網路傳輸。
反序列化就是將收到位元組序列(或其他資料傳輸協議)或者是硬碟的持久化資料,轉換成記憶體中的物件。
三、為什麼不用Java的序列化
Java 的序列化是一個重量級序列化框架(Serializable),一個物件被序列化後,會附帶很多額外的資訊(各種校驗資訊,header,繼承體系等),不便於在網路中高效傳輸。所以,
hadoop 自己開發了一套序列化機制(Writable),精簡、高效。
四、為什麼序列化對Hadoop很重要
因為Hadoop 在叢集之間進行通訊或者 RPC 呼叫的時候,需要序列化,而且要求序列化要快,且體積要小,佔用頻寬要小。所以必須理解Hadoop 的序列化機制。
序列化和反序列化在分散式資料處理領域經常出現:程序通訊和永久儲存。然而 Hadoop
中各個節點的通訊是通過遠端呼叫(RPC)實現的,那麼 RPC 序列化要求具有以下特點:
- 緊湊:緊湊的格式能讓我們充分利用網路頻寬,而頻寬是資料中心最稀缺的資源
- 快速:程序通訊形成了分散式系統的骨架,所以需要儘量減少序列化和反序列化的效能開銷,這是基本的
- 可擴充套件:協議為了滿足新的需求變化,所以控制客戶端和伺服器過程中,需要直接引進相應的協議,這些是新協議,原序列化方式能支援新的協議報文
- 互操作:能支援不同語言寫的客戶端和服務端進行互動
五、常用資料序列化型別
常用的資料型別對應的Hadoop資料序列化型別: