序列化和反序列化就是結構化對象和位元組流之間的轉換,主要用在内部程序的通訊和持久化存儲方面。
通訊格式需求
hadoop在節點間的内部通訊使用的是rpc,rpc協定把消息翻譯成二進制位元組流發送到遠端節點,遠端節點再通過反序列化把二進制流轉成原始的資訊。rpc的序列化需要實作以下幾點:
1.壓縮,可以起到壓縮的效果,占用的寬帶資源要小。
2.快速,内部程序為分布式系統建構了高速鍊路,是以在序列化和反序列化間必須是快速的,不能讓傳輸速度成為瓶頸。
3.可擴充的,新的服務端為新的用戶端增加了一個參數,老用戶端照樣可以使用。
4.相容性好,可以支援多個語言的用戶端
存儲格式需求
表面上看來序列化架構在持久化存儲方面可能需要其他的一些特性,但事實上依然是那四點:
1.壓縮,占用的空間更小
2.快速,可以快速讀寫
3.可擴充,可以以老格式讀取老資料
4.相容性好,可以支援多種語言的讀寫
hadoop的序列化格式
hadoop自身的序列化存儲格式就是實作了writable接口的類,他隻實作了前面兩點,壓縮和快速。但是不容易擴充,也不跨語言。
我們先來看下writable接口,writable接口定義了兩個方法:
1.将資料寫入到二進制流中
2.從二進制資料流中讀取資料
原貼位址:http://blog.csdn.net/lastsweetop/article/details/9193907