亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

hadoop 2.2.0 關于map和reduce的個數的設置

hadoop 2.2.0 關于map和reduce的個數的設置

眼眸繁星 2019-04-14 09:51:30
關于hadoop中的map過程,我的理解是每一個map系統會開啟一個JVM進程來處理,map之間相互并行,map函數內串行。這樣的想法是否正確?由于想在hadoop集群上算一個初始輸入數據不多,但是計算很復雜的程序,希望通過mapreduce來達到并行計算的目的。可以通過job.setNumReduceTasks(0);語句設置reduce個數為0,只使用map來計算。但是設置map的個數時遇到了問題:新的API中job沒有類似setNumMapTasks()這樣的方法;在運行時加入參數-Dmapreduce.map.tasks=2這樣的參數也無效。查過好多資料,好像是說map的個數取決于block_size、total_size等參數。但是都說的是1.x版本的設置,hadoop2.2.0上并沒有找到mapred.map.tasks、mapred.min.split.size等對應的設置方法。由于我的輸入文件只有一個文件,而且不算是“大數據”,只是單純想在hadoop上實現并行,所以我希望能夠設置一個最少的map數目,以便能在各個計算節點上并行。請問我應該如何設置?
查看完整描述

2 回答

?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

事隔10天后無人回答,再次自問自答(—.—?。?。最近看到一本書,上面介紹自定義InputFormat來控制map個數以及存儲位置。稍微看了下FileInputFormat的接口,發現居然有setMaxInputSplitSize()這個靜態方法。(自己以前怎么沒發現!!也怪自己懶,不愿意去找)在run方法中加了這么一句FileInputFormat.setMaxInputSplitSize(job,1048576),再次運行貌似有效,程序生成了6個map來運行。
但感到沒法解釋的有兩點:
1.此處設置的值為1048576(1M),我的輸入文件有20.95MB,如果最大份片大小為1M的話應該有20多個map。其中必然有更細致的判斷,還得研究以下相應處理的代碼才能解決;
2.6個map全在同一個節點上運行,沒有分到不同節點上;
我的環境為hadoop2.2.0,我曾經試過修改dfs.blocksize等配置參數,但是似乎都沒有生效。不知道為什么會出現配置參數無效的情況。
補充:剛才了解到最終的分片大小splitSize受到maxsize、minsize以及blocksize的影響。設置FileInputFormat.setMinInputSplitSize(job,1)后,map數果然達到了20。
                            
查看完整回答
反對 回復 2019-04-14
  • 2 回答
  • 0 關注
  • 400 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號