設置MapReduce的Split大小


因為我們的應用中處理的記錄都是固定長度的,就是說所有數據都是由固定長度的記錄構成的。這里用recordSize表示一個記錄的大小,記錄在處理處理過程中要保持完整性,所以在設置Split大小時,開始的實現代碼為:

int blockSize = Integer.parseInt(args[0]); //args[0]為輸入參數,表示用戶希望設置的Split大小

int splitSize = blockSize / recordSize * recordSize;

conf.setLong("mapred.max.split.size",splitSize);

后來發現這樣做是有問題的。因為splitSize的計算公式未:

splitSize=max(minSize,min(maxSize,blockSize))

其中blockSize為文件塊大小。正確的做法如下:

int blockSize = Integer.parseInt(args[0]); //args[0]為輸入參數,表示用戶希望設置的Split大小

int splitSize = blockSize / recordSize * recordSize;

conf.setLong("mapred.max.split.size",splitSize);
conf.setLong("mapred.min.split.size",splitSize);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM