MapReducer糾錯之序列化反序列化問題

2021-08-31 21:36:43 字數 862 閱讀 3013

在mapreducer程式設計中經常會出現序列化反序列化的說法

在這裡解釋一下

序列化:序列化的意思就是把記憶體中的物件變成位元組儲存到磁碟上

反序列化:反序列化的意思就是把磁碟上的物件活化到記憶體中

說到這裡也許還是沒有說清楚序列化的意思,在大資料中,假設有乙個非常大的集群,也就是很多計算機,這一群計算機叫做集群,mapreducer程式就是乙個計算資料的程式,當a這台機器計算完畢之後,a要把工作交給b機器做,但是在a中產生的資料(比如物件)如何給他呢?沒有無窮無盡的記憶體啊,就要通過磁碟io傳輸,所以就需要序列化啦!a先將記憶體中的物件序列化到磁碟,然後b讀取之後,把磁碟中的物件反序列化成記憶體的物件。

序列化的方法

1.將需要序列化的物件,實現writeable介面

2.空參構造

3.重寫序列化方法write

4.重寫反序列化方法readwrite

5.重寫tostring方法,為了可以將結果寫在檔案中,並且為了便於處理,用「\t「隔開

6.如果想要把這個序列化的物件當作key來傳遞,那麼還需要實現writablecomparable,並重寫它的comparato方法,因為shuffle時他要根據key排序

今天在手寫乙個mapreducer程式時,發現當map階段結束,reduce階段開始時,序列化的這個物件是空值,這就讓我覺得很奇怪,自己看了很久都沒有看出來,debug的時候,一步一步看才看到,原來是自己反序列化的方法裡面什麼都沒有,所以reduce階段反序列化得到的物件是空的。

用了idea這款軟體用了快半個月了,還是覺得不順手,過幾天把idea的除錯方法放出來給各位看看。

糾錯技術之FEC(向前糾錯)

糾錯碼 error correcting code 在傳輸過程中發生錯誤後能在收端自行發現或糾正的碼。僅用來發現錯誤的碼一般常稱為檢錯碼。為使一種碼具有檢錯或糾錯能力,須對原碼字增加多餘的碼元,以擴大碼字之間的差別 即把原碼字按某種規則變成有一定剩餘度 見信源編碼 的碼字,並使每個碼字的碼之間有一定...

網路技術原理之檢錯與糾錯

二維奇偶校驗 迴圈冗餘校驗 crc 是一種通過多項式除法檢測錯誤的方法,將每個位元串看作乙個多項式,採用模2運算。通常它將位元串 bn 1bn 2bn 3 b2b1b0解釋成多項式 bn 1xn 1 bn 2xn 2 bn 3xn 3 b2x2 b1x1 b0x0 如果採用多項式編碼的方式,傳送方和...

力扣解題思路 115 不同的子串行 糾錯記錄

思路 給定乙個字串 s 和乙個字串 t,計算在 s 的子串行中 t 出現的個數。乙個字串的乙個子串行是指,通過刪除一些 也可以不刪除 字元且不干擾剩餘字元相對位置所組成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是 題目資料保證答案符合 32 位帶符號整數範圍。輸入 s ra...