久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

149次閱讀
沒有評論

共計 1004 個字符,預計需要花費 3 分鐘才能閱讀完成。

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

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

  其實應該可以想到一種辦法,就是在 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 修改后輸出翻倍異常怎么辦”有了一定的了解,如果想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計1004字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 富顺县| 称多县| 田东县| 遵义市| 长乐市| 滨海县| 灌南县| 罗源县| 湾仔区| 九龙城区| 岳阳县| 汝阳县| 贵德县| 罗源县| 南宁市| 穆棱市| 治县。| 囊谦县| 保定市| 泰顺县| 太白县| 宣化县| 福清市| 绍兴县| 芦溪县| 溆浦县| 太白县| 盐边县| 吴川市| 台前县| 龙海市| 明光市| 乐平市| 富平县| 慈利县| 开原市| 景宁| 慈溪市| 波密县| 淳安县| 宝鸡市|