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

關於hadoop中的map過程,個人理解是每個map系統會開啓一個JVM進程來處理,map之間相互並行,map函數內串行。這樣的想法是否正確?函數

因爲想在hadoop集羣上算一個初始輸入數據很少,可是計算很複雜的程序,但願經過mapreduce來達到並行計算的目的。能夠經過job.setNumReduceTasks(0);語句設置reduce個數爲0,只使用map來計算。可是設置map的個數時遇到了問題:新的API中job沒有相似setNumMapTasks()這樣的方法; 在運行時加入參數-D mapreduce.map.tasks=2這樣的參數也無效。oop

查過好多資料,好像是說map的個數取決於block_sizetotal_size等參數。可是都說的是1.x版本的設置,hadoop 2.2.0上並無找到mapred.map.tasksmapred.min.split.size等對應的設置方法。大數據

因爲個人輸入文件只有一個文件,並且不算是「大數據」,只是單純想在hadoop上實現並行,因此我但願可以設置一個最少的map數目,以便能在各個計算節點上並行。請問我應該如何設置?code

 

 

 

事隔10天后無人回答,再次自問自答(— . —!)。最近看到一本書,上面介紹自定義InputFormat來控制map個數以及存儲位置。稍微看了下FileInputFormat的接口,發現竟然有setMaxInputSplitSize()這個靜態方法。(本身之前怎麼沒發現!! 也怪本身懶,不肯意去找) 在run方法中加了這麼一句FileInputFormat.setMaxInputSplitSize(job, 1048576), 再次運行貌似有效,程序生成了6個map來運行。orm

但感到無法解釋的有兩點:接口

1.此處設置的值爲1048576(1M),個人輸入文件有20.95MB,若是最大份片大小爲1M的話應該有20多個map。其中必然有更細緻的判斷,還得研究如下相應處理的代碼才能解決;
2. 6個map全在同一個節點上運行,沒有分到不一樣節點上;進程

個人環境爲hadoop 2.2.0,我曾經試過修改dfs.blocksize等配置參數,可是彷佛都沒有生效。不知道爲何會出現配置參數無效的狀況。hadoop


補充:剛纔瞭解到最終的分片大小splitSize受到maxsizeminsize以及blocksize的影響。設置FileInputFormat.setMinInputSplitSize(job, 1)後,map數果真達到了20。it

相關文章
相關標籤/搜索