天天看點

Hadoop 序列化的研究

 Hadoop和java自帶的序列化機制不同,它自己提供了一組序列化體系接口和類。

對于基本資料類型,Writable接口就代表了可以被序列化的資料,這個接口定義了2個方法,其中write方法可以吧這個資料序列化到參數給出的DataOutput的位元組數組中,而readField方法則可以從DatInput中讀取被序列化後的位元組數組,并且反序列化為Hadoop資料:

但是在Hadoop中,序列化過程一般用于Map-Reduce,我們看不到序列化的中間産物。為了捕捉到序列化的軌迹,我們自己寫了一個工具方法,讓其序列化到位元組數組中,這樣我們可以把位元組數組的内容列印出來得到序列化後的産物:

為了顯示序列化前的Hadoop基本資料值和序列化後的位元組數組,我們寫了另一個工具類,這個工具類可以在包裝序列化前後的資訊到字元串對象中:

最終,我們還需要一個實驗類,我們傳入各種Hadoop資料對象(都要是Writable的),然後我們依次調用實驗工具類的方法,最終把這些序列化過程前後的資訊列印在控制台上:

最終控制台顯示如下:

我們從實驗結果不難看出,Hadoop的序列化後的位元組數組的長度和Java基本類型本身占用的位元組數是完全比對的。

繼續閱讀