2 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
最近看到一本書,上面介紹自定義InputFormat
來控制map個(gè)數(shù)以及存儲位置。稍微看了下FileInputFormat
的接口,發(fā)現(xiàn)居然有setMaxInputSplitSize()
這個(gè)靜態(tài)方法。(自己以前怎么沒發(fā)現(xiàn)??! 也怪自己懶,不愿意去找) 在run
方法中加了這么一句FileInputFormat.setMaxInputSplitSize(job, 1048576)
, 再次運(yùn)行貌似有效,程序生成了6個(gè)map來運(yùn)行。
但感到?jīng)]法解釋的有兩點(diǎn):
1.此處設(shè)置的值為1048576(1M),我的輸入文件有20.95MB,如果最大份片大小為1M的話應(yīng)該有20多個(gè)map。其中必然有更細(xì)致的判斷,還得研究以下相應(yīng)處理的代碼才能解決;
2. 6個(gè)map全在同一個(gè)節(jié)點(diǎn)上運(yùn)行,沒有分到不同節(jié)點(diǎn)上;
我的環(huán)境為hadoop 2.2.0,我曾經(jīng)試過修改dfs.blocksize
等配置參數(shù),但是似乎都沒有生效。不知道為什么會出現(xiàn)配置參數(shù)無效的情況。
補(bǔ)充:剛才了解到最終的分片大小splitSize
受到maxsize
、minsize
以及blocksize
的影響。設(shè)置FileInputFormat.setMinInputSplitSize(job, 1)
后,map數(shù)果然達(dá)到了20。
- 2 回答
- 0 關(guān)注
- 1161 瀏覽
添加回答
舉報(bào)