91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hadoop中TeraSort修改后輸出翻倍異常怎么辦

發布時間:2021-11-19 16:49:14 來源:億速云 閱讀:209 作者:小新 欄目:云計算

小編給大家分享一下Hadoop中TeraSort修改后輸出翻倍異常怎么辦,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    簡而言之,就是在修改了TeraInputFormat.java之后,運行TeraSort所得到的輸出數據不同程度的翻倍,剛開始并沒有什么頭緒,并且把采樣的線程和Map的讀入<key, value>搞混了,邏輯不清晰,導致很多時間都在無關緊要的地方反復調試.

    其實應該可以想到一種辦法,就是在MapTask里設斷點觀察,但不知道是自己懶還是因為對隱藏在深處的MapTask有一種畏懼心里,起初我并沒有仔細進去看,后來在MapTask里RecordReader部分的nextKeyValue()方法里設置變量計數并輸出,來觀察每次split所獲取的記錄條數,結果發現,我的每個split都完整的獲取了整個(注意是整個輸入文件)而不是一個split大小的記錄,所以輸出也隨著翻倍了.

    那么關鍵點找出來了,問題出在哪里呢?MapTask部分是Hadoop默認綁定的,TeraSort并沒有重寫,所以這部分不可能出錯;TeraInputFormat的前半部分是取樣部分,問題不可能出在這里;后半部分的RecordReader的initialize部分和修改前基本無變化,那錯誤的部分一定是在nextKeyValue()部分了,于是一行一行分析,最終鎖定了這一句:

newSize = in.readLine(record);

    很普通的讀取一行記錄,那有沒有可能是readLine()這個方法對長度沒有限定呢?雖然nextKeyValue()方法是split對象調用的,但會不會readLine()并不理會你每個split塊的大小而是一股氣往下讀取直到讀到文件末尾呢?

    為了驗證這個可能,我添加了全局變量:    

long recordLen;
//將下面這句加在nextKeyValue()中
recordLen += newSize;

    來記錄讀取記錄的總長度,,并設定當

if(recordLen >= split.getLength){
    return false;
}

    修改后打jar包放到節點上運行,結果正確!!!

看完了這篇文章,相信你對“Hadoop中TeraSort修改后輸出翻倍異常怎么辦”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗江县| 南昌市| 靖安县| 武定县| 阿坝| 织金县| 长汀县| 浦城县| 乳山市| 东台市| 台南县| 开封县| 固安县| 利津县| 温泉县| 四子王旗| 米林县| 文安县| 杨浦区| 兴文县| 伊宁市| 阿拉尔市| 常熟市| 四平市| 兰考县| 安徽省| 台安县| 九龙城区| 囊谦县| 墨脱县| 阳新县| 旌德县| 永宁县| 井冈山市| 呼伦贝尔市| 金平| 马尔康县| 交城县| 平凉市| 安阳县| 大洼县|