2013-05-30 53 views
2

我對Hadoop數據流中的序列化有點困惑。假設我有一個Java對象定義如下(該對象可以是更復雜的比我示出):關於Hadoop中的序列化:序列化的優點是什麼?

public void MyObject { 

    private int Field1; 
    private String Field2; 

    public void method1() { 

    } 

    ... 

} 

爲了傳輸映射器和減速器之間此對象的情況下,有兩種方法:

第一種方法 - 我可以在映射器中逐個序列化int字段和String字段,並將它們寫入輸出,然後在reducer中,我讀取它們並使用這些值創建一個MyObject的新實例。假設新創建的實例與原始實例相比沒有差別。

第二種方法 - 我可以重寫MyObject來實現Writable接口,並在映射器中序列化整個實例。然後在reducer中,我只需要反序列化對象,我就可以使用它。

這兩種方法有什麼區別?在傳輸對象之前序列化對象有什麼優點。

+0

這看起來與您的其他問題相同http://stackoverflow.com/questions/16836607/what-are-the-connections-and-differences-between-hadoop-writable-and-java- io-ser/16838260#16838260 – Tariq

+0

@Tariq我先問這個,然後我問了一個更具體的問題。但實際上它們是不同的。 – Denzel

+0

我沒有注意到時間。請不要介意。而且我說過它'看起來一樣'而不是'相同'。 – Tariq

回答

1

與Java可序列化相比,Hadoop Writable更緊湊,佔用空間更少。 Hadoop映射器和reducer處理擴展Hadoops接口的對象。有關更多詳細信息,請參閱https://stackoverflow.com/a/16839597/1150329

+0

@Denzel請注意並接受答案,如果您滿意的話 –